From 486f2153e84f2b82ddffc601de75289cddb9c942 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 5 Apr 2025 02:13:24 -0400 Subject: Misc fixes --- src/compile.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/compile.c') diff --git a/src/compile.c b/src/compile.c index 21091489..c7e02b3f 100644 --- a/src/compile.c +++ b/src/compile.c @@ -619,6 +619,12 @@ static CORD compile_binary_op(env_t *env, ast_t *ast) } if (ast->tag == Or && lhs_t->tag == OptionalType) { + if (rhs_t->tag == AbortType || rhs_t->tag == ReturnType) { + return CORD_all("({ ", compile_declaration(lhs_t, "lhs"), " = ", compile(env, binop.lhs), "; ", + "if (", check_none(lhs_t, "lhs"), ") ", compile_statement(env, binop.rhs), " ", + optional_into_nonnone(lhs_t, "lhs"), "; })"); + } + if (is_incomplete_type(rhs_t)) { type_t *complete = most_complete_type(rhs_t, Match(lhs_t, OptionalType)->type); if (complete == NULL) @@ -626,11 +632,7 @@ static CORD compile_binary_op(env_t *env, ast_t *ast) rhs_t = complete; } - if (rhs_t->tag == AbortType || rhs_t->tag == ReturnType) { - return CORD_all("({ ", compile_declaration(lhs_t, "lhs"), " = ", compile(env, binop.lhs), "; ", - "if (", check_none(lhs_t, "lhs"), ") ", compile_statement(env, binop.rhs), " ", - optional_into_nonnone(lhs_t, "lhs"), "; })"); - } else if (rhs_t->tag == OptionalType && type_eq(lhs_t, rhs_t)) { + if (rhs_t->tag == OptionalType && type_eq(lhs_t, rhs_t)) { return CORD_all("({ ", compile_declaration(lhs_t, "lhs"), " = ", compile(env, binop.lhs), "; ", check_none(lhs_t, "lhs"), " ? ", compile(env, binop.rhs), " : lhs; })"); } else if (rhs_t->tag != OptionalType && type_eq(Match(lhs_t, OptionalType)->type, rhs_t)) { -- cgit v1.2.3