aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-07-29 19:32:49 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-07-29 19:32:49 -0400
commitdbdc4d62d08c94a967b36afdfa57b126775a4eee (patch)
treeb6ffd56af7b37257c7dd165001ca88cb80990fc4 /src/analyze.cpp
parentee64a22045ccbc39773779d4e386e25f563c8a90 (diff)
downloadzig-dbdc4d62d08c94a967b36afdfa57b126775a4eee.tar.gz
zig-dbdc4d62d08c94a967b36afdfa57b126775a4eee.zip
improve support for anyframe and anyframe->T
* add implicit cast from `*@Frame(func)` to `anyframe->T` or `anyframe`. * add implicit cast from `anyframe->T` to `anyframe`. * `resume` works on `anyframe->T` and `anyframe` types.
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index e47be8f14c..c117409445 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -7348,19 +7348,13 @@ static void resolve_llvm_types_fn_type(CodeGen *g, ZigType *fn_type) {
if (is_async) {
fn_type->data.fn.gen_param_info = allocate<FnGenParamInfo>(1);
- ZigType *frame_type = g->builtin_types.entry_frame_header;
- Error err;
- if ((err = type_resolve(g, frame_type, ResolveStatusSizeKnown))) {
- zig_unreachable();
- }
- ZigType *ptr_type = get_pointer_to_type(g, frame_type, false);
- gen_param_types.append(get_llvm_type(g, ptr_type));
- param_di_types.append(get_llvm_di_type(g, ptr_type));
+ ZigType *frame_type = get_any_frame_type(g, fn_type_id->return_type);
+ gen_param_types.append(get_llvm_type(g, frame_type));
+ param_di_types.append(get_llvm_di_type(g, frame_type));
fn_type->data.fn.gen_param_info[0].src_index = 0;
fn_type->data.fn.gen_param_info[0].gen_index = 0;
- fn_type->data.fn.gen_param_info[0].type = ptr_type;
-
+ fn_type->data.fn.gen_param_info[0].type = frame_type;
} else {
fn_type->data.fn.gen_param_info = allocate<FnGenParamInfo>(fn_type_id->param_count);
for (size_t i = 0; i < fn_type_id->param_count; i += 1) {