parser: mut in receivers
							parent
							
								
									cc0e0ed281
								
							
						
					
					
						commit
						1bf094fbca
					
				|  | @ -24,9 +24,19 @@ const ( | |||
| 	'int' | ||||
| 	'long' | ||||
| 	'register' | ||||
| 	'restrict', 'short', 'signed', 'sizeof', 'static', 'switch', 'typedef', 'union', 'unsigned' | ||||
| 	'restrict' | ||||
| 	'short' | ||||
| 	'signed' | ||||
| 	'sizeof' | ||||
| 	'static' | ||||
| 	'switch' | ||||
| 	'typedef' | ||||
| 	'union' | ||||
| 	'unsigned' | ||||
| 	'void' | ||||
| 	'volatile', 'while'] | ||||
| 	'volatile' | ||||
| 	'while' | ||||
| 	] | ||||
| ) | ||||
| 
 | ||||
| fn foo(t token.Token) { | ||||
|  |  | |||
|  | @ -107,11 +107,11 @@ fn (var p Parser) fn_decl() ast.FnDecl { | |||
| 	var rec_mut := false | ||||
| 	var args := []table.Arg | ||||
| 	if p.tok.kind == .lpar { | ||||
| 		p.next()		// (
 | ||||
| 		p.next() // (
 | ||||
| 		is_method = true | ||||
| 		rec_mut = p.tok.kind == .key_var | ||||
| 		rec_mut = p.tok.kind in [.key_var, .key_mut] | ||||
| 		if rec_mut { | ||||
| 			p.next()			// `var`
 | ||||
| 			p.next() // `var`
 | ||||
| 		} | ||||
| 		rec_name = p.check_name() | ||||
| 		if !rec_mut { | ||||
|  | @ -146,7 +146,7 @@ fn (var p Parser) fn_decl() ast.FnDecl { | |||
| 		} | ||||
| 	} | ||||
| 	if p.tok.kind in [.plus, .minus, .mul, .div, .mod] { | ||||
| 		name = p.tok.kind.str()		// op_to_fn_name()
 | ||||
| 		name = p.tok.kind.str() // op_to_fn_name()
 | ||||
| 		p.next() | ||||
| 	} | ||||
| 	// <T>
 | ||||
|  | @ -240,9 +240,7 @@ fn (var p Parser) anon_fn() ast.AnonFn { | |||
| 	pos := p.tok.position() | ||||
| 	p.open_scope() | ||||
| 	p.check(.key_fn) | ||||
| 
 | ||||
| 	// TODO generics
 | ||||
| 
 | ||||
| 	args, is_variadic := p.fn_args() | ||||
| 	for arg in args { | ||||
| 		p.scope.register(arg.name, ast.Var{ | ||||
|  | @ -250,19 +248,16 @@ fn (var p Parser) anon_fn() ast.AnonFn { | |||
| 			typ: arg.typ | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| 	var return_type := table.void_type | ||||
| 	if p.tok.kind.is_start_of_type() { | ||||
| 		return_type = p.parse_type() | ||||
| 	} | ||||
| 
 | ||||
| 	var stmts := []ast.Stmt | ||||
| 	no_body := p.tok.kind != .lcbr | ||||
| 	if p.tok.kind == .lcbr { | ||||
| 		stmts = p.parse_block() | ||||
| 	} | ||||
| 	p.close_scope() | ||||
| 
 | ||||
| 	func := table.Fn{ | ||||
| 		args: args | ||||
| 		is_variadic: is_variadic | ||||
|  | @ -271,7 +266,6 @@ fn (var p Parser) anon_fn() ast.AnonFn { | |||
| 	idx := p.table.find_or_register_fn_type(func, false) | ||||
| 	typ := table.new_type(idx) | ||||
| 	name := p.table.get_type_name(typ) | ||||
| 
 | ||||
| 	return ast.AnonFn{ | ||||
| 		decl: ast.FnDecl{ | ||||
| 			name: name | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue