parser: use .next instead of .check, when a token is already known
parent
59aa31cee5
commit
2f52106253
|
@ -83,7 +83,7 @@ fn (mut p Parser) parse_assign_lhs() []ast.Ident {
|
|||
}
|
||||
is_static := p.tok.kind == .key_static
|
||||
if is_static {
|
||||
p.check(.key_static)
|
||||
p.next()
|
||||
}
|
||||
mut ident := p.parse_ident(false, false)
|
||||
ident.is_mut = is_mut
|
||||
|
@ -93,7 +93,7 @@ fn (mut p Parser) parse_assign_lhs() []ast.Ident {
|
|||
}
|
||||
idents << ident
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ fn (mut p Parser) parse_assign_rhs() []ast.Expr {
|
|||
expr := p.expr(0)
|
||||
exprs << expr
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ fn (mut p Parser) comp_if() ast.CompIf {
|
|||
}
|
||||
if p.tok.kind == .dollar && p.peek_tok.kind == .key_else {
|
||||
p.next()
|
||||
p.check(.key_else)
|
||||
p.next()
|
||||
node.has_else = true
|
||||
node.else_stmts = p.parse_block()
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ fn (mut p Parser) array_init() ast.ArrayInit {
|
|||
if p.tok.kind == .rsbr {
|
||||
// []typ => `[]` and `typ` must be on the same line
|
||||
line_nr := p.tok.line_nr
|
||||
p.check(.rsbr)
|
||||
p.next()
|
||||
// []string
|
||||
if p.tok.kind in [.name, .amp] && p.tok.line_nr == line_nr {
|
||||
elem_type = p.parse_type()
|
||||
|
@ -37,7 +37,7 @@ fn (mut p Parser) array_init() ast.ArrayInit {
|
|||
expr := p.expr(0)
|
||||
exprs << expr
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
}
|
||||
// p.check_comment()
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ pub fn (mut p Parser) call_args() []ast.CallArg {
|
|||
for p.tok.kind != .rpar {
|
||||
mut is_mut := false
|
||||
if p.tok.kind == .key_mut {
|
||||
p.check(.key_mut)
|
||||
p.next()
|
||||
is_mut = true
|
||||
}
|
||||
e := p.expr(0)
|
||||
|
@ -335,10 +335,10 @@ fn (mut p Parser) fn_args() ([]table.Arg, bool) {
|
|||
arg_name := 'arg_$arg_no'
|
||||
is_mut := p.tok.kind == .key_mut
|
||||
if is_mut {
|
||||
p.check(.key_mut)
|
||||
p.next()
|
||||
}
|
||||
if p.tok.kind == .ellipsis {
|
||||
p.check(.ellipsis)
|
||||
p.next()
|
||||
is_variadic = true
|
||||
}
|
||||
mut arg_type := p.parse_type()
|
||||
|
@ -367,7 +367,7 @@ fn (mut p Parser) fn_args() ([]table.Arg, bool) {
|
|||
mut arg_names := [p.check_name()]
|
||||
// `a, b, c int`
|
||||
for p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
arg_names << p.check_name()
|
||||
}
|
||||
if p.tok.kind == .key_mut {
|
||||
|
@ -375,7 +375,7 @@ fn (mut p Parser) fn_args() ([]table.Arg, bool) {
|
|||
is_mut = true
|
||||
}
|
||||
if p.tok.kind == .ellipsis {
|
||||
p.check(.ellipsis)
|
||||
p.next()
|
||||
is_variadic = true
|
||||
}
|
||||
mut typ := p.parse_type()
|
||||
|
|
|
@ -71,7 +71,7 @@ fn (mut p Parser) for_stmt() ast.Stmt {
|
|||
mut key_var_name := ''
|
||||
mut val_var_name := p.check_name()
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
key_var_pos := val_var_pos
|
||||
val_var_pos = p.tok.position()
|
||||
key_var_name = val_var_name
|
||||
|
@ -103,7 +103,7 @@ fn (mut p Parser) for_stmt() ast.Stmt {
|
|||
mut is_range := false
|
||||
if p.tok.kind == .dotdot {
|
||||
is_range = true
|
||||
p.check(.dotdot)
|
||||
p.next()
|
||||
high_expr = p.expr(0)
|
||||
p.scope.register(val_var_name, ast.Var{
|
||||
name: val_var_name
|
||||
|
|
|
@ -16,7 +16,7 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
|||
start_pos := p.tok.position()
|
||||
mut comment := ast.Comment{}
|
||||
if p.tok.kind == .key_if {
|
||||
p.check(.key_if)
|
||||
p.next()
|
||||
} else {
|
||||
// if p.tok.kind == .comment {
|
||||
// p.error('place comments inside {}')
|
||||
|
@ -24,7 +24,7 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
|||
// comment = p.check_comment()
|
||||
p.check(.key_else)
|
||||
if p.tok.kind == .key_if {
|
||||
p.check(.key_if)
|
||||
p.next()
|
||||
} else {
|
||||
has_else = true
|
||||
p.inside_if = false
|
||||
|
|
|
@ -21,7 +21,7 @@ pub fn (mut p Parser) parse_array_type() table.Type {
|
|||
elem_type := p.parse_type()
|
||||
mut nr_dims := 1
|
||||
for p.tok.kind == .lsbr {
|
||||
p.check(.lsbr)
|
||||
p.next()
|
||||
p.check(.rsbr)
|
||||
nr_dims++
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ pub fn (mut p Parser) parse_multi_return_type() table.Type {
|
|||
mr_type := p.parse_type()
|
||||
mr_types << mr_type
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
|
|
@ -464,7 +464,7 @@ pub fn (mut p Parser) stmt() ast.Stmt {
|
|||
} else if p.tok.kind == .name && p.peek_tok.kind == .colon {
|
||||
// `label:`
|
||||
name := p.check_name()
|
||||
p.check(.colon)
|
||||
p.next()
|
||||
return ast.GotoLabel{
|
||||
name: name
|
||||
}
|
||||
|
@ -659,7 +659,7 @@ pub fn (mut p Parser) name_expr() ast.Expr {
|
|||
expr = p.expr(0)
|
||||
// TODO, string(b, len)
|
||||
if p.tok.kind == .comma && to_typ.idx() == table.string_type_idx {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
arg = p.expr(0) // len
|
||||
has_arg = true
|
||||
}
|
||||
|
@ -735,7 +735,7 @@ fn (mut p Parser) index_expr(left ast.Expr) ast.IndexExpr {
|
|||
mut has_high := false
|
||||
if p.tok.kind == .dotdot {
|
||||
// [start..end] or [start..]
|
||||
p.check(.dotdot)
|
||||
p.next()
|
||||
mut high := ast.Expr{}
|
||||
if p.tok.kind != .rsbr {
|
||||
has_high = true
|
||||
|
@ -890,7 +890,7 @@ fn (mut p Parser) string_expr() ast.Expr {
|
|||
if p.tok.kind != .str_dollar {
|
||||
continue
|
||||
}
|
||||
p.check(.str_dollar)
|
||||
p.next()
|
||||
exprs << p.expr(0)
|
||||
mut efmt := []string{}
|
||||
if p.tok.kind == .colon {
|
||||
|
@ -945,7 +945,7 @@ fn (mut p Parser) module_decl() ast.Module {
|
|||
mut name := 'main'
|
||||
is_skipped := p.tok.kind != .key_module
|
||||
if !is_skipped {
|
||||
p.check(.key_module)
|
||||
p.next()
|
||||
name = p.check_name()
|
||||
}
|
||||
full_mod := p.table.qualify_module(name, p.file_name)
|
||||
|
@ -966,13 +966,13 @@ fn (mut p Parser) import_stmt() ast.Import {
|
|||
mut mod_name := p.check_name()
|
||||
mut mod_alias := mod_name
|
||||
for p.tok.kind == .dot {
|
||||
p.check(.dot)
|
||||
p.next()
|
||||
submod_name := p.check_name()
|
||||
mod_name += '.' + submod_name
|
||||
mod_alias = submod_name
|
||||
}
|
||||
if p.tok.kind == .key_as {
|
||||
p.check(.key_as)
|
||||
p.next()
|
||||
mod_alias = p.check_name()
|
||||
}
|
||||
p.imports[mod_alias] = mod_name
|
||||
|
@ -1039,7 +1039,7 @@ fn (mut p Parser) return_stmt() ast.Return {
|
|||
expr := p.expr(0)
|
||||
exprs << expr
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
@ -1171,7 +1171,7 @@ fn (mut p Parser) type_decl() ast.TypeDecl {
|
|||
}
|
||||
first_type := p.parse_type() // need to parse the first type before we can check if it's `type A = X | Y`
|
||||
if p.tok.kind == .pipe {
|
||||
p.check(.pipe)
|
||||
p.next()
|
||||
sum_variants << first_type
|
||||
// type SumType = A | B | c
|
||||
for {
|
||||
|
@ -1235,7 +1235,7 @@ fn (mut p Parser) assoc() ast.Assoc {
|
|||
expr := p.expr(0)
|
||||
vals << expr
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
}
|
||||
if p.tok.kind == .rcbr {
|
||||
break
|
||||
|
|
|
@ -16,7 +16,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl {
|
|||
}
|
||||
is_union := p.tok.kind == .key_union
|
||||
if p.tok.kind == .key_struct {
|
||||
p.check(.key_struct)
|
||||
p.next()
|
||||
} else {
|
||||
p.check(.key_union)
|
||||
}
|
||||
|
@ -51,12 +51,12 @@ fn (mut p Parser) struct_decl() ast.StructDecl {
|
|||
comment = p.comment()
|
||||
}
|
||||
if p.tok.kind == .key_pub {
|
||||
p.check(.key_pub)
|
||||
p.next()
|
||||
if p.tok.kind == .key_mut {
|
||||
if pub_mut_pos != -1 {
|
||||
p.error('redefinition of `pub mut` section')
|
||||
}
|
||||
p.check(.key_mut)
|
||||
p.next()
|
||||
pub_mut_pos = fields.len
|
||||
is_field_pub = true
|
||||
is_field_mut = true
|
||||
|
@ -75,7 +75,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl {
|
|||
if mut_pos != -1 {
|
||||
p.error('redefinition of `mut` section')
|
||||
}
|
||||
p.check(.key_mut)
|
||||
p.next()
|
||||
p.check(.colon)
|
||||
mut_pos = fields.len
|
||||
is_field_pub = false
|
||||
|
@ -85,7 +85,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl {
|
|||
if global_pos != -1 {
|
||||
p.error('redefinition of `global` section')
|
||||
}
|
||||
p.check(.key_global)
|
||||
p.next()
|
||||
p.check(.colon)
|
||||
global_pos = fields.len
|
||||
is_field_pub = true
|
||||
|
@ -234,7 +234,7 @@ fn (mut p Parser) struct_init(short_syntax bool) ast.StructInit {
|
|||
}
|
||||
i++
|
||||
if p.tok.kind == .comma {
|
||||
p.check(.comma)
|
||||
p.next()
|
||||
}
|
||||
p.check_comment()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue