mirror of
https://github.com/ziglang/zig.git
synced 2026-01-25 08:47:55 +00:00
parent
67273cbe76
commit
4696cd3e09
@ -20182,7 +20182,7 @@ static IrInstGen *ir_analyze_fn_call(IrAnalyze *ira, IrInst* source_instr,
|
||||
}
|
||||
|
||||
IrInstGen *first_arg;
|
||||
if (!first_arg_known_bare && handle_is_ptr(ira->codegen, first_arg_ptr->value->type->data.pointer.child_type)) {
|
||||
if (!first_arg_known_bare) {
|
||||
first_arg = first_arg_ptr;
|
||||
} else {
|
||||
first_arg = ir_get_deref(ira, &first_arg_ptr->base, first_arg_ptr, nullptr);
|
||||
@ -20522,9 +20522,7 @@ static IrInstGen *ir_analyze_fn_call(IrAnalyze *ira, IrInst* source_instr,
|
||||
return ira->codegen->invalid_inst_gen;
|
||||
|
||||
IrInstGen *first_arg;
|
||||
if (param_type->id == ZigTypeIdPointer &&
|
||||
handle_is_ptr(ira->codegen, first_arg_ptr->value->type->data.pointer.child_type))
|
||||
{
|
||||
if (param_type->id == ZigTypeIdPointer) {
|
||||
first_arg = first_arg_ptr;
|
||||
} else {
|
||||
first_arg = ir_get_deref(ira, &first_arg_ptr->base, first_arg_ptr, nullptr);
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user