aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 336aded82c..cbd1955839 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -4149,9 +4149,15 @@ static LLVMValueRef ir_render_frame_address(CodeGen *g, IrExecutable *executable
static LLVMValueRef ir_render_handle(CodeGen *g, IrExecutable *executable,
IrInstructionHandle *instruction)
{
- // @andrewrk, not sure what to place here ?
- // `get_promise_frame_type` ?
- LLVMValueRef handle = LLVMConstNull(g->builtin_types.entry_promise->type_ref);
+
+ bool is_async = executable->fn_entry != nullptr &&
+ executable->fn_entry->type_entry->data.fn.fn_type_id.cc == CallingConventionAsync;
+
+ if (!is_async || !executable->coro_handle) {
+ return LLVMConstNull(g->builtin_types.entry_promise->type_ref);
+ }
+
+ LLVMValueRef handle = ir_llvm_value(g, executable->coro_handle);
return LLVMBuildRet(g->builder, handle);
}