@@ -959,47 +959,7 @@ fn (mut g Gen) need_tmp_var_in_array_call(node ast.Expr) bool {
959
959
960
960
// infix_expr_and_or_op generates code for `&&` and `||`
961
961
fn (mut g Gen) infix_expr_and_or_op (node ast.InfixExpr) {
962
- if node.right is ast.IfExpr {
963
- // `b := a && if true { a = false ...} else {...}`
964
- prev_inside_ternary := g.inside_ternary
965
- g.inside_ternary = 0
966
- if g.need_tmp_var_in_if (node.right) {
967
- tmp := g.new_tmp_var ()
968
- cur_line := g.go_before_last_stmt ().trim_space ()
969
- g.empty_line = true
970
- g.write ('bool ${tmp} = (' )
971
- g.expr (node.left)
972
- g.writeln (');' )
973
- g.set_current_pos_as_last_stmt_pos ()
974
- g.write ('${cur_line} ${tmp} ${node.op.str()} ' )
975
- g.infix_left_var_name = if node.op == .and { tmp } else { '!${tmp} ' }
976
- g.expr (node.right)
977
- g.infix_left_var_name = ''
978
- g.inside_ternary = prev_inside_ternary
979
- return
980
- }
981
- g.inside_ternary = prev_inside_ternary
982
- } else if node.right is ast.MatchExpr {
983
- // `b := a && match true { true { a = false ...} else {...}}`
984
- prev_inside_ternary := g.inside_ternary
985
- g.inside_ternary = 0
986
- if g.need_tmp_var_in_match (node.right) {
987
- tmp := g.new_tmp_var ()
988
- cur_line := g.go_before_last_stmt ().trim_space ()
989
- g.empty_line = true
990
- g.write ('bool ${tmp} = (' )
991
- g.expr (node.left)
992
- g.writeln (');' )
993
- g.set_current_pos_as_last_stmt_pos ()
994
- g.write ('${cur_line} ${tmp} ${node.op.str()} ' )
995
- g.infix_left_var_name = if node.op == .and { tmp } else { '!${tmp} ' }
996
- g.expr (node.right)
997
- g.infix_left_var_name = ''
998
- g.inside_ternary = prev_inside_ternary
999
- return
1000
- }
1001
- g.inside_ternary = prev_inside_ternary
1002
- } else if g.need_tmp_var_in_array_call (node.right) {
962
+ if g.need_tmp_var_in_array_call (node.right) {
1003
963
// `if a == 0 || arr.any(it.is_letter()) {...}`
1004
964
tmp := g.new_tmp_var ()
1005
965
cur_line := g.go_before_last_stmt ().trim_space ()
@@ -1016,48 +976,7 @@ fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
1016
976
g.infix_left_var_name = if node.op == .and { tmp } else { '!${tmp} ' }
1017
977
g.expr (node.right)
1018
978
g.infix_left_var_name = ''
1019
- return
1020
- } else if node.right is ast.CallExpr {
1021
- if node.right.or_block.kind != .absent {
1022
- prev_inside_ternary := g.inside_ternary
1023
- g.inside_ternary = 0
1024
- tmp := g.new_tmp_var ()
1025
- cur_line := g.go_before_last_stmt ().trim_space ()
1026
- g.empty_line = true
1027
- g.write ('bool ${tmp} = (' )
1028
- g.expr (node.left)
1029
- g.writeln (');' )
1030
- g.set_current_pos_as_last_stmt_pos ()
1031
- g.write ('${cur_line} ${tmp} ${node.op.str()} ' )
1032
- g.infix_left_var_name = if node.op == .and { tmp } else { '!${tmp} ' }
1033
- g.expr (node.right)
1034
- g.infix_left_var_name = ''
1035
- g.inside_ternary = prev_inside_ternary
1036
- return
1037
- }
1038
- } else if node.right is ast.PrefixExpr && g.inside_ternary == 0 {
1039
- prefix := node.right
1040
- if prefix.op == .not && prefix.right is ast.CallExpr {
1041
- call_expr := prefix.right as ast.CallExpr
1042
- if call_expr.or_block.kind != .absent {
1043
- prev_inside_ternary := g.inside_ternary
1044
- g.inside_ternary = 0
1045
- tmp := g.new_tmp_var ()
1046
- cur_line := g.go_before_last_stmt ().trim_space ()
1047
- g.empty_line = true
1048
- g.write ('bool ${tmp} = (' )
1049
- g.expr (node.left)
1050
- g.writeln (');' )
1051
- g.set_current_pos_as_last_stmt_pos ()
1052
- g.write ('${cur_line} ${tmp} ${node.op.str()} ' )
1053
- g.infix_left_var_name = '!${tmp} '
1054
- g.expr (node.right)
1055
- g.infix_left_var_name = ''
1056
- g.inside_ternary = prev_inside_ternary
1057
- return
1058
- }
1059
- }
1060
- } else if node.right is ast.InfixExpr && g.need_tmp_var_in_expr (node.right) {
979
+ } else if g.need_tmp_var_in_expr (node.right) && g.inside_ternary == 0 {
1061
980
prev_inside_ternary := g.inside_ternary
1062
981
g.inside_ternary = 0
1063
982
tmp := g.new_tmp_var ()
@@ -1072,9 +991,9 @@ fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
1072
991
g.expr (node.right)
1073
992
g.infix_left_var_name = ''
1074
993
g.inside_ternary = prev_inside_ternary
1075
- return
994
+ } else {
995
+ g.gen_plain_infix_expr (node)
1076
996
}
1077
- g.gen_plain_infix_expr (node)
1078
997
}
1079
998
1080
999
fn (mut g Gen) gen_is_none_check (node ast.InfixExpr) {
0 commit comments