aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-04-19 21:45:04 +0100
committergingerBill <bill@gingerbill.org>2020-04-19 21:45:04 +0100
commit97f7a558faaf206bb7d10eaf3adce99322fd9541 (patch)
tree2a3e8f91525692f14de4064751efae62699f10bb /src/llvm_backend.cpp
parent2c91c21021e1c4d1d675ee430e0d7ccf88e882be (diff)
`#optional_ok` tag for procedures
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index b03f195b9..cc6eccff6 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -8903,7 +8903,13 @@ lbValue lb_build_expr(lbProcedure *p, Ast *expr) {
case_end;
case_ast_node(ce, CallExpr, expr);
- return lb_build_call_expr(p, expr);
+ lbValue res = lb_build_call_expr(p, expr);
+ if (ce->optional_ok_one) { // TODO(bill): Minor hack for #optional_ok procedures
+ GB_ASSERT(is_type_tuple(res.type));
+ GB_ASSERT(res.type->Tuple.variables.count == 2);
+ return lb_emit_struct_ev(p, res, 0);
+ }
+ return res;
case_end;
case_ast_node(se, SliceExpr, expr);