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