fix ability to call methods on enums with pointer-to-self

closes #3218
This commit is contained in:
Andrew Kelley
2020-07-14 14:38:40 -07:00
parent 67273cbe76
commit 4696cd3e09
3 changed files with 42 additions and 4 deletions

View File

@@ -1140,3 +1140,22 @@ test "tagName on enum literals" {
expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
comptime expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
}
test "method call on an enum" {
const S = struct {
const E = enum {
one,
two,
fn method(self: *E) bool {
return self.* == .two;
}
};
fn doTheTest() void {
var e = E.two;
expect(e.method());
}
};
S.doTheTest();
comptime S.doTheTest();
}

View File

@@ -669,3 +669,24 @@ test "cast from anonymous struct to union" {
S.doTheTest();
comptime S.doTheTest();
}
test "method call on an empty union" {
const S = struct {
const MyUnion = union(Tag) {
pub const Tag = enum { X1, X2 };
X1: [0]u8,
X2: [0]u8,
pub fn useIt(self: *@This()) bool {
return true;
}
};
fn doTheTest() void {
var u = MyUnion{ .X1 = [0]u8{} };
expect(u.useIt());
}
};
S.doTheTest();
comptime S.doTheTest();
}