cgen: fix fixed array init assignment
parent
d2cf6894fe
commit
bb5034f3fe
|
@ -360,12 +360,21 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
mut is_fixed_array_init := false
|
||||||
|
match val {
|
||||||
|
ast.ArrayInit {
|
||||||
|
is_fixed_array_init = g.table.get_type_symbol(it.typ).kind == .array_fixed
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
}
|
||||||
if assign_stmt.op == .decl_assign {
|
if assign_stmt.op == .decl_assign {
|
||||||
g.write('$styp ')
|
g.write('$styp ')
|
||||||
}
|
}
|
||||||
g.expr(ident)
|
g.expr(ident)
|
||||||
g.write(' = ')
|
if !is_fixed_array_init {
|
||||||
g.expr(val)
|
g.write(' = ')
|
||||||
|
g.expr(val)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
}
|
}
|
||||||
|
@ -852,13 +861,13 @@ fn (g mut Gen) expr(node ast.Expr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (g mut Gen) infix_expr(it ast.InfixExpr) {
|
fn (g mut Gen) infix_expr(node ast.InfixExpr) {
|
||||||
// if it.left_type == table.string_type_idx {
|
// if it.left_type == table.string_type_idx {
|
||||||
// g.write('/*$it.left_type str*/')
|
// g.write('/*$node.left_type str*/')
|
||||||
// }
|
// }
|
||||||
// string + string, string == string etc
|
// string + string, string == string etc
|
||||||
if it.left_type == table.string_type_idx {
|
if node.left_type == table.string_type_idx {
|
||||||
fn_name := match it.op {
|
fn_name := match node.op {
|
||||||
.plus{
|
.plus{
|
||||||
'string_add('
|
'string_add('
|
||||||
}
|
}
|
||||||
|
@ -881,42 +890,42 @@ fn (g mut Gen) infix_expr(it ast.InfixExpr) {
|
||||||
'string_ge('
|
'string_ge('
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
'/*infix_expr error*/'}
|
'/*node error*/'}
|
||||||
}
|
}
|
||||||
g.write(fn_name)
|
g.write(fn_name)
|
||||||
g.expr(it.left)
|
g.expr(node.left)
|
||||||
g.write(', ')
|
g.write(', ')
|
||||||
g.expr(it.right)
|
g.expr(node.right)
|
||||||
g.write(')')
|
g.write(')')
|
||||||
}
|
}
|
||||||
else if it.op == .key_in {
|
else if node.op == .key_in {
|
||||||
styp := g.typ(it.left_type)
|
styp := g.typ(node.left_type)
|
||||||
g.write('_IN($styp, ')
|
g.write('_IN($styp, ')
|
||||||
g.expr(it.left)
|
g.expr(node.left)
|
||||||
g.write(', ')
|
g.write(', ')
|
||||||
g.expr(it.right)
|
g.expr(node.right)
|
||||||
g.write(')')
|
g.write(')')
|
||||||
}
|
}
|
||||||
// arr << val
|
// arr << val
|
||||||
else if it.op == .left_shift && g.table.get_type_symbol(it.left_type).kind == .array {
|
else if node.op == .left_shift && g.table.get_type_symbol(node.left_type).kind == .array {
|
||||||
sym := g.table.get_type_symbol(it.left_type)
|
sym := g.table.get_type_symbol(node.left_type)
|
||||||
info := sym.info as table.Array
|
info := sym.info as table.Array
|
||||||
elem_type_str := g.typ(info.elem_type)
|
elem_type_str := g.typ(info.elem_type)
|
||||||
// g.write('array_push(&')
|
// g.write('array_push(&')
|
||||||
tmp := g.new_tmp_var()
|
tmp := g.new_tmp_var()
|
||||||
g.write('_PUSH(&')
|
g.write('_PUSH(&')
|
||||||
g.expr(it.left)
|
g.expr(node.left)
|
||||||
g.write(', (')
|
g.write(', (')
|
||||||
g.expr(it.right)
|
g.expr(node.right)
|
||||||
g.write('), $tmp, $elem_type_str)')
|
g.write('), $tmp, $elem_type_str)')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// if it.op == .dot {
|
// if node.op == .dot {
|
||||||
// println('!! dot')
|
// println('!! dot')
|
||||||
// }
|
// }
|
||||||
g.expr(it.left)
|
g.expr(node.left)
|
||||||
g.write(' $it.op.str() ')
|
g.write(' $node.op.str() ')
|
||||||
g.expr(it.right)
|
g.expr(node.right)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue