1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

all: support ?Type(none) (#9567)

This commit is contained in:
Daniel Däschle
2021-04-02 16:34:48 +02:00
committed by GitHub
parent 3637bac716
commit 6a5f49afb1
7 changed files with 114 additions and 73 deletions

View File

@@ -1938,14 +1938,16 @@ pub fn (mut p Parser) name_expr() ast.Expr {
} else {
false
}
is_optional := p.tok.kind == .question
// p.warn('name expr $p.tok.lit $p.peek_tok.str()')
same_line := p.tok.line_nr == p.peek_tok.line_nr
// `(` must be on same line as name token otherwise it's a ParExpr
if !same_line && p.peek_tok.kind == .lpar {
node = p.parse_ident(language)
} else if p.peek_tok.kind == .lpar || p.is_generic_call() {
} else if p.peek_tok.kind == .lpar
|| (is_optional && p.peek_token(2).kind == .lpar) || p.is_generic_call() {
// foo(), foo<int>() or type() cast
mut name := p.tok.lit
mut name := if is_optional { p.peek_tok.lit } else { p.tok.lit }
if mod.len > 0 {
name = '${mod}.$name'
}
@@ -1992,6 +1994,9 @@ pub fn (mut p Parser) name_expr() ast.Expr {
} else {
// fn call
// println('calling $p.tok.lit')
if is_optional {
p.error_with_pos('unexpected $p.prev_tok', p.prev_tok.position())
}
node = p.call_expr(language, mod)
}
} else if (p.peek_tok.kind == .lcbr || (p.peek_tok.kind == .lt && lit0_is_capital))

View File

@@ -25,7 +25,7 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
node = p.parse_ident(ast.Language.v)
p.is_stmt_ident = is_stmt_ident
}
.name {
.name, .question {
if p.tok.lit == 'sql' && p.peek_tok.kind == .name {
p.inside_match = true // reuse the same var for perf instead of inside_sql TODO rename
node = p.sql_expr()