diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-04-23 18:28:46 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-04-23 18:35:21 -0700 |
| commit | b40a8efb9a72e69cd7e9061fc4c08d5e705b0fbd (patch) | |
| tree | b62377262318b6f6d76a0b75d43dff106e553a2f /src/value.zig | |
| parent | 183ee0965fac6322651666834776d9832cc95ddd (diff) | |
| download | zig-b40a8efb9a72e69cd7e9061fc4c08d5e705b0fbd.tar.gz zig-b40a8efb9a72e69cd7e9061fc4c08d5e705b0fbd.zip | |
stage2: implement `anyframe`, `anyframe->T` and fix assembly
* AstGen: implement `anyframe_literal` and `anyframe_type`.
* Introduce `makeSubBlock` to avoid redundant AstGen code for GenZir
scopes. Allows adding/removing a field without possibility of
accidentally introducing a bug of forgetting to set the new field.
* Add to GenZir `nosuspend_node` and `suspend_node` in preparation for
implementing `suspend` blocks and `nosuspend` blocks.
* AstGen: fix assembly to support clobbers, multiple outputs, and
outputs without `->` syntax.
- `asm` and `asm_volatile` move to `Extended` enum with `small` being
repurposed for a few things. This frees up 2 ZIR tags, 1 of which
is used in this commit and 1 is leftover.
* AstGen: fix `simple_types` incorrectly having multiple conflicting
values for "undefined" and "null".
- Also add "anyframe" to `simple_types`.
* Add `anyframe_type` to type.zig, value.zig and `Zir.Inst.Ref`.
- Also add i128 and u128 types to `Zir.Inst.Ref` and `simple_types`.
* Sema/Zir: Fix incorrect math causing the function body to be messed
up for Extended-encoded functions.
* Zir: support `i32` fields for "extra" payloads.
Diffstat (limited to 'src/value.zig')
| -rw-r--r-- | src/value.zig | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/value.zig b/src/value.zig index e1ca79332c..d2d7be3007 100644 --- a/src/value.zig +++ b/src/value.zig @@ -55,17 +55,10 @@ pub const Value = extern union { comptime_int_type, comptime_float_type, noreturn_type, + anyframe_type, null_type, undefined_type, - fn_noreturn_no_args_type, - fn_void_no_args_type, - fn_naked_noreturn_no_args_type, - fn_ccc_void_no_args_type, - single_const_pointer_to_comptime_int_type, - const_slice_u8_type, enum_literal_type, - manyptr_u8_type, - manyptr_const_u8_type, atomic_ordering_type, atomic_rmw_op_type, calling_convention_type, @@ -74,6 +67,14 @@ pub const Value = extern union { call_options_type, export_options_type, extern_options_type, + manyptr_u8_type, + manyptr_const_u8_type, + fn_noreturn_no_args_type, + fn_void_no_args_type, + fn_naked_noreturn_no_args_type, + fn_ccc_void_no_args_type, + single_const_pointer_to_comptime_int_type, + const_slice_u8_type, undef, zero, @@ -166,6 +167,7 @@ pub const Value = extern union { .fn_naked_noreturn_no_args_type, .fn_ccc_void_no_args_type, .single_const_pointer_to_comptime_int_type, + .anyframe_type, .const_slice_u8_type, .enum_literal_type, .undef, @@ -334,6 +336,7 @@ pub const Value = extern union { .fn_naked_noreturn_no_args_type, .fn_ccc_void_no_args_type, .single_const_pointer_to_comptime_int_type, + .anyframe_type, .const_slice_u8_type, .enum_literal_type, .undef, @@ -502,6 +505,7 @@ pub const Value = extern union { .fn_naked_noreturn_no_args_type => return out_stream.writeAll("fn() callconv(.Naked) noreturn"), .fn_ccc_void_no_args_type => return out_stream.writeAll("fn() callconv(.C) void"), .single_const_pointer_to_comptime_int_type => return out_stream.writeAll("*const comptime_int"), + .anyframe_type => return out_stream.writeAll("anyframe"), .const_slice_u8_type => return out_stream.writeAll("[]const u8"), .enum_literal_type => return out_stream.writeAll("@Type(.EnumLiteral)"), .manyptr_u8_type => return out_stream.writeAll("[*]u8"), @@ -633,6 +637,7 @@ pub const Value = extern union { .fn_naked_noreturn_no_args_type => Type.initTag(.fn_naked_noreturn_no_args), .fn_ccc_void_no_args_type => Type.initTag(.fn_ccc_void_no_args), .single_const_pointer_to_comptime_int_type => Type.initTag(.single_const_pointer_to_comptime_int), + .anyframe_type => Type.initTag(.@"anyframe"), .const_slice_u8_type => Type.initTag(.const_slice_u8), .enum_literal_type => Type.initTag(.enum_literal), .manyptr_u8_type => Type.initTag(.manyptr_u8), @@ -1070,6 +1075,7 @@ pub const Value = extern union { .fn_naked_noreturn_no_args_type, .fn_ccc_void_no_args_type, .single_const_pointer_to_comptime_int_type, + .anyframe_type, .const_slice_u8_type, .enum_literal_type, .ty, @@ -1338,6 +1344,7 @@ pub const Value = extern union { .fn_naked_noreturn_no_args_type, .fn_ccc_void_no_args_type, .single_const_pointer_to_comptime_int_type, + .anyframe_type, .const_slice_u8_type, .enum_literal_type, .manyptr_u8_type, |
