mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
parent
ea48f06fc2
commit
5d28d171df
10
src/Sema.zig
10
src/Sema.zig
@ -22475,7 +22475,10 @@ fn fieldVal(
|
||||
} else (try sema.mod.getErrorValue(field_name)).key;
|
||||
|
||||
return sema.addConstant(
|
||||
try child_type.copy(arena),
|
||||
if (!child_type.isAnyError())
|
||||
try child_type.copy(arena)
|
||||
else
|
||||
try Type.Tag.error_set_single.create(arena, name),
|
||||
try Value.Tag.@"error".create(arena, .{ .name = name }),
|
||||
);
|
||||
},
|
||||
@ -22686,7 +22689,10 @@ fn fieldPtr(
|
||||
var anon_decl = try block.startAnonDecl(src);
|
||||
defer anon_decl.deinit();
|
||||
return sema.analyzeDeclRef(try anon_decl.finish(
|
||||
try child_type.copy(anon_decl.arena()),
|
||||
if (!child_type.isAnyError())
|
||||
try child_type.copy(anon_decl.arena())
|
||||
else
|
||||
try Type.Tag.error_set_single.create(anon_decl.arena(), name),
|
||||
try Value.Tag.@"error".create(anon_decl.arena(), .{ .name = name }),
|
||||
0, // default alignment
|
||||
));
|
||||
|
||||
@ -855,3 +855,13 @@ test "error from comptime string" {
|
||||
try expect(mem.eql(u8, name, @errorName(err)));
|
||||
}
|
||||
}
|
||||
|
||||
test "field access of anyerror results in smaller error set" {
|
||||
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
|
||||
|
||||
const E1 = @TypeOf(error.Foo);
|
||||
try expect(@TypeOf(E1.Foo) == E1);
|
||||
const E2 = error{ A, B, C };
|
||||
try expect(@TypeOf(E2.A) == E2);
|
||||
try expect(@TypeOf(@field(anyerror, "NotFound")) == error{NotFound});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user