vfmt: []xxx; mut args
parent
4f0d505c65
commit
d619944cf5
|
@ -153,6 +153,7 @@ mut:
|
||||||
name string
|
name string
|
||||||
args []Expr
|
args []Expr
|
||||||
is_c bool
|
is_c bool
|
||||||
|
muts []bool
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MethodCallExpr {
|
pub struct MethodCallExpr {
|
||||||
|
@ -162,6 +163,7 @@ pub:
|
||||||
expr Expr
|
expr Expr
|
||||||
name string
|
name string
|
||||||
args []Expr
|
args []Expr
|
||||||
|
muts []bool
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Return {
|
pub struct Return {
|
||||||
|
|
|
@ -252,18 +252,25 @@ fn (f &Fmt) type_to_str(t table.Type) string {
|
||||||
fn (f mut Fmt) expr(node ast.Expr) {
|
fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
match node {
|
match node {
|
||||||
ast.ArrayInit {
|
ast.ArrayInit {
|
||||||
// type_sym := f.table.get_type_symbol(it.typ)
|
// `x := []string`
|
||||||
f.write('[')
|
if it.exprs.len == 0 && it.typ != 0 {
|
||||||
for i, expr in it.exprs {
|
f.write(f.table.type_to_str(it.typ))
|
||||||
if i > 0 && it.exprs.len > 1 {
|
}
|
||||||
f.wrap_long_line()
|
// `[1,2,3]`
|
||||||
}
|
else {
|
||||||
f.expr(expr)
|
// type_sym := f.table.get_type_symbol(it.typ)
|
||||||
if i < it.exprs.len - 1 {
|
f.write('[')
|
||||||
f.write(', ')
|
for i, expr in it.exprs {
|
||||||
}
|
if i > 0 && it.exprs.len > 1 {
|
||||||
|
f.wrap_long_line()
|
||||||
|
}
|
||||||
|
f.expr(expr)
|
||||||
|
if i < it.exprs.len - 1 {
|
||||||
|
f.write(', ')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f.write(']')
|
||||||
}
|
}
|
||||||
f.write(']')
|
|
||||||
}
|
}
|
||||||
ast.AssignExpr {
|
ast.AssignExpr {
|
||||||
f.expr(it.left)
|
f.expr(it.left)
|
||||||
|
@ -294,6 +301,9 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
ast.CallExpr {
|
ast.CallExpr {
|
||||||
f.write('${it.name}(')
|
f.write('${it.name}(')
|
||||||
for i, expr in it.args {
|
for i, expr in it.args {
|
||||||
|
if it.muts[i] {
|
||||||
|
f.write('mut ')
|
||||||
|
}
|
||||||
f.expr(expr)
|
f.expr(expr)
|
||||||
if i != it.args.len - 1 {
|
if i != it.args.len - 1 {
|
||||||
f.write(', ')
|
f.write(', ')
|
||||||
|
@ -383,6 +393,9 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
f.expr(it.expr)
|
f.expr(it.expr)
|
||||||
f.write('.' + it.name + '(')
|
f.write('.' + it.name + '(')
|
||||||
for i, arg in it.args {
|
for i, arg in it.args {
|
||||||
|
if it.muts[i] {
|
||||||
|
f.write('mut ')
|
||||||
|
}
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
f.wrap_long_line()
|
f.wrap_long_line()
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,13 @@ pub fn (p mut Parser) call_expr(is_c bool, mod string) ast.CallExpr {
|
||||||
name := p.check_name()
|
name := p.check_name()
|
||||||
fn_name := if mod.len > 0 { '${mod}.$name' } else { name }
|
fn_name := if mod.len > 0 { '${mod}.$name' } else { name }
|
||||||
p.check(.lpar)
|
p.check(.lpar)
|
||||||
args := p.call_args()
|
args, muts := p.call_args()
|
||||||
node := ast.CallExpr{
|
node := ast.CallExpr{
|
||||||
name: fn_name
|
name: fn_name
|
||||||
args: args
|
args: args
|
||||||
|
muts: muts
|
||||||
// tok: tok
|
// tok: tok
|
||||||
|
|
||||||
pos: tok.position()
|
pos: tok.position()
|
||||||
is_c: is_c
|
is_c: is_c
|
||||||
}
|
}
|
||||||
|
@ -29,11 +30,16 @@ pub fn (p mut Parser) call_expr(is_c bool, mod string) ast.CallExpr {
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (p mut Parser) call_args() []ast.Expr {
|
pub fn (p mut Parser) call_args() ([]ast.Expr, []bool) {
|
||||||
mut args := []ast.Expr
|
mut args := []ast.Expr
|
||||||
|
mut muts := []bool
|
||||||
for p.tok.kind != .rpar {
|
for p.tok.kind != .rpar {
|
||||||
if p.tok.kind == .key_mut {
|
if p.tok.kind == .key_mut {
|
||||||
p.check(.key_mut)
|
p.check(.key_mut)
|
||||||
|
muts << true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
muts << false
|
||||||
}
|
}
|
||||||
e,_ := p.expr(0)
|
e,_ := p.expr(0)
|
||||||
args << e
|
args << e
|
||||||
|
@ -42,7 +48,7 @@ pub fn (p mut Parser) call_args() []ast.Expr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
return args // ,table.void_ti
|
return args, muts
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) fn_decl() ast.FnDecl {
|
fn (p mut Parser) fn_decl() ast.FnDecl {
|
||||||
|
|
|
@ -57,7 +57,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()
|
||||||
|
@ -333,7 +333,7 @@ pub fn (p mut Parser) stmt() ast.Stmt {
|
||||||
return ast.ExprStmt{
|
return ast.ExprStmt{
|
||||||
expr: expr
|
expr: expr
|
||||||
// typ: typ
|
// typ: typ
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -632,7 +632,7 @@ pub fn (p mut Parser) name_expr() ast.Expr {
|
||||||
p.expr_mod = ''
|
p.expr_mod = ''
|
||||||
return ast.EnumVal{
|
return ast.EnumVal{
|
||||||
enum_name: enum_name // lp.prepend_mod(enum_name)
|
enum_name: enum_name // lp.prepend_mod(enum_name)
|
||||||
|
|
||||||
val: val
|
val: val
|
||||||
pos: p.tok.position()
|
pos: p.tok.position()
|
||||||
}
|
}
|
||||||
|
@ -894,7 +894,7 @@ fn (p mut Parser) dot_expr(left ast.Expr, left_type table.Type) ast.Expr {
|
||||||
// Method call
|
// Method call
|
||||||
if p.tok.kind == .lpar {
|
if p.tok.kind == .lpar {
|
||||||
p.next()
|
p.next()
|
||||||
args := p.call_args()
|
args,muts := p.call_args()
|
||||||
if p.tok.kind == .key_orelse {
|
if p.tok.kind == .key_orelse {
|
||||||
p.next()
|
p.next()
|
||||||
p.parse_block()
|
p.parse_block()
|
||||||
|
@ -903,6 +903,7 @@ fn (p mut Parser) dot_expr(left ast.Expr, left_type table.Type) ast.Expr {
|
||||||
expr: left
|
expr: left
|
||||||
name: field_name
|
name: field_name
|
||||||
args: args
|
args: args
|
||||||
|
muts:muts
|
||||||
pos: p.tok.position()
|
pos: p.tok.position()
|
||||||
}
|
}
|
||||||
mut node := ast.Expr{}
|
mut node := ast.Expr{}
|
||||||
|
@ -1178,11 +1179,11 @@ 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
|
||||||
has_else: has_else
|
has_else: has_else
|
||||||
// left: left
|
// left: left
|
||||||
|
|
||||||
}
|
}
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
@ -1603,10 +1604,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)
|
||||||
|
@ -1725,7 +1726,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