diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-04-05 02:03:08 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-04-05 02:03:08 -0400 |
| commit | 81316e0d9704834a0a648cf84401b968933b7581 (patch) | |
| tree | d6c23c32a896abd93826f357c318631156df526e /src/typecheck.c | |
| parent | e2ddd23b55bd51bd382ebc9b8d3094632472bf67 (diff) | |
Fix comparison with integer literals
Diffstat (limited to 'src/typecheck.c')
| -rw-r--r-- | src/typecheck.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/src/typecheck.c b/src/typecheck.c index 85f159c9..1bef98c8 100644 --- a/src/typecheck.c +++ b/src/typecheck.c @@ -1149,22 +1149,14 @@ type_t *get_type(env_t *env, ast_t *ast) } code_err(ast, "I couldn't figure out how to do `xor` between ", type_to_str(lhs_t), " and ", type_to_str(rhs_t)); } - case Compare: { - binary_operands_t binop = BINARY_OPERANDS(ast); - type_t *lhs_t = get_type(env, binop.lhs); - type_t *rhs_t = get_type(env, binop.rhs); - - if (can_promote(rhs_t, lhs_t) || can_promote(lhs_t, rhs_t)) - return Type(IntType, .bits=TYPE_IBITS32); - - code_err(ast, "I don't know how to compare ", type_to_str(lhs_t), " and ", type_to_str(rhs_t)); - } + case Compare: case Equals: case NotEquals: case LessThan: case LessThanOrEquals: case GreaterThan: case GreaterThanOrEquals: { binary_operands_t binop = BINARY_OPERANDS(ast); type_t *lhs_t = get_type(env, binop.lhs); type_t *rhs_t = get_type(env, binop.rhs); + if (can_promote(rhs_t, lhs_t) || can_promote(lhs_t, rhs_t)) - return Type(BoolType); + return ast->tag == Compare ? Type(IntType, .bits=TYPE_IBITS32) : Type(BoolType); code_err(ast, "I don't know how to compare ", type_to_str(lhs_t), " and ", type_to_str(rhs_t)); } |
