aboutsummaryrefslogtreecommitdiff
path: root/src/Module.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2021-03-22 14:54:13 +0100
committerIsaac Freund <ifreund@ifreund.xyz>2021-03-22 14:54:13 +0100
commit8111453cc12f7908110850cf64efedb9c69ede98 (patch)
tree80c6774eda1c73f3b45e04989840f734756d7b19 /src/Module.zig
parent4f3071a8172b1e5d0aa22c07471de2056df1608a (diff)
downloadzig-8111453cc12f7908110850cf64efedb9c69ede98.tar.gz
zig-8111453cc12f7908110850cf64efedb9c69ede98.zip
astgen: implement array types
Diffstat (limited to 'src/Module.zig')
-rw-r--r--src/Module.zig26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/Module.zig b/src/Module.zig
index c89ffadcc1..5fcdd8c6f1 100644
--- a/src/Module.zig
+++ b/src/Module.zig
@@ -1210,6 +1210,32 @@ pub const Scope = struct {
return new_index + gz.zir_code.ref_start_index;
}
+ pub fn addArrayTypeSentinel(
+ gz: *GenZir,
+ len: zir.Inst.Ref,
+ sentinel: zir.Inst.Ref,
+ elem_type: zir.Inst.Ref,
+ ) !zir.Inst.Ref {
+ const gpa = gz.zir_code.gpa;
+ try gz.instructions.ensureCapacity(gpa, gz.instructions.items.len + 1);
+ try gz.zir_code.instructions.ensureCapacity(gpa, gz.zir_code.instructions.len + 1);
+
+ const payload_index = try gz.zir_code.addExtra(zir.Inst.ArrayTypeSentinel{
+ .sentinel = sentinel,
+ .elem_type = elem_type,
+ });
+ const new_index = @intCast(zir.Inst.Index, gz.zir_code.instructions.len);
+ gz.zir_code.instructions.appendAssumeCapacity(.{
+ .tag = .array_type_sentinel,
+ .data = .{ .array_type_sentinel = .{
+ .len = len,
+ .payload_index = payload_index,
+ } },
+ });
+ gz.instructions.appendAssumeCapacity(new_index);
+ return new_index + gz.zir_code.ref_start_index;
+ }
+
pub fn addUnTok(
gz: *GenZir,
tag: zir.Inst.Tag,