aboutsummaryrefslogtreecommitdiff
path: root/src/astgen.zig
diff options
context:
space:
mode:
authorVexu <git@vexu.eu>2020-11-17 21:33:26 +0200
committerVexu <git@vexu.eu>2020-11-18 00:52:56 +0200
commitbace1181b2f6d63e51b6e511aa8318481e2eafee (patch)
tree9b39b68f01cebd79808f051b6f6bc5e85491ca40 /src/astgen.zig
parentc1e19f4c0a62047c26d5baabe25887e533cc739f (diff)
downloadzig-bace1181b2f6d63e51b6e511aa8318481e2eafee.tar.gz
zig-bace1181b2f6d63e51b6e511aa8318481e2eafee.zip
stage2: handle opaque containers
Diffstat (limited to 'src/astgen.zig')
-rw-r--r--src/astgen.zig14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/astgen.zig b/src/astgen.zig
index 37436373f0..a95fbbe06b 100644
--- a/src/astgen.zig
+++ b/src/astgen.zig
@@ -913,7 +913,19 @@ fn containerDecl(mod: *Module, scope: *Scope, rl: ResultLoc, node: *ast.Node.Con
};
break :blk Type.initPayload(&union_type.base);
},
- .Keyword_opaque => return mod.fail(scope, src, "TODO opaque containers", .{}),
+ .Keyword_opaque => blk: {
+ if (fields.items.len > 0) {
+ return mod.fail(scope, fields.items[0].src, "opaque types cannot have fields", .{});
+ }
+ const opaque_type = try arena.create(Type.Payload.Opaque);
+ opaque_type.* = .{
+ .scope = .{
+ .file_scope = scope.getFileScope(),
+ .ty = Type.initPayload(&opaque_type.base),
+ },
+ };
+ break :blk Type.initPayload(&opaque_type.base);
+ },
else => unreachable,
};
const type_payload = try arena.create(Value.Payload.Ty);