From 1bf094fbca1151b708cba8359a7f66beb258059e Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 21 Apr 2020 05:07:49 +0200 Subject: [PATCH] parser: mut in receivers --- vlib/v/gen/cgen.v | 14 ++++++++++++-- vlib/v/parser/fn.v | 14 ++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 1aa8aca605..573c6617fa 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -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) { diff --git a/vlib/v/parser/fn.v b/vlib/v/parser/fn.v index f9461a2cc2..9ce80e7e03 100644 --- a/vlib/v/parser/fn.v +++ b/vlib/v/parser/fn.v @@ -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() } // @@ -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