parent
13b2aa701c
commit
d329e1decd
|
@ -157,7 +157,8 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
||||||
g.empty_line = true
|
g.empty_line = true
|
||||||
noscan := g.check_noscan(ret_info.elem_type)
|
noscan := g.check_noscan(ret_info.elem_type)
|
||||||
g.writeln('$ret_typ $tmp = __new_array${noscan}(0, 0, sizeof($ret_elem_type));')
|
g.writeln('$ret_typ $tmp = __new_array${noscan}(0, 0, sizeof($ret_elem_type));')
|
||||||
if g.infix_left_var_name.len > 0 {
|
has_infix_left_var_name := g.infix_left_var_name.len > 0
|
||||||
|
if has_infix_left_var_name {
|
||||||
g.writeln('if ($g.infix_left_var_name) {')
|
g.writeln('if ($g.infix_left_var_name) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
}
|
}
|
||||||
|
@ -215,7 +216,7 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
if g.infix_left_var_name.len > 0 {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
}
|
}
|
||||||
|
@ -348,7 +349,8 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
||||||
g.empty_line = true
|
g.empty_line = true
|
||||||
noscan := g.check_noscan(info.elem_type)
|
noscan := g.check_noscan(info.elem_type)
|
||||||
g.writeln('$styp $tmp = __new_array${noscan}(0, 0, sizeof($elem_type_str));')
|
g.writeln('$styp $tmp = __new_array${noscan}(0, 0, sizeof($elem_type_str));')
|
||||||
if g.infix_left_var_name.len > 0 {
|
has_infix_left_var_name := g.infix_left_var_name.len > 0
|
||||||
|
if has_infix_left_var_name {
|
||||||
g.writeln('if ($g.infix_left_var_name) {')
|
g.writeln('if ($g.infix_left_var_name) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
}
|
}
|
||||||
|
@ -407,7 +409,7 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
if g.infix_left_var_name.len > 0 {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
}
|
}
|
||||||
|
@ -640,7 +642,8 @@ fn (mut g Gen) gen_array_any(node ast.CallExpr) {
|
||||||
elem_type_str := g.typ(info.elem_type)
|
elem_type_str := g.typ(info.elem_type)
|
||||||
g.empty_line = true
|
g.empty_line = true
|
||||||
g.writeln('bool $tmp = false;')
|
g.writeln('bool $tmp = false;')
|
||||||
if g.infix_left_var_name.len > 0 {
|
has_infix_left_var_name := g.infix_left_var_name.len > 0
|
||||||
|
if has_infix_left_var_name {
|
||||||
g.writeln('if ($g.infix_left_var_name) {')
|
g.writeln('if ($g.infix_left_var_name) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
}
|
}
|
||||||
|
@ -699,7 +702,7 @@ fn (mut g Gen) gen_array_any(node ast.CallExpr) {
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
if g.infix_left_var_name.len > 0 {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
}
|
}
|
||||||
|
@ -722,7 +725,8 @@ fn (mut g Gen) gen_array_all(node ast.CallExpr) {
|
||||||
elem_type_str := g.typ(info.elem_type)
|
elem_type_str := g.typ(info.elem_type)
|
||||||
g.empty_line = true
|
g.empty_line = true
|
||||||
g.writeln('bool $tmp = true;')
|
g.writeln('bool $tmp = true;')
|
||||||
if g.infix_left_var_name.len > 0 {
|
has_infix_left_var_name := g.infix_left_var_name.len > 0
|
||||||
|
if has_infix_left_var_name {
|
||||||
g.writeln('if ($g.infix_left_var_name) {')
|
g.writeln('if ($g.infix_left_var_name) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
}
|
}
|
||||||
|
@ -782,7 +786,7 @@ fn (mut g Gen) gen_array_all(node ast.CallExpr) {
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
}
|
}
|
||||||
if g.infix_left_var_name.len > 0 {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
}
|
}
|
||||||
|
|
|
@ -646,7 +646,7 @@ fn (mut g Gen) need_tmp_var_in_array_call(node ast.Expr) bool {
|
||||||
// infix_expr_and_or_op generates code for `&&` and `||`
|
// infix_expr_and_or_op generates code for `&&` and `||`
|
||||||
fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
|
fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
|
||||||
if node.right is ast.IfExpr {
|
if node.right is ast.IfExpr {
|
||||||
// b := a && if true { a = false ...} else {...}
|
// `b := a && if true { a = false ...} else {...}`
|
||||||
prev_inside_ternary := g.inside_ternary
|
prev_inside_ternary := g.inside_ternary
|
||||||
g.inside_ternary = 0
|
g.inside_ternary = 0
|
||||||
if g.need_tmp_var_in_if(node.right) {
|
if g.need_tmp_var_in_if(node.right) {
|
||||||
|
@ -666,11 +666,15 @@ fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
|
||||||
}
|
}
|
||||||
g.inside_ternary = prev_inside_ternary
|
g.inside_ternary = prev_inside_ternary
|
||||||
} else if g.need_tmp_var_in_array_call(node.right) {
|
} else if g.need_tmp_var_in_array_call(node.right) {
|
||||||
// if a == 0 || arr.any(it.is_letter())
|
// `if a == 0 || arr.any(it.is_letter()) {...}`
|
||||||
tmp := g.new_tmp_var()
|
tmp := g.new_tmp_var()
|
||||||
cur_line := g.go_before_stmt(0).trim_space()
|
cur_line := g.go_before_stmt(0).trim_space()
|
||||||
g.empty_line = true
|
g.empty_line = true
|
||||||
g.write('bool $tmp = (')
|
if g.infix_left_var_name.len > 0 {
|
||||||
|
g.write('bool $tmp = (($g.infix_left_var_name) $node.op.str() ')
|
||||||
|
} else {
|
||||||
|
g.write('bool $tmp = (')
|
||||||
|
}
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(');')
|
g.writeln(');')
|
||||||
g.stmt_path_pos << g.out.len
|
g.stmt_path_pos << g.out.len
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
fn test_if_expr_with_nested_array_call1() {
|
||||||
|
arr := ['']
|
||||||
|
if arr.len == 1 || (arr[1] == '' && arr.all(it[0].is_letter())) {
|
||||||
|
println('yes')
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_if_expr_with_nested_array_call2() {
|
||||||
|
arr := ['abc']
|
||||||
|
if (arr.len == 1 && arr.all(it.len > 0 && it.bytes().any(it == `b`))) || arr[1] == '' {
|
||||||
|
println('yes')
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue