Skip to content

Commit

Permalink
parser: cleanup and simplify language parsing (#20185)
Browse files Browse the repository at this point in the history
  • Loading branch information
ttytm committed Dec 15, 2023
1 parent 0a029d4 commit 226e075
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 61 deletions.
29 changes: 9 additions & 20 deletions vlib/v/parser/fn.v
Expand Up @@ -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 {
Expand All @@ -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{
Expand Down Expand Up @@ -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] {
Expand Down
13 changes: 5 additions & 8 deletions vlib/v/parser/parse_type.v
Expand Up @@ -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()
Expand Down
16 changes: 7 additions & 9 deletions vlib/v/parser/parser.v
Expand Up @@ -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
Expand Down
26 changes: 2 additions & 24 deletions vlib/v/parser/struct.v
Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand Down

0 comments on commit 226e075

Please sign in to comment.