diff --git a/vlib/v/parser/fn.v b/vlib/v/parser/fn.v index 2723868715..7549c09a8e 100644 --- a/vlib/v/parser/fn.v +++ b/vlib/v/parser/fn.v @@ -249,17 +249,8 @@ fn (mut p Parser) fn_decl() ast.FnDecl { p.check(.key_fn) comments << p.eat_comments() p.open_scope() - // C. || JS. - mut language := ast.Language.v language_tok_pos := p.tok.pos() - if p.tok.kind == .name && p.tok.lit == 'C' { - is_unsafe = !is_trusted - language = .c - } else if p.tok.kind == .name && p.tok.lit == 'JS' { - language = .js - } else if p.tok.kind == .name && p.tok.lit == 'WASM' { - language = .wasm - } + mut language := p.parse_language() p.fn_language = language if language != .v { for fna in p.attrs { @@ -274,9 +265,10 @@ fn (mut p Parser) fn_decl() ast.FnDecl { language_tok_pos) } if language != .v { - p.next() - p.check(.dot) p.check_for_impure_v(language, language_tok_pos) + if language == .c { + is_unsafe = !is_trusted + } } // Receiver? mut rec := ReceiverParsingInfo{ @@ -521,14 +513,11 @@ run them via `v file.v` instead', language: language }) } else { - if language == .c { - name = 'C.${name}' - } else if language == .js { - name = 'JS.${name}' - } else if language == .wasm { - name = 'WASM.${name}' - } else { - name = p.prepend_mod(name) + name = match language { + .c { 'C.${name}' } + .js { 'JS.${name}' } + .wasm { 'WASM.${name}' } + else { p.prepend_mod(name) } } if !p.pref.translated && language == .v { if existing := p.table.fns[name] { diff --git a/vlib/v/parser/parse_type.v b/vlib/v/parser/parse_type.v index 26220eaef3..c33cf2128a 100644 --- a/vlib/v/parser/parse_type.v +++ b/vlib/v/parser/parse_type.v @@ -327,14 +327,11 @@ fn (mut p Parser) parse_type_with_mut(is_mut bool) ast.Type { // Parses any language indicators on a type. fn (mut p Parser) parse_language() ast.Language { - language := if p.tok.lit == 'C' { - ast.Language.c - } else if p.tok.lit == 'JS' { - ast.Language.js - } else if p.tok.lit == 'WASM' { - ast.Language.wasm - } else { - ast.Language.v + language := match p.tok.lit { + 'C' { ast.Language.c } + 'JS' { ast.Language.js } + 'WASM' { ast.Language.wasm } + else { ast.Language.v } } if language != .v { p.next() diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index e7cd5360eb..71384ffd73 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -2534,15 +2534,13 @@ fn (mut p Parser) name_expr() ast.Expr { pos: type_pos } } - mut language := ast.Language.v - if p.tok.lit == 'C' { - language = ast.Language.c - p.check_for_impure_v(language, p.tok.pos()) - } else if p.tok.lit == 'JS' { - language = ast.Language.js - p.check_for_impure_v(language, p.tok.pos()) - } else if p.tok.lit == 'WASM' { - language = ast.Language.wasm + language := match p.tok.lit { + 'C' { ast.Language.c } + 'JS' { ast.Language.js } + 'WASM' { ast.Language.wasm } + else { ast.Language.v } + } + if language != .v { p.check_for_impure_v(language, p.tok.pos()) } is_option := p.tok.kind == .question diff --git a/vlib/v/parser/struct.v b/vlib/v/parser/struct.v index e0d83197c6..071419adcc 100644 --- a/vlib/v/parser/struct.v +++ b/vlib/v/parser/struct.v @@ -25,19 +25,7 @@ fn (mut p Parser) struct_decl(is_anon bool) ast.StructDecl { } else { p.check(.key_union) } - language := if p.tok.lit == 'C' && p.peek_tok.kind == .dot { - ast.Language.c - } else if p.tok.lit == 'JS' && p.peek_tok.kind == .dot { - ast.Language.js - } else if p.tok.lit == 'WASM' && p.peek_tok.kind == .dot { - ast.Language.wasm - } else { - ast.Language.v - } - if language != .v { - p.next() // C || JS - p.next() // . - } + language := p.parse_language() name_pos := p.tok.pos() p.check_for_impure_v(language, name_pos) if p.disallow_declarations_in_script_mode() { @@ -522,17 +510,7 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { p.next() } p.next() // `interface` - language := if p.tok.lit == 'C' && p.peek_tok.kind == .dot { - ast.Language.c - } else if p.tok.lit == 'JS' && p.peek_tok.kind == .dot { - ast.Language.js - } else { - ast.Language.v - } - if language != .v { - p.next() // C || JS | WASM - p.next() // . - } + language := p.parse_language() name_pos := p.tok.pos() p.check_for_impure_v(language, name_pos) if p.disallow_declarations_in_script_mode() {