fmt: assoc
parent
cd41967aa1
commit
5fef8390a1
|
@ -145,6 +145,11 @@ fn (f mut Fmt) stmt(node ast.Stmt) {
|
||||||
f.stmts(it.stmts)
|
f.stmts(it.stmts)
|
||||||
f.writeln('}\n')
|
f.writeln('}\n')
|
||||||
}
|
}
|
||||||
|
ast.ForInStmt {
|
||||||
|
f.writeln(' for in {')
|
||||||
|
f.stmts(it.stmts)
|
||||||
|
f.writeln('}')
|
||||||
|
}
|
||||||
ast.ForStmt {
|
ast.ForStmt {
|
||||||
f.write('for ')
|
f.write('for ')
|
||||||
f.expr(it.cond)
|
f.expr(it.cond)
|
||||||
|
@ -241,6 +246,19 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
f.write(' $it.op.str() ')
|
f.write(' $it.op.str() ')
|
||||||
f.expr(it.val)
|
f.expr(it.val)
|
||||||
}
|
}
|
||||||
|
ast.Assoc {
|
||||||
|
f.writeln('{')
|
||||||
|
// f.indent++
|
||||||
|
f.writeln('\t$it.name |')
|
||||||
|
// TODO StructInit copy pasta
|
||||||
|
for i, field in it.fields {
|
||||||
|
f.write('\t$field: ')
|
||||||
|
f.expr(it.exprs[i])
|
||||||
|
f.writeln('')
|
||||||
|
}
|
||||||
|
// f.indent--
|
||||||
|
f.write('}')
|
||||||
|
}
|
||||||
ast.BoolLiteral {
|
ast.BoolLiteral {
|
||||||
f.write(it.val.str())
|
f.write(it.val.str())
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ pub fn parse_stmt(text string, table &table.Table, scope &ast.Scope) ast.Stmt {
|
||||||
pref: &pref.Preferences{}
|
pref: &pref.Preferences{}
|
||||||
scope: scope
|
scope: scope
|
||||||
// scope: &ast.Scope{start_pos: 0, parent: 0}
|
// scope: &ast.Scope{start_pos: 0, parent: 0}
|
||||||
|
|
||||||
}
|
}
|
||||||
p.init_parse_fns()
|
p.init_parse_fns()
|
||||||
p.read_first_token()
|
p.read_first_token()
|
||||||
|
@ -320,7 +320,7 @@ pub fn (p mut Parser) stmt() ast.Stmt {
|
||||||
return ast.ExprStmt{
|
return ast.ExprStmt{
|
||||||
expr: expr
|
expr: expr
|
||||||
// typ: typ
|
// typ: typ
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -466,7 +466,10 @@ pub fn (p mut Parser) parse_ident(is_c bool) ast.Ident {
|
||||||
else {
|
else {
|
||||||
// handle consts/fns in checker
|
// handle consts/fns in checker
|
||||||
ident.kind = .unresolved
|
ident.kind = .unresolved
|
||||||
return {ident | name: p.prepend_mod(name)}
|
return {
|
||||||
|
ident |
|
||||||
|
name:p.prepend_mod(name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -666,29 +669,32 @@ pub fn (p mut Parser) expr(precedence int) (ast.Expr,table.Type) {
|
||||||
mut keys := []ast.Expr
|
mut keys := []ast.Expr
|
||||||
mut vals := []ast.Expr
|
mut vals := []ast.Expr
|
||||||
for p.tok.kind != .rcbr && p.tok.kind != .eof {
|
for p.tok.kind != .rcbr && p.tok.kind != .eof {
|
||||||
//p.check(.str)
|
// p.check(.str)
|
||||||
key, _ := p.expr(0)
|
key,_ := p.expr(0)
|
||||||
keys << key
|
keys << key
|
||||||
p.check(.colon)
|
p.check(.colon)
|
||||||
val,_ := p.expr(0)
|
val,_ := p.expr(0)
|
||||||
vals << val
|
vals << val
|
||||||
if p.tok.kind == .comma {
|
if p.tok.kind == .comma {
|
||||||
p.next()
|
p.next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
node = ast.MapInit {
|
node = ast.MapInit{
|
||||||
keys:keys
|
keys: keys
|
||||||
vals: vals
|
vals: vals
|
||||||
pos: p.tok.position()
|
pos: p.tok.position()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
name := p.check_name()
|
name := p.check_name()
|
||||||
|
mut fields := []string
|
||||||
|
mut vals := []ast.Expr
|
||||||
p.check(.pipe)
|
p.check(.pipe)
|
||||||
for {
|
for {
|
||||||
p.check_name()
|
fields << p.check_name()
|
||||||
p.check(.colon)
|
p.check(.colon)
|
||||||
p.expr(0)
|
expr,_ := p.expr(0)
|
||||||
|
vals << expr
|
||||||
if p.tok.kind == .comma {
|
if p.tok.kind == .comma {
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
}
|
}
|
||||||
|
@ -698,6 +704,8 @@ pub fn (p mut Parser) expr(precedence int) (ast.Expr,table.Type) {
|
||||||
}
|
}
|
||||||
node = ast.Assoc{
|
node = ast.Assoc{
|
||||||
name: name
|
name: name
|
||||||
|
fields: fields
|
||||||
|
exprs: vals
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.check(.rcbr)
|
p.check(.rcbr)
|
||||||
|
@ -1083,10 +1091,10 @@ fn (p mut Parser) if_expr() ast.Expr {
|
||||||
stmts: stmts
|
stmts: stmts
|
||||||
else_stmts: else_stmts
|
else_stmts: else_stmts
|
||||||
// typ: typ
|
// typ: typ
|
||||||
|
|
||||||
pos: pos
|
pos: pos
|
||||||
// left: left
|
// left: left
|
||||||
|
|
||||||
}
|
}
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
@ -1485,10 +1493,10 @@ fn (p mut Parser) var_decl() ast.VarDecl {
|
||||||
node := ast.VarDecl{
|
node := ast.VarDecl{
|
||||||
name: name
|
name: name
|
||||||
expr: expr // p.expr(token.lowest_prec)
|
expr: expr // p.expr(token.lowest_prec)
|
||||||
|
|
||||||
is_mut: is_mut
|
is_mut: is_mut
|
||||||
// typ: typ
|
// typ: typ
|
||||||
|
|
||||||
pos: p.tok.position()
|
pos: p.tok.position()
|
||||||
}
|
}
|
||||||
p.scope.register_var(node)
|
p.scope.register_var(node)
|
||||||
|
@ -1607,7 +1615,7 @@ fn (p mut Parser) match_expr() ast.Expr {
|
||||||
blocks: blocks
|
blocks: blocks
|
||||||
match_exprs: match_exprs
|
match_exprs: match_exprs
|
||||||
// typ: typ
|
// typ: typ
|
||||||
|
|
||||||
cond: cond
|
cond: cond
|
||||||
}
|
}
|
||||||
return node
|
return node
|
||||||
|
|
Loading…
Reference in New Issue