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

parser: simplify array push detection

This commit is contained in:
joe-conigliaro 2020-04-25 18:42:53 +10:00
parent 1863dda8e5
commit 4675656786
No known key found for this signature in database
GPG Key ID: C12F7136C08206F1
2 changed files with 2 additions and 7 deletions

View File

@ -40,7 +40,6 @@ mut:
returns bool returns bool
inside_match bool // to separate `match A { }` from `Struct{}` inside_match bool // to separate `match A { }` from `Struct{}`
inside_match_case bool // to separate `match_expr { }` from `Struct{}` inside_match_case bool // to separate `match_expr { }` from `Struct{}`
is_stmt_ident bool // true while the beginning of a statement is an ident/selector
inside_is bool // `is Type`, expecting type inside_is bool // `is Type`, expecting type
} }
@ -375,7 +374,6 @@ pub fn (mut p Parser) comment() ast.Comment {
} }
pub fn (mut p Parser) stmt() ast.Stmt { pub fn (mut p Parser) stmt() ast.Stmt {
p.is_stmt_ident = p.tok.kind == .name
match p.tok.kind { match p.tok.kind {
.lcbr { .lcbr {
stmts := p.parse_block() stmts := p.parse_block()

View File

@ -11,14 +11,12 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
// println('\n\nparser.expr()') // println('\n\nparser.expr()')
mut typ := table.void_type mut typ := table.void_type
mut node := ast.Expr{} mut node := ast.Expr{}
is_stmt_ident := p.is_stmt_ident expr_prev_tok_line_nr := p.prev_tok.line_nr
p.is_stmt_ident = false
// Prefix // Prefix
match p.tok.kind { match p.tok.kind {
.name { .name {
p.scope.remove_unused_var(p.tok.lit) p.scope.remove_unused_var(p.tok.lit)
node = p.name_expr() node = p.name_expr()
p.is_stmt_ident = is_stmt_ident
} }
.string { .string {
node = p.string_expr() node = p.string_expr()
@ -136,7 +134,6 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
node = p.assign_expr(node) node = p.assign_expr(node)
} else if p.tok.kind == .dot { } else if p.tok.kind == .dot {
node = p.dot_expr(node) node = p.dot_expr(node)
p.is_stmt_ident = is_stmt_ident
} else if p.tok.kind == .lsbr { } else if p.tok.kind == .lsbr {
node = p.index_expr(node) node = p.index_expr(node)
} else if p.tok.kind == .key_as { } else if p.tok.kind == .key_as {
@ -148,7 +145,7 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
typ: typ typ: typ
pos: pos pos: pos
} }
} else if p.tok.kind == .left_shift && p.is_stmt_ident { } else if p.tok.kind == .left_shift && p.tok.line_nr != expr_prev_tok_line_nr {
// arr << elem // arr << elem
tok := p.tok tok := p.tok
pos := tok.position() pos := tok.position()