diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 4912172e0f..faa255a5e3 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -3029,10 +3029,13 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } else { left_type } - if node.op in [.key_is, .not_is] { + op_is_key_is_or_not_is := node.op in [.key_is, .not_is] + if op_is_key_is_or_not_is { g.is_expr(node) return } + op_is_key_in_or_not_in := node.op in [.key_in, .not_in] + op_is_eq_or_ne := node.op in [.eq, .ne] right_sym := g.table.get_type_symbol(node.right_type) has_eq_overloaded := !left_sym.has_method('==') unaliased_right := if right_sym.info is table.Alias { @@ -3040,7 +3043,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } else { node.right_type } - if unaliased_left == table.ustring_type_idx && node.op != .key_in && node.op != .not_in { + if unaliased_left == table.ustring_type_idx && !op_is_key_in_or_not_in { fn_name := match node.op { .plus { 'ustring_add(' @@ -3073,7 +3076,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { g.write(', ') g.expr(node.right) g.write(')') - } else if unaliased_left == table.string_type_idx && node.op !in [.key_in, .not_in] { + } else if unaliased_left == table.string_type_idx && !op_is_key_in_or_not_in { // `str == ''` -> `str.len == 0` optimization if node.op in [.eq, .ne] && node.right is ast.StringLiteral && (node.right as ast.StringLiteral).val == '' { @@ -3116,7 +3119,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { g.expr(node.right) g.write(')') } - } else if node.op in [.eq, .ne] && left_sym.kind == .array && right_sym.kind == .array { + } else if op_is_eq_or_ne && left_sym.kind == .array && right_sym.kind == .array { ptr_typ := g.gen_array_equality_fn(left_type) if node.op == .ne { g.write('!') @@ -3132,8 +3135,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } g.expr(node.right) g.write(')') - } else if node.op in [.eq, .ne] && left_sym.kind == .array_fixed - && right_sym.kind == .array_fixed { + } else if op_is_eq_or_ne && left_sym.kind == .array_fixed && right_sym.kind == .array_fixed { ptr_typ := g.gen_fixed_array_equality_fn(left_type) if node.op == .ne { g.write('!') @@ -3154,7 +3156,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } g.expr(node.right) g.write(')') - } else if node.op in [.eq, .ne] && left_sym.kind == .alias && right_sym.kind == .alias { + } else if op_is_eq_or_ne && left_sym.kind == .alias && right_sym.kind == .alias { ptr_typ := g.gen_alias_equality_fn(left_type) if node.op == .eq { g.write('${ptr_typ}_alias_eq(') @@ -3171,7 +3173,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } g.expr(node.right) g.write(')') - } else if node.op in [.eq, .ne] && left_sym.kind == .map && right_sym.kind == .map { + } else if op_is_eq_or_ne && left_sym.kind == .map && right_sym.kind == .map { ptr_typ := g.gen_map_equality_fn(left_type) if node.op == .eq { g.write('${ptr_typ}_map_eq(') @@ -3188,7 +3190,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } g.expr(node.right) g.write(')') - } else if node.op in [.eq, .ne] && left_sym.kind == .struct_ && right_sym.kind == .struct_ { + } else if op_is_eq_or_ne && left_sym.kind == .struct_ && right_sym.kind == .struct_ { if !has_eq_overloaded { // Define `==` as negation of Autogenerated `!=` styp := g.typ(left_type) @@ -3217,7 +3219,7 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } g.expr(node.right) g.write(')') - } else if node.op in [.key_in, .not_in] { + } else if op_is_key_in_or_not_in { if node.op == .not_in { g.write('!') }