fmt: use var instead of mut
							parent
							
								
									efaec8be8e
								
							
						
					
					
						commit
						f34352faf9
					
				|  | @ -143,7 +143,7 @@ fn (f mut Fmt) stmt(node ast.Stmt) { | |||
| 			for i, ident in it.left { | ||||
| 				var_info := ident.var_info() | ||||
| 				if var_info.is_mut { | ||||
| 					f.write('mut ') | ||||
| 					f.write('var ') | ||||
| 				} | ||||
| 				f.expr(ident) | ||||
| 				if i < it.left.len - 1 { | ||||
|  | @ -578,7 +578,7 @@ fn (f mut Fmt) expr(node ast.Expr) { | |||
| 		ast.MatchExpr { | ||||
| 			f.write('match ') | ||||
| 			if it.is_mut { | ||||
| 				f.write('mut ') | ||||
| 				f.write('var ') | ||||
| 			} | ||||
| 			f.expr(it.cond) | ||||
| 			f.writeln(' {') | ||||
|  |  | |||
|  | @ -74,7 +74,7 @@ pub fn cgen(files []ast.File, table &table.Table, pref &pref.Preferences) string | |||
| 	} else { | ||||
| 	} | ||||
| 	// println('start cgen2')
 | ||||
| 	mut g := Gen{ | ||||
| 	var g := Gen{ | ||||
| 		out: strings.new_builder(1000) | ||||
| 		typedefs: strings.new_builder(100) | ||||
| 		typedefs2: strings.new_builder(100) | ||||
|  | @ -91,7 +91,7 @@ pub fn cgen(files []ast.File, table &table.Table, pref &pref.Preferences) string | |||
| 	} | ||||
| 	g.init() | ||||
| 	//
 | ||||
| 	mut autofree_used := false | ||||
| 	var autofree_used := false | ||||
| 	for file in files { | ||||
| 		g.file = file | ||||
| 		// println('\ncgen "$g.file.path" nr_stmts=$file.stmts.len')
 | ||||
|  | @ -129,7 +129,7 @@ pub fn cgen(files []ast.File, table &table.Table, pref &pref.Preferences) string | |||
| } | ||||
| 
 | ||||
| pub fn (g Gen) hashes() string { | ||||
| 	mut res := c_commit_hash_default.replace('@@@', util.vhash()) | ||||
| 	var res := c_commit_hash_default.replace('@@@', util.vhash()) | ||||
| 	res += c_current_commit_hash_default.replace('@@@', util.githash(g.pref.building_v)) | ||||
| 	return res | ||||
| } | ||||
|  | @ -194,7 +194,7 @@ pub fn (g mut Gen) write_typeof_functions() { | |||
| pub fn (g mut Gen) typ(t table.Type) string { | ||||
| 	nr_muls := table.type_nr_muls(t) | ||||
| 	sym := g.table.get_type_symbol(t) | ||||
| 	mut styp := sym.name.replace('.', '__') | ||||
| 	var styp := sym.name.replace('.', '__') | ||||
| 	if nr_muls > 0 { | ||||
| 		styp += strings.repeat(`*`, nr_muls) | ||||
| 	} | ||||
|  | @ -390,7 +390,7 @@ fn (g mut Gen) stmt(node ast.Stmt) { | |||
| 			g.comp_if(it) | ||||
| 		} | ||||
| 		ast.DeferStmt { | ||||
| 			mut defer_stmt := *it | ||||
| 			var defer_stmt := *it | ||||
| 			defer_stmt.ifdef = g.defer_ifdef | ||||
| 			g.defer_stmts << defer_stmt | ||||
| 		} | ||||
|  | @ -646,7 +646,7 @@ fn (g mut Gen) gen_assert_stmt(a ast.AssertStmt) { | |||
| 	g.write(')') | ||||
| 	g.inside_ternary = false | ||||
| 	s_assertion := a.expr.str().replace('"', "\'") | ||||
| 	mut mod_path := g.file.path | ||||
| 	var mod_path := g.file.path | ||||
| 	$if windows { | ||||
| 		mod_path = g.file.path.replace('\\', '\\\\') | ||||
| 	} | ||||
|  | @ -676,8 +676,8 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { | |||
| 	} | ||||
| 	if assign_stmt.left.len > assign_stmt.right.len { | ||||
| 		// multi return
 | ||||
| 		mut or_stmts := []ast.Stmt | ||||
| 		mut return_type := table.void_type | ||||
| 		var or_stmts := []ast.Stmt | ||||
| 		var return_type := table.void_type | ||||
| 		match assign_stmt.right[0] { | ||||
| 			ast.CallExpr { | ||||
| 				or_stmts = it.or_block.stmts | ||||
|  | @ -719,9 +719,9 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { | |||
| 			val := assign_stmt.right[i] | ||||
| 			ident_var_info := ident.var_info() | ||||
| 			styp := g.typ(ident_var_info.typ) | ||||
| 			mut is_call := false | ||||
| 			mut or_stmts := []ast.Stmt | ||||
| 			mut return_type := table.void_type | ||||
| 			var is_call := false | ||||
| 			var or_stmts := []ast.Stmt | ||||
| 			var return_type := table.void_type | ||||
| 			match val { | ||||
| 				ast.CallExpr { | ||||
| 					is_call = true | ||||
|  | @ -742,7 +742,7 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { | |||
| 				} | ||||
| 			} else { | ||||
| 				right_sym := g.table.get_type_symbol(assign_stmt.right_types[i]) | ||||
| 				mut is_fixed_array_init := false | ||||
| 				var is_fixed_array_init := false | ||||
| 				match val { | ||||
| 					ast.ArrayInit { | ||||
| 						is_fixed_array_init = it.is_fixed | ||||
|  | @ -783,7 +783,7 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { | |||
| } | ||||
| 
 | ||||
| fn (g mut Gen) gen_clone_assignment(val ast.Expr, right_sym table.TypeSymbol, add_eq bool) bool { | ||||
| 	mut is_ident := false | ||||
| 	var is_ident := false | ||||
| 	match val { | ||||
| 		ast.Ident { | ||||
| 			is_ident = true | ||||
|  | @ -1114,9 +1114,9 @@ fn (g mut Gen) enum_expr(node ast.Expr) { | |||
| 
 | ||||
| fn (g mut Gen) assign_expr(node ast.AssignExpr) { | ||||
| 	// g.write('/*assign_expr*/')
 | ||||
| 	mut is_call := false | ||||
| 	mut or_stmts := []ast.Stmt | ||||
| 	mut return_type := table.void_type | ||||
| 	var is_call := false | ||||
| 	var or_stmts := []ast.Stmt | ||||
| 	var return_type := table.void_type | ||||
| 	match node.val { | ||||
| 		ast.CallExpr { | ||||
| 			is_call = true | ||||
|  | @ -1146,7 +1146,7 @@ fn (g mut Gen) assign_expr(node ast.AssignExpr) { | |||
| 		if table.type_is(node.right_type, .optional) { | ||||
| 			g.right_is_opt = true | ||||
| 		} | ||||
| 		mut str_add := false | ||||
| 		var str_add := false | ||||
| 		if node.left_type == table.string_type_idx && node.op == .plus_assign { | ||||
| 			// str += str2 => `str = string_add(str, str2)`
 | ||||
| 			g.expr(node.left) | ||||
|  | @ -1164,7 +1164,7 @@ fn (g mut Gen) assign_expr(node ast.AssignExpr) { | |||
| 		g.is_assign_lhs = false | ||||
| 		right_sym := g.table.get_type_symbol(node.right_type) | ||||
| 		// left_sym := g.table.get_type_symbol(node.left_type)
 | ||||
| 		mut cloned := false | ||||
| 		var cloned := false | ||||
| 		// !g.is_array_set
 | ||||
| 		if g.autofree && right_sym.kind in [.array, .string] { | ||||
| 			if g.gen_clone_assignment(node.val, right_sym, false) { | ||||
|  | @ -1364,7 +1364,7 @@ fn (g mut Gen) match_expr(node ast.MatchExpr) { | |||
| 		// g.write('/* EM ret type=${g.typ(node.return_type)}		expected_type=${g.typ(node.expected_type)}  */')
 | ||||
| 	} | ||||
| 	type_sym := g.table.get_type_symbol(node.cond_type) | ||||
| 	mut tmp := '' | ||||
| 	var tmp := '' | ||||
| 	if type_sym.kind != .void { | ||||
| 		tmp = g.new_tmp_var() | ||||
| 	} | ||||
|  | @ -1492,7 +1492,7 @@ fn (g mut Gen) if_expr(node ast.IfExpr) { | |||
| 	// If expression? Assign the value to a temp var.
 | ||||
| 	// Previously ?: was used, but it's too unreliable.
 | ||||
| 	type_sym := g.table.get_type_symbol(node.typ) | ||||
| 	mut tmp := '' | ||||
| 	var tmp := '' | ||||
| 	if type_sym.kind != .void { | ||||
| 		tmp = g.new_tmp_var() | ||||
| 		// g.writeln('$ti.name $tmp;')
 | ||||
|  | @ -1517,7 +1517,7 @@ fn (g mut Gen) if_expr(node ast.IfExpr) { | |||
| 		g.inside_ternary = false | ||||
| 	} else { | ||||
| 		guard_ok := g.new_tmp_var() | ||||
| 		mut is_guard := false | ||||
| 		var is_guard := false | ||||
| 		for i, branch in node.branches { | ||||
| 			if i == 0 { | ||||
| 				match branch.cond { | ||||
|  | @ -1560,7 +1560,7 @@ fn (g mut Gen) if_expr(node ast.IfExpr) { | |||
| 
 | ||||
| fn (g mut Gen) index_expr(node ast.IndexExpr) { | ||||
| 	// TODO else doesn't work with sum types
 | ||||
| 	mut is_range := false | ||||
| 	var is_range := false | ||||
| 	match node.index { | ||||
| 		ast.RangeExpr { | ||||
| 			sym := g.table.get_type_symbol(node.left_type) | ||||
|  | @ -1615,7 +1615,7 @@ fn (g mut Gen) index_expr(node ast.IndexExpr) { | |||
| 		} else if sym.kind == .array { | ||||
| 			info := sym.info as table.Array | ||||
| 			elem_type_str := g.typ(info.elem_type) | ||||
| 			mut is_selector := false | ||||
| 			var is_selector := false | ||||
| 			match node.left { | ||||
| 				ast.SelectorExpr { | ||||
| 					// `vals[i].field = x` is an exception and requires `array_get`:
 | ||||
|  | @ -1633,7 +1633,7 @@ fn (g mut Gen) index_expr(node ast.IndexExpr) { | |||
| 				g.expr(node.left) | ||||
| 				g.write(', ') | ||||
| 				g.expr(node.index) | ||||
| 				mut need_wrapper := true | ||||
| 				var need_wrapper := true | ||||
| 				/* | ||||
| 				match node.right { | ||||
| 					ast.EnumVal, ast.Ident { | ||||
|  | @ -1762,10 +1762,10 @@ fn (g mut Gen) return_statement(node ast.Return) { | |||
| 		g.write(' ') | ||||
| 		typ_sym := g.table.get_type_symbol(g.fn_decl.return_type) | ||||
| 		mr_info := typ_sym.info as table.MultiReturn | ||||
| 		mut styp := g.typ(g.fn_decl.return_type) | ||||
| 		var styp := g.typ(g.fn_decl.return_type) | ||||
| 		if fn_return_is_optional {			// && !table.type_is(node.types[0], .optional) && node.types[0] !=
 | ||||
| 			styp = styp[7..]			// remove 'Option_'
 | ||||
| 			mut x := styp | ||||
| 			var x := styp | ||||
| 			if x.ends_with('_ptr') { | ||||
| 				x = x.replace('_ptr', '*') | ||||
| 			} | ||||
|  | @ -1790,8 +1790,8 @@ fn (g mut Gen) return_statement(node ast.Return) { | |||
| 		// `return opt_ok(expr)` for functions that expect an optional
 | ||||
| 		if fn_return_is_optional && !table.type_is(node.types[0], .optional) && return_sym.name != | ||||
| 			'Option' { | ||||
| 			mut is_none := false | ||||
| 			mut is_error := false | ||||
| 			var is_none := false | ||||
| 			var is_error := false | ||||
| 			expr0 := node.exprs[0] | ||||
| 			match expr0 { | ||||
| 				ast.None { | ||||
|  | @ -1808,7 +1808,7 @@ fn (g mut Gen) return_statement(node ast.Return) { | |||
| 			} | ||||
| 			if !is_none && !is_error { | ||||
| 				styp := g.typ(g.fn_decl.return_type)[7..]				// remove 'Option_'
 | ||||
| 				mut x := styp | ||||
| 				var x := styp | ||||
| 				if x.ends_with('_ptr') { | ||||
| 					x = x.replace('_ptr', '*') | ||||
| 				} | ||||
|  | @ -1870,8 +1870,8 @@ fn (g mut Gen) const_decl_simple_define(name, val string) { | |||
| } | ||||
| 
 | ||||
| fn (g mut Gen) struct_init(struct_init ast.StructInit) { | ||||
| 	mut info := table.Struct{} | ||||
| 	mut is_struct := false | ||||
| 	var info := table.Struct{} | ||||
| 	var is_struct := false | ||||
| 	sym := g.table.get_type_symbol(struct_init.typ) | ||||
| 	if sym.kind == .struct_ { | ||||
| 		is_struct = true | ||||
|  | @ -1887,8 +1887,8 @@ fn (g mut Gen) struct_init(struct_init ast.StructInit) { | |||
| 	} else { | ||||
| 		g.writeln('($styp){') | ||||
| 	} | ||||
| 	mut fields := []string | ||||
| 	mut inited_fields := []string	// TODO this is done in checker, move to ast node
 | ||||
| 	var fields := []string | ||||
| 	var inited_fields := []string	// TODO this is done in checker, move to ast node
 | ||||
| 	if struct_init.fields.len == 0 && struct_init.exprs.len > 0 { | ||||
| 		// Get fields for {a,b} short syntax. Fields array wasn't set in the parser.
 | ||||
| 		for f in info.fields { | ||||
|  | @ -2057,7 +2057,7 @@ const ( | |||
| ) | ||||
| 
 | ||||
| fn (g mut Gen) write_builtin_types() { | ||||
| 	mut builtin_types := []table.TypeSymbol	// builtin types
 | ||||
| 	var builtin_types := []table.TypeSymbol	// builtin types
 | ||||
| 	// builtin types need to be on top
 | ||||
| 	// everything except builtin will get sorted
 | ||||
| 	for builtin_name in builtins { | ||||
|  | @ -2070,7 +2070,7 @@ fn (g mut Gen) write_builtin_types() { | |||
| // Sort the types, make sure types that are referenced by other types
 | ||||
| // are added before them.
 | ||||
| fn (g mut Gen) write_sorted_types() { | ||||
| 	mut types := []table.TypeSymbol	// structs that need to be sorted
 | ||||
| 	var types := []table.TypeSymbol	// structs that need to be sorted
 | ||||
| 	for typ in g.table.types { | ||||
| 		if !(typ.name in builtins) { | ||||
| 			types << typ | ||||
|  | @ -2128,7 +2128,7 @@ int typ; | |||
| 				// .array_fixed {
 | ||||
| 				styp := typ.name.replace('.', '__') | ||||
| 				// array_fixed_char_300 => char x[300]
 | ||||
| 				mut fixed := styp[12..] | ||||
| 				var fixed := styp[12..] | ||||
| 				len := styp.after('_') | ||||
| 				fixed = fixed[..fixed.len - len.len - 1] | ||||
| 				g.definitions.writeln('typedef $fixed $styp [$len];') | ||||
|  | @ -2141,16 +2141,16 @@ int typ; | |||
| 
 | ||||
| // sort structs by dependant fields
 | ||||
| fn (g Gen) sort_structs(typesa []table.TypeSymbol) []table.TypeSymbol { | ||||
| 	mut dep_graph := depgraph.new_dep_graph() | ||||
| 	var dep_graph := depgraph.new_dep_graph() | ||||
| 	// types name list
 | ||||
| 	mut type_names := []string | ||||
| 	var type_names := []string | ||||
| 	for typ in typesa { | ||||
| 		type_names << typ.name | ||||
| 	} | ||||
| 	// loop over types
 | ||||
| 	for t in typesa { | ||||
| 		// create list of deps
 | ||||
| 		mut field_deps := []string | ||||
| 		var field_deps := []string | ||||
| 		match t.info { | ||||
| 			table.ArrayFixed { | ||||
| 				dep := g.table.get_type_symbol(it.elem_type).name | ||||
|  | @ -2183,7 +2183,7 @@ fn (g Gen) sort_structs(typesa []table.TypeSymbol) []table.TypeSymbol { | |||
| 			'\nif you feel this is an error, please create a new issue here: https://github.com/vlang/v/issues and tag @joe-conigliaro') | ||||
| 	} | ||||
| 	// sort types
 | ||||
| 	mut types_sorted := []table.TypeSymbol | ||||
| 	var types_sorted := []table.TypeSymbol | ||||
| 	for node in dep_graph_sorted.nodes { | ||||
| 		types_sorted << g.table.types[g.table.type_idxs[node.name]] | ||||
| 	} | ||||
|  | @ -2368,8 +2368,8 @@ fn (g mut Gen) or_block(var_name string, stmts []ast.Stmt, return_type table.Typ | |||
| } | ||||
| 
 | ||||
| fn (g mut Gen) type_of_last_statement(stmts []ast.Stmt) (string, string) { | ||||
| 	mut last_type := '' | ||||
| 	mut last_expr_result_type := '' | ||||
| 	var last_type := '' | ||||
| 	var last_expr_result_type := '' | ||||
| 	if stmts.len > 0 { | ||||
| 		last_stmt := stmts[stmts.len - 1] | ||||
| 		last_type = typeof(last_stmt) | ||||
|  | @ -2662,9 +2662,9 @@ pub fn (g mut Gen) write_tests_main() { | |||
| } | ||||
| 
 | ||||
| fn (g Gen) get_all_test_function_names() []string { | ||||
| 	mut tfuncs := []string | ||||
| 	mut tsuite_begin := '' | ||||
| 	mut tsuite_end := '' | ||||
| 	var tfuncs := []string | ||||
| 	var tsuite_begin := '' | ||||
| 	var tsuite_end := '' | ||||
| 	for _, f in g.table.fns { | ||||
| 		if f.name == 'testsuite_begin' { | ||||
| 			tsuite_begin = f.name | ||||
|  | @ -2693,7 +2693,7 @@ fn (g Gen) get_all_test_function_names() []string { | |||
| 			continue | ||||
| 		} | ||||
| 	} | ||||
| 	mut all_tfuncs := []string | ||||
| 	var all_tfuncs := []string | ||||
| 	if tsuite_begin.len > 0 { | ||||
| 		all_tfuncs << tsuite_begin | ||||
| 	} | ||||
|  | @ -2701,7 +2701,7 @@ fn (g Gen) get_all_test_function_names() []string { | |||
| 	if tsuite_end.len > 0 { | ||||
| 		all_tfuncs << tsuite_end | ||||
| 	} | ||||
| 	mut all_tfuncs_c := []string | ||||
| 	var all_tfuncs_c := []string | ||||
| 	for f in all_tfuncs { | ||||
| 		all_tfuncs_c << f.replace('.', '__') | ||||
| 	} | ||||
|  | @ -2749,7 +2749,7 @@ fn (g mut Gen) go_stmt(node ast.GoStmt) { | |||
| 	// x := node.call_expr as ast.CallEpxr // TODO
 | ||||
| 	match node.call_expr { | ||||
| 		ast.CallExpr { | ||||
| 			mut name := it.name.replace('.', '__') | ||||
| 			var name := it.name.replace('.', '__') | ||||
| 			if it.is_method { | ||||
| 				receiver_sym := g.table.get_type_symbol(it.receiver_type) | ||||
| 				name = receiver_sym.name + '_' + name | ||||
|  | @ -2837,8 +2837,8 @@ fn (g mut Gen) gen_str_for_type(sym table.TypeSymbol, styp string) { | |||
| } | ||||
| 
 | ||||
| fn (g mut Gen) gen_str_default(sym table.TypeSymbol, styp string) { | ||||
| 	mut convertor := '' | ||||
| 	mut typename := '' | ||||
| 	var convertor := '' | ||||
| 	var typename := '' | ||||
| 	if sym.parent_idx in table.integer_type_idxs { | ||||
| 		convertor = 'int' | ||||
| 		typename = 'int' | ||||
|  |  | |||
|  | @ -28,8 +28,8 @@ pub fn (p mut Parser) call_expr(is_c bool, mod string) ast.CallExpr { | |||
| 		pos: first_pos.pos | ||||
| 		len: last_pos.pos - first_pos.pos + last_pos.len | ||||
| 	} | ||||
| 	mut or_stmts := []ast.Stmt | ||||
| 	mut is_or_block_used := false | ||||
| 	var or_stmts := []ast.Stmt | ||||
| 	var is_or_block_used := false | ||||
| 	if p.tok.kind == .key_orelse { | ||||
| 		p.next() | ||||
| 		p.open_scope() | ||||
|  | @ -60,9 +60,9 @@ pub fn (p mut Parser) call_expr(is_c bool, mod string) ast.CallExpr { | |||
| } | ||||
| 
 | ||||
| pub fn (p mut Parser) call_args() []ast.CallArg { | ||||
| 	mut args := []ast.CallArg | ||||
| 	var args := []ast.CallArg | ||||
| 	for p.tok.kind != .rpar { | ||||
| 		mut is_mut := false | ||||
| 		var is_mut := false | ||||
| 		if p.tok.kind == .key_mut { | ||||
| 			p.check(.key_mut) | ||||
| 			is_mut = true | ||||
|  | @ -96,11 +96,11 @@ fn (p mut Parser) fn_decl() ast.FnDecl { | |||
| 		p.check(.dot) | ||||
| 	} | ||||
| 	// Receiver?
 | ||||
| 	mut rec_name := '' | ||||
| 	mut is_method := false | ||||
| 	mut rec_type := table.void_type | ||||
| 	mut rec_mut := false | ||||
| 	mut args := []table.Arg | ||||
| 	var rec_name := '' | ||||
| 	var is_method := false | ||||
| 	var rec_type := table.void_type | ||||
| 	var rec_mut := false | ||||
| 	var args := []table.Arg | ||||
| 	if p.tok.kind == .lpar { | ||||
| 		p.next()		// (
 | ||||
| 		is_method = true | ||||
|  | @ -129,7 +129,7 @@ fn (p mut Parser) fn_decl() ast.FnDecl { | |||
| 		} | ||||
| 		p.check(.rpar) | ||||
| 	} | ||||
| 	mut name := '' | ||||
| 	var name := '' | ||||
| 	if p.tok.kind == .name { | ||||
| 		// TODO high order fn
 | ||||
| 		name = p.check_name() | ||||
|  | @ -161,13 +161,13 @@ fn (p mut Parser) fn_decl() ast.FnDecl { | |||
| 		}) | ||||
| 	} | ||||
| 	// Return type
 | ||||
| 	mut return_type := table.void_type | ||||
| 	var return_type := table.void_type | ||||
| 	if p.tok.kind.is_start_of_type() { | ||||
| 		return_type = p.parse_type() | ||||
| 	} | ||||
| 	// Register
 | ||||
| 	if is_method { | ||||
| 		mut type_sym := p.table.get_type_symbol(rec_type) | ||||
| 		var type_sym := p.table.get_type_symbol(rec_type) | ||||
| 		// p.warn('reg method $type_sym.name . $name ()')
 | ||||
| 		type_sym.register_method(table.Fn{ | ||||
| 			name: name | ||||
|  | @ -195,7 +195,7 @@ fn (p mut Parser) fn_decl() ast.FnDecl { | |||
| 		}) | ||||
| 	} | ||||
| 	// Body
 | ||||
| 	mut stmts := []ast.Stmt | ||||
| 	var stmts := []ast.Stmt | ||||
| 	no_body := p.tok.kind != .lcbr | ||||
| 	if p.tok.kind == .lcbr { | ||||
| 		stmts = p.parse_block() | ||||
|  | @ -226,14 +226,14 @@ fn (p mut Parser) fn_decl() ast.FnDecl { | |||
| 
 | ||||
| fn (p mut Parser) fn_args() ([]table.Arg, bool) { | ||||
| 	p.check(.lpar) | ||||
| 	mut args := []table.Arg | ||||
| 	mut is_variadic := false | ||||
| 	var args := []table.Arg | ||||
| 	var is_variadic := false | ||||
| 	// `int, int, string` (no names, just types)
 | ||||
| 	types_only := p.tok.kind in [.amp, .and] || (p.peek_tok.kind == .comma && p.table.known_type(p.tok.lit)) || | ||||
| 		p.peek_tok.kind == .rpar | ||||
| 	if types_only { | ||||
| 		// p.warn('types only')
 | ||||
| 		mut arg_no := 1 | ||||
| 		var arg_no := 1 | ||||
| 		for p.tok.kind != .rpar { | ||||
| 			arg_name := 'arg_$arg_no' | ||||
| 			is_mut := p.tok.kind == .key_mut | ||||
|  | @ -244,7 +244,7 @@ fn (p mut Parser) fn_args() ([]table.Arg, bool) { | |||
| 				p.check(.ellipsis) | ||||
| 				is_variadic = true | ||||
| 			} | ||||
| 			mut arg_type := p.parse_type() | ||||
| 			var arg_type := p.parse_type() | ||||
| 			if is_variadic { | ||||
| 				arg_type = table.type_set(arg_type, .variadic) | ||||
| 			} | ||||
|  | @ -263,7 +263,7 @@ fn (p mut Parser) fn_args() ([]table.Arg, bool) { | |||
| 		} | ||||
| 	} else { | ||||
| 		for p.tok.kind != .rpar { | ||||
| 			mut arg_names := [p.check_name()] | ||||
| 			var arg_names := [p.check_name()] | ||||
| 			// `a, b, c int`
 | ||||
| 			for p.tok.kind == .comma { | ||||
| 				p.check(.comma) | ||||
|  | @ -277,7 +277,7 @@ fn (p mut Parser) fn_args() ([]table.Arg, bool) { | |||
| 				p.check(.ellipsis) | ||||
| 				is_variadic = true | ||||
| 			} | ||||
| 			mut typ := p.parse_type() | ||||
| 			var typ := p.parse_type() | ||||
| 			if is_variadic { | ||||
| 				typ = table.type_set(typ, .variadic) | ||||
| 			} | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ mut: | |||
| // for tests
 | ||||
| pub fn parse_stmt(text string, table &table.Table, scope &ast.Scope) ast.Stmt { | ||||
| 	s := scanner.new_scanner(text, .skip_comments) | ||||
| 	mut p := Parser{ | ||||
| 	var p := Parser{ | ||||
| 		scanner: s | ||||
| 		table: table | ||||
| 		pref: &pref.Preferences{} | ||||
|  | @ -62,8 +62,8 @@ pub fn parse_file(path string, table &table.Table, comments_mode scanner.Comment | |||
| 	// text := os.read_file(path) or {
 | ||||
| 	// panic(err)
 | ||||
| 	// }
 | ||||
| 	mut stmts := []ast.Stmt | ||||
| 	mut p := Parser{ | ||||
| 	var stmts := []ast.Stmt | ||||
| 	var p := Parser{ | ||||
| 		scanner: scanner.new_scanner_file(path, comments_mode) | ||||
| 		table: table | ||||
| 		file_name: path | ||||
|  | @ -78,12 +78,12 @@ pub fn parse_file(path string, table &table.Table, comments_mode scanner.Comment | |||
| 	// comments_mode: comments_mode
 | ||||
| 	p.read_first_token() | ||||
| 	for p.tok.kind == .comment { | ||||
| 		mut stmt := ast.Stmt{}		// TODO sum type << bug
 | ||||
| 		var stmt := ast.Stmt{}		// TODO sum type << bug
 | ||||
| 		com := p.comment() | ||||
| 		stmt = com | ||||
| 		stmts << stmt | ||||
| 	} | ||||
| 	mut mstmt := ast.Stmt{} | ||||
| 	var mstmt := ast.Stmt{} | ||||
| 	module_decl := p.module_decl() | ||||
| 	mstmt = module_decl | ||||
| 	stmts << mstmt | ||||
|  | @ -160,7 +160,7 @@ pub fn parse_files(paths []string, table &table.Table, pref &pref.Preferences, g | |||
| 	return q.parsed_ast_files | ||||
| */ | ||||
| 	// ///////////////
 | ||||
| 	mut files := []ast.File | ||||
| 	var files := []ast.File | ||||
| 	for path in paths { | ||||
| 		// println('parse_files $path')
 | ||||
| 		files << parse_file(path, table, .skip_comments, pref, global_scope) | ||||
|  | @ -204,7 +204,7 @@ pub fn (p mut Parser) parse_block() []ast.Stmt { | |||
| 
 | ||||
| pub fn (p mut Parser) parse_block_no_scope() []ast.Stmt { | ||||
| 	p.check(.lcbr) | ||||
| 	mut stmts := []ast.Stmt | ||||
| 	var stmts := []ast.Stmt | ||||
| 	if p.tok.kind != .rcbr { | ||||
| 		for { | ||||
| 			stmts << p.stmt() | ||||
|  | @ -482,7 +482,7 @@ fn (p mut Parser) attribute() ast.Attr { | |||
| 	if p.tok.kind == .key_if { | ||||
| 		p.next() | ||||
| 	} | ||||
| 	mut name := p.check_name() | ||||
| 	var name := p.check_name() | ||||
| 	if p.tok.kind == .colon { | ||||
| 		p.next() | ||||
| 		if p.tok.kind == .name { | ||||
|  | @ -529,7 +529,7 @@ pub fn (p &Parser) warn(s string) { | |||
| } | ||||
| 
 | ||||
| pub fn (p &Parser) error_with_pos(s string, pos token.Position) { | ||||
| 	mut kind := 'error:' | ||||
| 	var kind := 'error:' | ||||
| 	if p.pref.is_verbose { | ||||
| 		print_backtrace() | ||||
| 		kind = 'parser error:' | ||||
|  | @ -547,7 +547,7 @@ pub fn (p &Parser) warn_with_pos(s string, pos token.Position) { | |||
| pub fn (p mut Parser) parse_ident(is_c bool) ast.Ident { | ||||
| 	// p.warn('name ')
 | ||||
| 	pos := p.tok.position() | ||||
| 	mut name := p.check_name() | ||||
| 	var name := p.check_name() | ||||
| 	if name == '_' { | ||||
| 		return ast.Ident{ | ||||
| 			name: '_' | ||||
|  | @ -558,7 +558,7 @@ pub fn (p mut Parser) parse_ident(is_c bool) ast.Ident { | |||
| 	if p.expr_mod.len > 0 { | ||||
| 		name = '${p.expr_mod}.$name' | ||||
| 	} | ||||
| 	mut ident := ast.Ident{ | ||||
| 	var ident := ast.Ident{ | ||||
| 		kind: .unresolved | ||||
| 		name: name | ||||
| 		is_c: is_c | ||||
|  | @ -576,14 +576,14 @@ fn (p mut Parser) struct_init(short_syntax bool) ast.StructInit { | |||
| 	if !short_syntax { | ||||
| 		p.check(.lcbr) | ||||
| 	} | ||||
| 	mut field_names := []string | ||||
| 	mut exprs := []ast.Expr | ||||
| 	mut i := 0 | ||||
| 	var field_names := []string | ||||
| 	var exprs := []ast.Expr | ||||
| 	var i := 0 | ||||
| 	is_short_syntax := p.peek_tok.kind != .colon && p.tok.kind != .rcbr	// `Vec{a,b,c}
 | ||||
| 	// p.warn(is_short_syntax.str())
 | ||||
| 	for p.tok.kind != .rcbr { | ||||
| 		p.check_comment() | ||||
| 		mut field_name := '' | ||||
| 		var field_name := '' | ||||
| 		if is_short_syntax { | ||||
| 			expr := p.expr(0) | ||||
| 			exprs << expr | ||||
|  | @ -615,9 +615,9 @@ fn (p mut Parser) struct_init(short_syntax bool) ast.StructInit { | |||
| } | ||||
| 
 | ||||
| pub fn (p mut Parser) name_expr() ast.Expr { | ||||
| 	mut node := ast.Expr{} | ||||
| 	var node := ast.Expr{} | ||||
| 	is_c := p.tok.lit == 'C' | ||||
| 	mut mod := '' | ||||
| 	var mod := '' | ||||
| 	// p.warn('resetting')
 | ||||
| 	p.expr_mod = '' | ||||
| 	// `map[string]int` initialization
 | ||||
|  | @ -649,7 +649,7 @@ pub fn (p mut Parser) name_expr() ast.Expr { | |||
| 	// p.warn('name expr  $p.tok.lit $p.peek_tok.str()')
 | ||||
| 	// fn call or type cast
 | ||||
| 	if p.peek_tok.kind == .lpar { | ||||
| 		mut name := p.tok.lit | ||||
| 		var name := p.tok.lit | ||||
| 		if mod.len > 0 { | ||||
| 			name = '${mod}.$name' | ||||
| 		} | ||||
|  | @ -659,15 +659,15 @@ pub fn (p mut Parser) name_expr() ast.Expr { | |||
| 		if (name in p.table.type_idxs || name_w_mod in p.table.type_idxs) && !(name in ['C.stat', | ||||
| 			'C.sigaction']) { | ||||
| 			// TODO handle C.stat()
 | ||||
| 			mut to_typ := p.parse_type() | ||||
| 			var to_typ := p.parse_type() | ||||
| 			if p.is_amp { | ||||
| 				// Handle `&Foo(0)`
 | ||||
| 				to_typ = table.type_to_ptr(to_typ) | ||||
| 			} | ||||
| 			p.check(.lpar) | ||||
| 			mut expr := ast.Expr{} | ||||
| 			mut arg := ast.Expr{} | ||||
| 			mut has_arg := false | ||||
| 			var expr := ast.Expr{} | ||||
| 			var arg := ast.Expr{} | ||||
| 			var has_arg := false | ||||
| 			expr = p.expr(0) | ||||
| 			// TODO, string(b, len)
 | ||||
| 			if p.tok.kind == .comma && table.type_idx(to_typ) == table.string_type_idx { | ||||
|  | @ -697,7 +697,7 @@ pub fn (p mut Parser) name_expr() ast.Expr { | |||
| 		return p.struct_init(false)		// short_syntax: false
 | ||||
| 	} else if p.peek_tok.kind == .dot && (p.tok.lit[0].is_capital() && !known_var) { | ||||
| 		// `Color.green`
 | ||||
| 		mut enum_name := p.check_name() | ||||
| 		var enum_name := p.check_name() | ||||
| 		if mod != '' { | ||||
| 			enum_name = mod + '.' + enum_name | ||||
| 		} else { | ||||
|  | @ -715,7 +715,7 @@ pub fn (p mut Parser) name_expr() ast.Expr { | |||
| 			mod: mod | ||||
| 		} | ||||
| 	} else { | ||||
| 		mut ident := ast.Ident{} | ||||
| 		var ident := ast.Ident{} | ||||
| 		ident = p.parse_ident(is_c) | ||||
| 		node = ident | ||||
| 	} | ||||
|  | @ -725,8 +725,8 @@ pub fn (p mut Parser) name_expr() ast.Expr { | |||
| 
 | ||||
| pub fn (p mut Parser) expr(precedence int) ast.Expr { | ||||
| 	// println('\n\nparser.expr()')
 | ||||
| 	mut typ := table.void_type | ||||
| 	mut node := ast.Expr{} | ||||
| 	var typ := table.void_type | ||||
| 	var node := ast.Expr{} | ||||
| 	is_stmt_ident := p.is_stmt_ident | ||||
| 	p.is_stmt_ident = false | ||||
| 	// defer {
 | ||||
|  | @ -908,7 +908,7 @@ fn (p mut Parser) prefix_expr() ast.PrefixExpr { | |||
| fn (p mut Parser) index_expr(left ast.Expr) ast.IndexExpr { | ||||
| 	// left == `a` in `a[0]`
 | ||||
| 	p.next()	// [
 | ||||
| 	mut has_low := true | ||||
| 	var has_low := true | ||||
| 	if p.tok.kind == .dotdot { | ||||
| 		has_low = false | ||||
| 		// [..end]
 | ||||
|  | @ -926,11 +926,11 @@ fn (p mut Parser) index_expr(left ast.Expr) ast.IndexExpr { | |||
| 		} | ||||
| 	} | ||||
| 	expr := p.expr(0)	// `[expr]` or  `[expr..]`
 | ||||
| 	mut has_high := false | ||||
| 	var has_high := false | ||||
| 	if p.tok.kind == .dotdot { | ||||
| 		// [start..end] or [start..]
 | ||||
| 		p.check(.dotdot) | ||||
| 		mut high := ast.Expr{} | ||||
| 		var high := ast.Expr{} | ||||
| 		if p.tok.kind != .rsbr { | ||||
| 			has_high = true | ||||
| 			high = p.expr(0) | ||||
|  | @ -964,7 +964,7 @@ fn (p mut Parser) filter() { | |||
| 
 | ||||
| fn (p mut Parser) dot_expr(left ast.Expr) ast.Expr { | ||||
| 	p.next() | ||||
| 	mut name_pos := p.tok.position() | ||||
| 	var name_pos := p.tok.position() | ||||
| 	field_name := p.check_name() | ||||
| 	is_filter := field_name in ['filter', 'map'] | ||||
| 	if is_filter { | ||||
|  | @ -981,8 +981,8 @@ fn (p mut Parser) dot_expr(left ast.Expr) ast.Expr { | |||
| 		p.next() | ||||
| 		args := p.call_args() | ||||
| 		p.check(.rpar) | ||||
| 		mut or_stmts := []ast.Stmt | ||||
| 		mut is_or_block_used := false | ||||
| 		var or_stmts := []ast.Stmt | ||||
| 		var is_or_block_used := false | ||||
| 		if p.tok.kind == .key_orelse { | ||||
| 			p.next() | ||||
| 			p.open_scope() | ||||
|  | @ -1015,7 +1015,7 @@ fn (p mut Parser) dot_expr(left ast.Expr) ast.Expr { | |||
| 				is_used: is_or_block_used | ||||
| 			} | ||||
| 		} | ||||
| 		mut node := ast.Expr{} | ||||
| 		var node := ast.Expr{} | ||||
| 		node = mcall_expr | ||||
| 		if is_filter { | ||||
| 			p.close_scope() | ||||
|  | @ -1027,7 +1027,7 @@ fn (p mut Parser) dot_expr(left ast.Expr) ast.Expr { | |||
| 		field: field_name | ||||
| 		pos: name_pos | ||||
| 	} | ||||
| 	mut node := ast.Expr{} | ||||
| 	var node := ast.Expr{} | ||||
| 	node = sel_expr | ||||
| 	if is_filter { | ||||
| 		p.close_scope() | ||||
|  | @ -1042,9 +1042,9 @@ fn (p mut Parser) infix_expr(left ast.Expr) ast.Expr { | |||
| 	precedence := p.tok.precedence() | ||||
| 	pos := p.tok.position() | ||||
| 	p.next() | ||||
| 	mut right := ast.Expr{} | ||||
| 	var right := ast.Expr{} | ||||
| 	right = p.expr(precedence) | ||||
| 	mut expr := ast.Expr{} | ||||
| 	var expr := ast.Expr{} | ||||
| 	expr = ast.InfixExpr{ | ||||
| 		left: left | ||||
| 		right: right | ||||
|  | @ -1085,13 +1085,13 @@ fn (p mut Parser) for_stmt() ast.Stmt { | |||
| 		p.error('`mut` is not required in for loops') | ||||
| 	} else if p.peek_tok.kind in [.decl_assign, .assign, .semicolon] || p.tok.kind == .semicolon { | ||||
| 		// `for i := 0; i < 10; i++ {`
 | ||||
| 		mut init := ast.Stmt{} | ||||
| 		mut cond := p.new_true_expr() | ||||
| 		var init := ast.Stmt{} | ||||
| 		var cond := p.new_true_expr() | ||||
| 		// mut inc := ast.Stmt{}
 | ||||
| 		mut inc := ast.Expr{} | ||||
| 		mut has_init := false | ||||
| 		mut has_cond := false | ||||
| 		mut has_inc := false | ||||
| 		var inc := ast.Expr{} | ||||
| 		var has_init := false | ||||
| 		var has_cond := false | ||||
| 		var has_inc := false | ||||
| 		if p.peek_tok.kind in [.assign, .decl_assign] { | ||||
| 			init = p.assign_stmt() | ||||
| 			has_init = true | ||||
|  | @ -1101,7 +1101,7 @@ fn (p mut Parser) for_stmt() ast.Stmt { | |||
| 		// Allow `for i = 0; i < ...`
 | ||||
| 		p.check(.semicolon) | ||||
| 		if p.tok.kind != .semicolon { | ||||
| 			mut typ := table.void_type | ||||
| 			var typ := table.void_type | ||||
| 			cond = p.expr(0) | ||||
| 			has_cond = true | ||||
| 		} | ||||
|  | @ -1126,8 +1126,8 @@ fn (p mut Parser) for_stmt() ast.Stmt { | |||
| 		} | ||||
| 	} else if p.peek_tok.kind in [.key_in, .comma] { | ||||
| 		// `for i in vals`, `for i in start .. end`
 | ||||
| 		mut key_var_name := '' | ||||
| 		mut val_var_name := p.check_name() | ||||
| 		var key_var_name := '' | ||||
| 		var val_var_name := p.check_name() | ||||
| 		if p.tok.kind == .comma { | ||||
| 			p.check(.comma) | ||||
| 			key_var_name = val_var_name | ||||
|  | @ -1143,8 +1143,8 @@ fn (p mut Parser) for_stmt() ast.Stmt { | |||
| 		// 0 .. 10
 | ||||
| 		// start := p.tok.lit.int()
 | ||||
| 		// TODO use RangeExpr
 | ||||
| 		mut high_expr := ast.Expr{} | ||||
| 		mut is_range := false | ||||
| 		var high_expr := ast.Expr{} | ||||
| 		var is_range := false | ||||
| 		if p.tok.kind == .dotdot { | ||||
| 			is_range = true | ||||
| 			p.check(.dotdot) | ||||
|  | @ -1187,12 +1187,12 @@ fn (p mut Parser) for_stmt() ast.Stmt { | |||
| 
 | ||||
| fn (p mut Parser) if_expr() ast.IfExpr { | ||||
| 	pos := p.tok.position() | ||||
| 	mut branches := []ast.IfBranch | ||||
| 	mut has_else := false | ||||
| 	var branches := []ast.IfBranch | ||||
| 	var has_else := false | ||||
| 	for p.tok.kind in [.key_if, .key_else] { | ||||
| 		p.inside_if = true | ||||
| 		branch_pos := p.tok.position() | ||||
| 		mut comment := ast.Comment{} | ||||
| 		var comment := ast.Comment{} | ||||
| 		if p.tok.kind == .key_if { | ||||
| 			p.check(.key_if) | ||||
| 		} else { | ||||
|  | @ -1214,8 +1214,8 @@ fn (p mut Parser) if_expr() ast.IfExpr { | |||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		mut cond := ast.Expr{} | ||||
| 		mut is_or := false | ||||
| 		var cond := ast.Expr{} | ||||
| 		var is_or := false | ||||
| 		// `if x := opt() {`
 | ||||
| 		if p.peek_tok.kind == .decl_assign { | ||||
| 			is_or = true | ||||
|  | @ -1262,7 +1262,7 @@ fn (p mut Parser) string_expr() ast.Expr { | |||
| 	if is_raw || is_cstr { | ||||
| 		p.next() | ||||
| 	} | ||||
| 	mut node := ast.Expr{} | ||||
| 	var node := ast.Expr{} | ||||
| 	val := p.tok.lit | ||||
| 	pos := p.tok.position() | ||||
| 	if p.peek_tok.kind != .str_dollar { | ||||
|  | @ -1275,9 +1275,9 @@ fn (p mut Parser) string_expr() ast.Expr { | |||
| 		} | ||||
| 		return node | ||||
| 	} | ||||
| 	mut exprs := []ast.Expr | ||||
| 	mut vals := []string | ||||
| 	mut efmts := []string | ||||
| 	var exprs := []ast.Expr | ||||
| 	var vals := []string | ||||
| 	var efmts := []string | ||||
| 	// Handle $ interpolation
 | ||||
| 	for p.tok.kind == .string { | ||||
| 		vals << p.tok.lit | ||||
|  | @ -1287,7 +1287,7 @@ fn (p mut Parser) string_expr() ast.Expr { | |||
| 		} | ||||
| 		p.check(.str_dollar) | ||||
| 		exprs << p.expr(0) | ||||
| 		mut efmt := []string | ||||
| 		var efmt := []string | ||||
| 		if p.tok.kind == .colon { | ||||
| 			efmt << ':' | ||||
| 			p.next() | ||||
|  | @ -1319,13 +1319,13 @@ fn (p mut Parser) string_expr() ast.Expr { | |||
| 
 | ||||
| fn (p mut Parser) array_init() ast.ArrayInit { | ||||
| 	first_pos := p.tok.position() | ||||
| 	mut last_pos := token.Position{} | ||||
| 	var last_pos := token.Position{} | ||||
| 	p.check(.lsbr) | ||||
| 	// p.warn('array_init() exp=$p.expected_type')
 | ||||
| 	mut array_type := table.void_type | ||||
| 	mut elem_type := table.void_type | ||||
| 	mut exprs := []ast.Expr | ||||
| 	mut is_fixed := false | ||||
| 	var array_type := table.void_type | ||||
| 	var elem_type := table.void_type | ||||
| 	var exprs := []ast.Expr | ||||
| 	var is_fixed := false | ||||
| 	if p.tok.kind == .rsbr { | ||||
| 		// []typ => `[]` and `typ` must be on the same line
 | ||||
| 		line_nr := p.tok.line_nr | ||||
|  | @ -1404,8 +1404,8 @@ fn (p mut Parser) array_init() ast.ArrayInit { | |||
| 
 | ||||
| fn (p mut Parser) map_init() ast.MapInit { | ||||
| 	pos := p.tok.position() | ||||
| 	mut keys := []ast.Expr | ||||
| 	mut vals := []ast.Expr | ||||
| 	var keys := []ast.Expr | ||||
| 	var vals := []ast.Expr | ||||
| 	for p.tok.kind != .rcbr && p.tok.kind != .eof { | ||||
| 		// p.check(.str)
 | ||||
| 		key := p.expr(0) | ||||
|  | @ -1427,7 +1427,7 @@ fn (p mut Parser) map_init() ast.MapInit { | |||
| fn (p mut Parser) parse_number_literal() ast.Expr { | ||||
| 	lit := p.tok.lit | ||||
| 	pos := p.tok.position() | ||||
| 	mut node := ast.Expr{} | ||||
| 	var node := ast.Expr{} | ||||
| 	if lit.index_any('.eE') >= 0 { | ||||
| 		node = ast.FloatLiteral{ | ||||
| 			val: lit | ||||
|  | @ -1443,7 +1443,7 @@ fn (p mut Parser) parse_number_literal() ast.Expr { | |||
| } | ||||
| 
 | ||||
| fn (p mut Parser) module_decl() ast.Module { | ||||
| 	mut name := 'main' | ||||
| 	var name := 'main' | ||||
| 	is_skipped := p.tok.kind != .key_module | ||||
| 	if !is_skipped { | ||||
| 		p.check(.key_module) | ||||
|  | @ -1460,8 +1460,8 @@ fn (p mut Parser) module_decl() ast.Module { | |||
| 
 | ||||
| fn (p mut Parser) parse_import() ast.Import { | ||||
| 	pos := p.tok.position() | ||||
| 	mut mod_name := p.check_name() | ||||
| 	mut mod_alias := mod_name | ||||
| 	var mod_name := p.check_name() | ||||
| 	var mod_alias := mod_name | ||||
| 	for p.tok.kind == .dot { | ||||
| 		p.check(.dot) | ||||
| 		submod_name := p.check_name() | ||||
|  | @ -1483,7 +1483,7 @@ fn (p mut Parser) parse_import() ast.Import { | |||
| 
 | ||||
| fn (p mut Parser) import_stmt() []ast.Import { | ||||
| 	p.check(.key_import) | ||||
| 	mut imports := []ast.Import | ||||
| 	var imports := []ast.Import | ||||
| 	if p.tok.kind == .lpar { | ||||
| 		p.check(.lpar) | ||||
| 		for p.tok.kind != .rpar { | ||||
|  | @ -1508,7 +1508,7 @@ fn (p mut Parser) const_decl() ast.ConstDecl { | |||
| 	pos := p.tok.position() | ||||
| 	p.check(.key_const) | ||||
| 	p.check(.lpar) | ||||
| 	mut fields := []ast.ConstField | ||||
| 	var fields := []ast.ConstField | ||||
| 	for p.tok.kind != .rpar { | ||||
| 		if p.tok.kind == .comment { | ||||
| 			p.comment() | ||||
|  | @ -1556,17 +1556,17 @@ fn (p mut Parser) struct_decl() ast.StructDecl { | |||
| 	if !is_c && no_body { | ||||
| 		p.error('`$p.tok.lit` lacks body') | ||||
| 	} | ||||
| 	mut name := p.check_name() | ||||
| 	var name := p.check_name() | ||||
| 	// println('struct decl $name')
 | ||||
| 	mut ast_fields := []ast.StructField | ||||
| 	mut fields := []table.Field | ||||
| 	mut mut_pos := -1 | ||||
| 	mut pub_pos := -1 | ||||
| 	mut pub_mut_pos := -1 | ||||
| 	var ast_fields := []ast.StructField | ||||
| 	var fields := []table.Field | ||||
| 	var mut_pos := -1 | ||||
| 	var pub_pos := -1 | ||||
| 	var pub_mut_pos := -1 | ||||
| 	if !no_body { | ||||
| 		p.check(.lcbr) | ||||
| 		for p.tok.kind != .rcbr { | ||||
| 			mut comment := ast.Comment{} | ||||
| 			var comment := ast.Comment{} | ||||
| 			if p.tok.kind == .comment { | ||||
| 				comment = p.comment() | ||||
| 			} | ||||
|  | @ -1597,8 +1597,8 @@ fn (p mut Parser) struct_decl() ast.StructDecl { | |||
| 			println('XXXX' + s.str()) | ||||
| 		} | ||||
| */ | ||||
| 			mut default_expr := ast.Expr{} | ||||
| 			mut has_default_expr := false | ||||
| 			var default_expr := ast.Expr{} | ||||
| 			var has_default_expr := false | ||||
| 			if p.tok.kind == .assign { | ||||
| 				// Default value
 | ||||
| 				p.next() | ||||
|  | @ -1614,7 +1614,7 @@ fn (p mut Parser) struct_decl() ast.StructDecl { | |||
| 				} | ||||
| 				has_default_expr = true | ||||
| 			} | ||||
| 			mut attr := ast.Attr{} | ||||
| 			var attr := ast.Attr{} | ||||
| 			if p.tok.kind == .lsbr { | ||||
| 				attr = p.attribute() | ||||
| 			} | ||||
|  | @ -1654,7 +1654,7 @@ fn (p mut Parser) struct_decl() ast.StructDecl { | |||
| 			is_union: is_union | ||||
| 		} | ||||
| 	} | ||||
| 	mut ret := 0 | ||||
| 	var ret := 0 | ||||
| 	if p.builtin_mod && t.name in table.builtin_type_names { | ||||
| 		// this allows overiding the builtins type
 | ||||
| 		// with the real struct type info parsed from builtin
 | ||||
|  | @ -1687,7 +1687,7 @@ fn (p mut Parser) interface_decl() ast.InterfaceDecl { | |||
| 	p.next()	// `interface`
 | ||||
| 	interface_name := p.check_name() | ||||
| 	p.check(.lcbr) | ||||
| 	mut field_names := []string | ||||
| 	var field_names := []string | ||||
| 	for p.tok.kind != .rcbr && p.tok.kind != .eof { | ||||
| 		line_nr := p.tok.line_nr | ||||
| 		name := p.check_name() | ||||
|  | @ -1707,7 +1707,7 @@ fn (p mut Parser) interface_decl() ast.InterfaceDecl { | |||
| fn (p mut Parser) return_stmt() ast.Return { | ||||
| 	p.next() | ||||
| 	// return expressions
 | ||||
| 	mut exprs := []ast.Expr | ||||
| 	var exprs := []ast.Expr | ||||
| 	if p.tok.kind == .rcbr { | ||||
| 		return ast.Return{ | ||||
| 			pos: p.tok.position() | ||||
|  | @ -1731,7 +1731,7 @@ fn (p mut Parser) return_stmt() ast.Return { | |||
| 
 | ||||
| // left hand side of `=` or `:=` in `a,b,c := 1,2,3`
 | ||||
| fn (p mut Parser) parse_assign_lhs() []ast.Ident { | ||||
| 	mut idents := []ast.Ident | ||||
| 	var idents := []ast.Ident | ||||
| 	for { | ||||
| 		is_mut := p.tok.kind == .key_mut || p.tok.kind == .key_var | ||||
| 		if is_mut { | ||||
|  | @ -1741,7 +1741,7 @@ fn (p mut Parser) parse_assign_lhs() []ast.Ident { | |||
| 		if is_static { | ||||
| 			p.check(.key_static) | ||||
| 		} | ||||
| 		mut ident := p.parse_ident(false) | ||||
| 		var ident := p.parse_ident(false) | ||||
| 		ident.is_mut = is_mut | ||||
| 		ident.info = ast.IdentVar{ | ||||
| 			is_mut: is_mut | ||||
|  | @ -1759,7 +1759,7 @@ fn (p mut Parser) parse_assign_lhs() []ast.Ident { | |||
| 
 | ||||
| // right hand side of `=` or `:=` in `a,b,c := 1,2,3`
 | ||||
| fn (p mut Parser) parse_assign_rhs() []ast.Expr { | ||||
| 	mut exprs := []ast.Expr | ||||
| 	var exprs := []ast.Expr | ||||
| 	for { | ||||
| 		expr := p.expr(0) | ||||
| 		exprs << expr | ||||
|  | @ -1831,7 +1831,7 @@ fn (p mut Parser) global_decl() ast.GlobalDecl { | |||
| 	name := p.check_name() | ||||
| 	// println(name)
 | ||||
| 	typ := p.parse_type() | ||||
| 	mut expr := ast.Expr{} | ||||
| 	var expr := ast.Expr{} | ||||
| 	has_expr := p.tok.kind == .assign | ||||
| 	if has_expr { | ||||
| 		p.next() | ||||
|  | @ -1866,20 +1866,20 @@ fn (p mut Parser) match_expr() ast.MatchExpr { | |||
| 	match_first_pos := p.tok.position() | ||||
| 	p.check(.key_match) | ||||
| 	is_mut := p.tok.kind in [.key_mut, .key_var] | ||||
| 	mut is_sum_type := false | ||||
| 	var is_sum_type := false | ||||
| 	if is_mut { | ||||
| 		p.next() | ||||
| 	} | ||||
| 	cond := p.expr(0) | ||||
| 	p.check(.lcbr) | ||||
| 	mut branches := []ast.MatchBranch | ||||
| 	var branches := []ast.MatchBranch | ||||
| 	for { | ||||
| 		branch_first_pos := p.tok.position() | ||||
| 		comment := p.check_comment()		// comment before {}
 | ||||
| 		mut exprs := []ast.Expr | ||||
| 		var exprs := []ast.Expr | ||||
| 		p.open_scope() | ||||
| 		// final else
 | ||||
| 		mut is_else := false | ||||
| 		var is_else := false | ||||
| 		if p.tok.kind == .key_else { | ||||
| 			is_else = true | ||||
| 			p.next() | ||||
|  | @ -1893,7 +1893,7 @@ fn (p mut Parser) match_expr() ast.MatchExpr { | |||
| 			x := ast.Type{ | ||||
| 				typ: typ | ||||
| 			} | ||||
| 			mut expr := ast.Expr{} | ||||
| 			var expr := ast.Expr{} | ||||
| 			expr = x | ||||
| 			exprs << expr | ||||
| 			p.scope.register('it', ast.Var{ | ||||
|  | @ -1963,15 +1963,15 @@ fn (p mut Parser) enum_decl() ast.EnumDecl { | |||
| 	p.check(.key_enum) | ||||
| 	name := p.prepend_mod(p.check_name()) | ||||
| 	p.check(.lcbr) | ||||
| 	mut vals := []string | ||||
| 	var vals := []string | ||||
| 	// mut default_exprs := []ast.Expr
 | ||||
| 	mut fields := []ast.EnumField | ||||
| 	var fields := []ast.EnumField | ||||
| 	for p.tok.kind != .eof && p.tok.kind != .rcbr { | ||||
| 		pos := p.tok.position() | ||||
| 		val := p.check_name() | ||||
| 		vals << val | ||||
| 		mut expr := ast.Expr{} | ||||
| 		mut has_expr := false | ||||
| 		var expr := ast.Expr{} | ||||
| 		var has_expr := false | ||||
| 		// p.warn('enum val $val')
 | ||||
| 		if p.tok.kind == .assign { | ||||
| 			p.next() | ||||
|  | @ -2009,7 +2009,7 @@ fn (p mut Parser) type_decl() ast.TypeDecl { | |||
| 	} | ||||
| 	p.check(.key_type) | ||||
| 	name := p.check_name() | ||||
| 	mut sum_variants := []table.Type | ||||
| 	var sum_variants := []table.Type | ||||
| 	if p.tok.kind == .assign { | ||||
| 		p.next()		// TODO require `=`
 | ||||
| 	} | ||||
|  | @ -2075,8 +2075,8 @@ fn (p mut Parser) assoc() ast.Assoc { | |||
| 		return ast.Assoc{} | ||||
| 	} | ||||
| 	// println('assoc var $name typ=$var.typ')
 | ||||
| 	mut fields := []string | ||||
| 	mut vals := []ast.Expr | ||||
| 	var fields := []string | ||||
| 	var vals := []ast.Expr | ||||
| 	p.check(.pipe) | ||||
| 	for { | ||||
| 		fields << p.check_name() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue