diff options
| author | Vexu <git@vexu.eu> | 2020-11-17 21:33:26 +0200 |
|---|---|---|
| committer | Vexu <git@vexu.eu> | 2020-11-18 00:52:56 +0200 |
| commit | bace1181b2f6d63e51b6e511aa8318481e2eafee (patch) | |
| tree | 9b39b68f01cebd79808f051b6f6bc5e85491ca40 /src/astgen.zig | |
| parent | c1e19f4c0a62047c26d5baabe25887e533cc739f (diff) | |
| download | zig-bace1181b2f6d63e51b6e511aa8318481e2eafee.tar.gz zig-bace1181b2f6d63e51b6e511aa8318481e2eafee.zip | |
stage2: handle opaque containers
Diffstat (limited to 'src/astgen.zig')
| -rw-r--r-- | src/astgen.zig | 14 |
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); |
