-
This commit is contained in:
14
parser.v
14
parser.v
@@ -120,7 +120,6 @@ struct BoolLiteral {
|
||||
|
||||
struct Variable {
|
||||
name string
|
||||
scope_depth int
|
||||
}
|
||||
|
||||
struct TypeExpr {
|
||||
@@ -158,7 +157,7 @@ struct VarDecl {
|
||||
name string
|
||||
type string
|
||||
value Expr
|
||||
scope_depth int
|
||||
const bool
|
||||
}
|
||||
|
||||
struct FuncDecl {
|
||||
@@ -270,7 +269,7 @@ fn (mut p Parser) parse_ident(ident string) Expr {
|
||||
return match p.peek().type {
|
||||
.increment, .decrement {UnaryExpr {ident: ident, op: p.next().text}}
|
||||
.lparen {p.parse_call(ident)}
|
||||
else {Variable{ident, p.symbols.variable_scopes.len}}
|
||||
else {Variable{ident}}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,7 +403,8 @@ fn (mut p Parser) get_return_stmts_recursive(block Block) []ReturnStmt {
|
||||
|
||||
fn (mut p Parser) parse_statement() Stmt {
|
||||
match p.peek().type {
|
||||
.kw_let {return p.parse_var_decl()}
|
||||
.kw_let {return p.parse_var_decl(false)}
|
||||
.kw_const {return p.parse_var_decl(true)}
|
||||
.kw_return {return p.parse_return_stmt()}
|
||||
.kw_fn {return p.parse_func_decl()}
|
||||
.lbracket {return p.parse_block(false)}
|
||||
@@ -414,8 +414,8 @@ fn (mut p Parser) parse_statement() Stmt {
|
||||
|
||||
|
||||
|
||||
fn (mut p Parser) parse_var_decl() VarDecl {
|
||||
p.expect(.kw_let)
|
||||
fn (mut p Parser) parse_var_decl(is_const bool) VarDecl {
|
||||
p.next()
|
||||
|
||||
name_tok := p.next()
|
||||
if name_tok.type != .identifier {
|
||||
@@ -444,7 +444,7 @@ fn (mut p Parser) parse_var_decl() VarDecl {
|
||||
name: name_tok.text
|
||||
value: val
|
||||
type: type_tok.text
|
||||
scope_depth: p.symbols.variable_scopes.len
|
||||
const: is_const
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user