diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-11-24 16:49:26 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-11-24 16:49:26 -0500 |
| commit | a38161179b7cfc925b4d16bd042f2b1754dca7fd (patch) | |
| tree | d51564fdfb514d2f1cea6e89d8f57cec85a92338 /compile.c | |
| parent | 52de4258e9e973f453909176b20bebead2f86dd6 (diff) | |
Cleaner None-handling
Diffstat (limited to 'compile.c')
| -rw-r--r-- | compile.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -2064,10 +2064,22 @@ CORD compile(env_t *env, ast_t *ast) } } - bool lhs_is_optional_num = (lhs_t->tag == OptionalType && Match(lhs_t, OptionalType)->type->tag == NumType); + type_t *non_optional_lhs = lhs_t; + if (lhs_t->tag == OptionalType) non_optional_lhs = Match(lhs_t, OptionalType)->type; + type_t *non_optional_rhs = rhs_t; + if (rhs_t->tag == OptionalType) non_optional_rhs = Match(rhs_t, OptionalType)->type; + + if (!non_optional_lhs && !non_optional_rhs) + code_err(ast, "Both of these values do not specify a type"); + else if (!non_optional_lhs) + non_optional_lhs = non_optional_rhs; + else if (!non_optional_rhs) + non_optional_rhs = non_optional_lhs; + + bool lhs_is_optional_num = (lhs_t->tag == OptionalType && non_optional_lhs->tag == NumType); if (lhs_is_optional_num) lhs_t = Match(lhs_t, OptionalType)->type; - bool rhs_is_optional_num = (rhs_t->tag == OptionalType && Match(rhs_t, OptionalType)->type->tag == NumType); + bool rhs_is_optional_num = (rhs_t->tag == OptionalType && non_optional_rhs->tag == NumType); if (rhs_is_optional_num) rhs_t = Match(rhs_t, OptionalType)->type; |
