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:
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user