fmt: TypeDecl; format more files
							parent
							
								
									d86539c4f5
								
							
						
					
					
						commit
						c73d91a8fe
					
				| 
						 | 
					@ -6,11 +6,11 @@ module ast
 | 
				
			||||||
import v.token
 | 
					import v.token
 | 
				
			||||||
import v.table
 | 
					import v.table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type TypeDecl = AliasTypeDecl | SumTypeDecl | FnTypeDecl
 | 
					pub type TypeDecl = AliasTypeDecl | FnTypeDecl | SumTypeDecl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type Expr = AnonFn | ArrayInit | AsCast | AssignExpr | Assoc | BoolLiteral | CastExpr | CallExpr | CharLiteral | ConcatExpr | EnumVal | FloatLiteral | IfExpr | Ident | IfGuardExpr | InfixExpr | IndexExpr | IntegerLiteral | MapInit | MatchExpr | None | OrExpr | ParExpr | PostfixExpr | PrefixExpr | RangeExpr | SelectorExpr | SizeOf | StringLiteral | StringInterLiteral | StructInit | Type | TypeOf
 | 
					pub type Expr = AnonFn | ArrayInit | AsCast | AssignExpr | Assoc | BoolLiteral | CallExpr | CastExpr | CharLiteral | ConcatExpr | EnumVal | FloatLiteral | Ident | IfExpr | IfGuardExpr | IndexExpr | InfixExpr | IntegerLiteral | MapInit | MatchExpr | None | OrExpr | ParExpr | PostfixExpr | PrefixExpr | RangeExpr | SelectorExpr | SizeOf | StringInterLiteral | StringLiteral | StructInit | Type | TypeOf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type Stmt = AssignStmt | AssertStmt | Attr | Block | BranchStmt | Comment | CompIf | ConstDecl | DeferStmt | EnumDecl | ExprStmt | FnDecl | ForCStmt | ForInStmt | ForStmt | GlobalDecl | GoStmt | GotoLabel | GotoStmt | HashStmt | Import | InterfaceDecl | Module | Return | StructDecl | TypeDecl | UnsafeStmt
 | 
					pub type Stmt = AssertStmt | AssignStmt | Attr | Block | BranchStmt | Comment | CompIf | ConstDecl | DeferStmt | EnumDecl | ExprStmt | FnDecl | ForCStmt | ForInStmt | ForStmt | GlobalDecl | GoStmt | GotoLabel | GotoStmt | HashStmt | Import | InterfaceDecl | Module | Return | StructDecl | TypeDecl | UnsafeStmt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type ScopeObject = ConstField | GlobalDecl | Var
 | 
					pub type ScopeObject = ConstField | GlobalDecl | Var
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -428,7 +428,6 @@ pub:
 | 
				
			||||||
	is_else bool
 | 
						is_else bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
CompIf.is_opt:
 | 
					CompIf.is_opt:
 | 
				
			||||||
`$if xyz? {}` => this compile time `if` is optional,
 | 
					`$if xyz? {}` => this compile time `if` is optional,
 | 
				
			||||||
| 
						 | 
					@ -438,7 +437,6 @@ if `xyz` is NOT defined.
 | 
				
			||||||
If .is_opt is false, then when `xyz` is not defined,
 | 
					If .is_opt is false, then when `xyz` is not defined,
 | 
				
			||||||
the compilation will fail.
 | 
					the compilation will fail.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					 | 
				
			||||||
pub struct CompIf {
 | 
					pub struct CompIf {
 | 
				
			||||||
pub:
 | 
					pub:
 | 
				
			||||||
	val        string
 | 
						val        string
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ pub fn (node &FnDecl) str(t &table.Table) string {
 | 
				
			||||||
			m = '&'
 | 
								m = '&'
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		receiver = '($node.receiver.name $m$name) '
 | 
							receiver = '($node.receiver.name $m$name) '
 | 
				
			||||||
*/
 | 
							*/
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mut name := if node.is_anon { '' } else { node.name.after('.') }
 | 
						mut name := if node.is_anon { '' } else { node.name.after('.') }
 | 
				
			||||||
	if node.is_c {
 | 
						if node.is_c {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@ pub fn (mut b Builder) build_x64(v_files []string, out_file string) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn (mut b Builder) compile_x64() {
 | 
					pub fn (mut b Builder) compile_x64() {
 | 
				
			||||||
	// v.files << v.v_files_from_dir(os.join_path(v.pref.vlib_path,'builtin','bare'))
 | 
						// v.files << v.v_files_from_dir(os.join_path(v.pref.vlib_path,'builtin','bare'))
 | 
				
			||||||
	files := [ b.pref.path]
 | 
						files := [b.pref.path]
 | 
				
			||||||
	b.set_module_lookup_paths()
 | 
						b.set_module_lookup_paths()
 | 
				
			||||||
	b.build_x64(files, b.pref.out_name)
 | 
						b.build_x64(files, b.pref.out_name)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ import term
 | 
				
			||||||
fn test_all() {
 | 
					fn test_all() {
 | 
				
			||||||
	mut total_errors := 0
 | 
						mut total_errors := 0
 | 
				
			||||||
	vexe := os.getenv('VEXE')
 | 
						vexe := os.getenv('VEXE')
 | 
				
			||||||
	//vroot := os.dir(vexe)
 | 
						// vroot := os.dir(vexe)
 | 
				
			||||||
	dir := 'vlib/v/checker/tests/inout'
 | 
						dir := 'vlib/v/checker/tests/inout'
 | 
				
			||||||
	files := os.ls(dir) or {
 | 
						files := os.ls(dir) or {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
| 
						 | 
					@ -28,8 +28,10 @@ fn test_all() {
 | 
				
			||||||
		mut expected := os.read_file(program.replace('.v', '') + '.out') or {
 | 
							mut expected := os.read_file(program.replace('.v', '') + '.out') or {
 | 
				
			||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		expected = expected.trim_space().replace(' \n', '\n').replace(' \r\n', '\n').replace('\r\n', '\n').trim('\n')
 | 
							expected = expected.trim_space().replace(' \n', '\n').replace(' \r\n', '\n').replace('\r\n',
 | 
				
			||||||
		found := res.output.trim_space().replace(' \n', '\n').replace(' \r\n', '\n').replace('\r\n', '\n').trim('\n')
 | 
								'\n').trim('\n')
 | 
				
			||||||
 | 
							found := res.output.trim_space().replace(' \n', '\n').replace(' \r\n', '\n').replace('\r\n',
 | 
				
			||||||
 | 
								'\n').trim('\n')
 | 
				
			||||||
		if expected != found {
 | 
							if expected != found {
 | 
				
			||||||
			println(term.red('FAIL'))
 | 
								println(term.red('FAIL'))
 | 
				
			||||||
			println('============')
 | 
								println('============')
 | 
				
			||||||
| 
						 | 
					@ -40,8 +42,7 @@ fn test_all() {
 | 
				
			||||||
			println(found)
 | 
								println(found)
 | 
				
			||||||
			println('============\n')
 | 
								println('============\n')
 | 
				
			||||||
			total_errors++
 | 
								total_errors++
 | 
				
			||||||
		}
 | 
							} else {
 | 
				
			||||||
		else {
 | 
					 | 
				
			||||||
			println(term.green('OK'))
 | 
								println(term.green('OK'))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,14 +1,11 @@
 | 
				
			||||||
module doc
 | 
					module doc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import strings
 | 
				
			||||||
	strings
 | 
					import v.pref
 | 
				
			||||||
	// v.builder
 | 
					import v.table
 | 
				
			||||||
	v.pref
 | 
					import v.parser
 | 
				
			||||||
	v.table
 | 
					import v.ast
 | 
				
			||||||
	v.parser
 | 
					import os
 | 
				
			||||||
	v.ast
 | 
					 | 
				
			||||||
	os
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct Doc {
 | 
					struct Doc {
 | 
				
			||||||
	out   strings.Builder
 | 
						out   strings.Builder
 | 
				
			||||||
| 
						 | 
					@ -18,7 +15,7 @@ mut:
 | 
				
			||||||
	stmts []ast.Stmt // all module statements from all files
 | 
						stmts []ast.Stmt // all module statements from all files
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type FilterFn fn(node ast.FnDecl)bool
 | 
					type FilterFn = fn (node ast.FnDecl) bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn doc(mod string, table &table.Table) string {
 | 
					pub fn doc(mod string, table &table.Table) string {
 | 
				
			||||||
	mut d := Doc{
 | 
						mut d := Doc{
 | 
				
			||||||
| 
						 | 
					@ -28,7 +25,7 @@ pub fn doc(mod string, table &table.Table) string {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	vlib_path := os.dir(pref.vexe_path()) + '/vlib'
 | 
						vlib_path := os.dir(pref.vexe_path()) + '/vlib'
 | 
				
			||||||
	mod_path := mod.replace('.', os.path_separator)
 | 
						mod_path := mod.replace('.', os.path_separator)
 | 
				
			||||||
	path := os.join_path(vlib_path,mod_path)
 | 
						path := os.join_path(vlib_path, mod_path)
 | 
				
			||||||
	if !os.exists(path) {
 | 
						if !os.exists(path) {
 | 
				
			||||||
		println('module "$mod" not found')
 | 
							println('module "$mod" not found')
 | 
				
			||||||
		println(path)
 | 
							println(path)
 | 
				
			||||||
| 
						 | 
					@ -45,7 +42,10 @@ pub fn doc(mod string, table &table.Table) string {
 | 
				
			||||||
		if file.ends_with('_test.v') || file.ends_with('_windows.c.v') || file.ends_with('_macos.c.v') {
 | 
							if file.ends_with('_test.v') || file.ends_with('_windows.c.v') || file.ends_with('_macos.c.v') {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		file_ast := parser.parse_file(os.join_path(path,file), table, .skip_comments,	&pref.Preferences{}, &ast.Scope{parent: 0})
 | 
							file_ast := parser.parse_file(os.join_path(path, file), table, .skip_comments, &pref.Preferences{},
 | 
				
			||||||
 | 
								&ast.Scope{
 | 
				
			||||||
 | 
								parent: 0
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
		d.stmts << file_ast.stmts
 | 
							d.stmts << file_ast.stmts
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if d.stmts.len == 0 {
 | 
						if d.stmts.len == 0 {
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,6 @@ pub fn doc(mod string, table &table.Table) string {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	println(path)
 | 
						println(path)
 | 
				
			||||||
	*/
 | 
						*/
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return d.out.str().trim_space()
 | 
						return d.out.str().trim_space()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,18 +70,18 @@ fn (d &Doc) get_fn_node(f ast.FnDecl) string {
 | 
				
			||||||
	return f.str(d.table).replace_each([d.mod + '.', '', 'pub ', ''])
 | 
						return f.str(d.table).replace_each([d.mod + '.', '', 'pub ', ''])
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn (d mut Doc) print_fns() {
 | 
					fn (mut d Doc) print_fns() {
 | 
				
			||||||
	fn_signatures := d.get_fn_signatures(is_pub_function)
 | 
						fn_signatures := d.get_fn_signatures(is_pub_function)
 | 
				
			||||||
	d.write_fn_signatures(fn_signatures)
 | 
						d.write_fn_signatures(fn_signatures)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn (d mut Doc) print_methods() {
 | 
					fn (mut d Doc) print_methods() {
 | 
				
			||||||
	fn_signatures := d.get_fn_signatures(is_pub_method)
 | 
						fn_signatures := d.get_fn_signatures(is_pub_method)
 | 
				
			||||||
	d.write_fn_signatures(fn_signatures)
 | 
						d.write_fn_signatures(fn_signatures)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[inline]
 | 
					[inline]
 | 
				
			||||||
fn (d mut Doc) write_fn_signatures(fn_signatures []string) {
 | 
					fn (mut d Doc) write_fn_signatures(fn_signatures []string) {
 | 
				
			||||||
	for s in fn_signatures {
 | 
						for s in fn_signatures {
 | 
				
			||||||
		d.out.writeln(s)
 | 
							d.out.writeln(s)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -113,7 +112,7 @@ fn is_pub_function(node ast.FnDecl) bool {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO it's probably better to keep using AST, not `table`
 | 
					// TODO it's probably better to keep using AST, not `table`
 | 
				
			||||||
fn (d mut Doc) print_enums() {
 | 
					fn (mut d Doc) print_enums() {
 | 
				
			||||||
	for typ in d.table.types {
 | 
						for typ in d.table.types {
 | 
				
			||||||
		if typ.kind != .enum_ {
 | 
							if typ.kind != .enum_ {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
| 
						 | 
					@ -127,7 +126,7 @@ fn (d mut Doc) print_enums() {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn (d mut Doc) print_structs() {
 | 
					fn (mut d Doc) print_structs() {
 | 
				
			||||||
	for typ in d.table.types {
 | 
						for typ in d.table.types {
 | 
				
			||||||
		if typ.kind != .struct_ || !typ.name.starts_with(d.mod + '.') {
 | 
							if typ.kind != .struct_ || !typ.name.starts_with(d.mod + '.') {
 | 
				
			||||||
			// !typ.name[0].is_capital() || typ.name.starts_with('C.') {
 | 
								// !typ.name[0].is_capital() || typ.name.starts_with('C.') {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -375,6 +375,44 @@ fn (mut f Fmt) type_decl(node ast.TypeDecl) {
 | 
				
			||||||
			ptype := f.type_to_str(it.parent_type)
 | 
								ptype := f.type_to_str(it.parent_type)
 | 
				
			||||||
			f.write('type $it.name $ptype')
 | 
								f.write('type $it.name $ptype')
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							ast.FnTypeDecl {
 | 
				
			||||||
 | 
								if it.is_pub {
 | 
				
			||||||
 | 
									f.write('pub ')
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								typ_sym := f.table.get_type_symbol(it.typ)
 | 
				
			||||||
 | 
								fn_typ_info := typ_sym.info as table.FnType
 | 
				
			||||||
 | 
								fn_info := fn_typ_info.func
 | 
				
			||||||
 | 
								fn_name := it.name.replace(f.cur_mod + '.', '')
 | 
				
			||||||
 | 
								f.write('type $fn_name = fn (')
 | 
				
			||||||
 | 
								for i, arg in fn_info.args {
 | 
				
			||||||
 | 
									f.write(arg.name)
 | 
				
			||||||
 | 
									mut s := f.table.type_to_str(arg.typ)
 | 
				
			||||||
 | 
									if arg.is_mut {
 | 
				
			||||||
 | 
										f.write('mut ')
 | 
				
			||||||
 | 
										if s.starts_with('&') {
 | 
				
			||||||
 | 
											s = s[1..]
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									is_last_arg := i == fn_info.args.len - 1
 | 
				
			||||||
 | 
									should_add_type := is_last_arg || fn_info.args[i + 1].typ != arg.typ || (fn_info.is_variadic &&
 | 
				
			||||||
 | 
										i == fn_info.args.len - 2)
 | 
				
			||||||
 | 
									if should_add_type {
 | 
				
			||||||
 | 
										if fn_info.is_variadic && is_last_arg {
 | 
				
			||||||
 | 
											f.write(' ...' + s)
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
 | 
											f.write(' ' + s)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if !is_last_arg {
 | 
				
			||||||
 | 
										f.write(', ')
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								f.write(')')
 | 
				
			||||||
 | 
								if fn_info.return_type.idx() != table.void_type_idx {
 | 
				
			||||||
 | 
									ret_str := f.table.type_to_str(fn_info.return_type)
 | 
				
			||||||
 | 
									f.write(' ' + ret_str)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		ast.SumTypeDecl {
 | 
							ast.SumTypeDecl {
 | 
				
			||||||
			if it.is_pub {
 | 
								if it.is_pub {
 | 
				
			||||||
				f.write('pub ')
 | 
									f.write('pub ')
 | 
				
			||||||
| 
						 | 
					@ -384,11 +422,9 @@ fn (mut f Fmt) type_decl(node ast.TypeDecl) {
 | 
				
			||||||
			for t in it.sub_types {
 | 
								for t in it.sub_types {
 | 
				
			||||||
				sum_type_names << f.type_to_str(t)
 | 
									sum_type_names << f.type_to_str(t)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								sum_type_names.sort()
 | 
				
			||||||
			f.write(sum_type_names.join(' | '))
 | 
								f.write(sum_type_names.join(' | '))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
					 | 
				
			||||||
			eprintln('fmt type_decl: unknown ' + typeof(node))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	f.writeln('\n')
 | 
						f.writeln('\n')
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,26 @@
 | 
				
			||||||
// Sumtype
 | 
					// Sumtype
 | 
				
			||||||
type FooBar = Foo | Bar
 | 
					type FooBar = Bar | Foo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type PublicBar = Foo | Bar | FooBar
 | 
					pub type PublicBar = Bar | Foo | FooBar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Uint = byte | u16 | u32 | u64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Float = f32 | f64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Alias type
 | 
					// Alias type
 | 
				
			||||||
type MyInt int
 | 
					type MyInt int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type Abc f32
 | 
					pub type Abc f32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Fn type decl
 | 
				
			||||||
 | 
					type EmptyFn = fn ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type OneArgFn = fn (i int)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TwoDiffArgs = fn (i int, s string) bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TwoSameArgs = fn (i, j int) string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type VarArgs = fn (s ...string) int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type NOVarArgs = fn (i int, s ...string) f64
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,32 @@
 | 
				
			||||||
   type    FooBar=   Foo |     Bar
 | 
					   type    FooBar=   Foo |     Bar
 | 
				
			||||||
   pub type   PublicBar = Foo | Bar | FooBar
 | 
					   pub type   PublicBar = Foo | Bar | FooBar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type   Uint =   u16 | u64
 | 
				
			||||||
 | 
						| u32
 | 
				
			||||||
 | 
						    | byte
 | 
				
			||||||
 | 
					type
 | 
				
			||||||
 | 
					Float =
 | 
				
			||||||
 | 
						f32 |
 | 
				
			||||||
 | 
						f64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 // Alias type
 | 
					 // Alias type
 | 
				
			||||||
     type  MyInt    int
 | 
					     type  MyInt    int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 pub type Abc f32
 | 
					 pub type Abc f32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Fn type decl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 type EmptyFn	= fn()
 | 
				
			||||||
 | 
					type OneArgFn =
 | 
				
			||||||
 | 
						fn (i    int)
 | 
				
			||||||
 | 
					type TwoDiffArgs
 | 
				
			||||||
 | 
					= fn (i    int, s string) bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						type TwoSameArgs = fn(i int, j int) string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type VarArgs = fn
 | 
				
			||||||
 | 
					(s ...string) int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type NOVarArgs = fn(i int, s ...string) f64
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,8 @@
 | 
				
			||||||
// that can be found in the LICENSE file.
 | 
					// that can be found in the LICENSE file.
 | 
				
			||||||
module gen
 | 
					module gen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import v.table
 | 
				
			||||||
	v.table
 | 
					import strings
 | 
				
			||||||
	strings
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO replace with comptime code generation.
 | 
					// TODO replace with comptime code generation.
 | 
				
			||||||
// TODO remove cJSON dependency.
 | 
					// TODO remove cJSON dependency.
 | 
				
			||||||
| 
						 | 
					@ -19,7 +17,7 @@ import (
 | 
				
			||||||
// return res;
 | 
					// return res;
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
// Codegen json_decode/encode funcs
 | 
					// Codegen json_decode/encode funcs
 | 
				
			||||||
fn (g mut Gen) gen_json_for_type(typ table.Type) {
 | 
					fn (mut g Gen) gen_json_for_type(typ table.Type) {
 | 
				
			||||||
	mut dec := strings.new_builder(100)
 | 
						mut dec := strings.new_builder(100)
 | 
				
			||||||
	mut enc := strings.new_builder(100)
 | 
						mut enc := strings.new_builder(100)
 | 
				
			||||||
	sym := g.table.get_type_symbol(typ)
 | 
						sym := g.table.get_type_symbol(typ)
 | 
				
			||||||
| 
						 | 
					@ -73,7 +71,7 @@ Option ${dec_fn.name}(cJSON* root, $t* res) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
'
 | 
					'
 | 
				
			||||||
*/
 | 
						*/
 | 
				
			||||||
	// Code gen encoder
 | 
						// Code gen encoder
 | 
				
			||||||
	enc_fn_name := js_enc_name(sym.name)
 | 
						enc_fn_name := js_enc_name(sym.name)
 | 
				
			||||||
	enc.writeln('
 | 
						enc.writeln('
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ import v.ast
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type Type int
 | 
					pub type Type int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type TypeInfo = Array | ArrayFixed | Map | Struct | Interface | MultiReturn | Alias | Enum | SumType | FnType
 | 
					pub type TypeInfo = Alias | Array | ArrayFixed | Enum | FnType | Interface | Map | MultiReturn | Struct | SumType
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct TypeSymbol {
 | 
					pub struct TypeSymbol {
 | 
				
			||||||
pub:
 | 
					pub:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue