mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 08:45:52 +00:00
parent
67273cbe76
commit
4696cd3e09
@ -20182,7 +20182,7 @@ static IrInstGen *ir_analyze_fn_call(IrAnalyze *ira, IrInst* source_instr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
IrInstGen *first_arg;
|
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;
|
first_arg = first_arg_ptr;
|
||||||
} else {
|
} else {
|
||||||
first_arg = ir_get_deref(ira, &first_arg_ptr->base, first_arg_ptr, nullptr);
|
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;
|
return ira->codegen->invalid_inst_gen;
|
||||||
|
|
||||||
IrInstGen *first_arg;
|
IrInstGen *first_arg;
|
||||||
if (param_type->id == ZigTypeIdPointer &&
|
if (param_type->id == ZigTypeIdPointer) {
|
||||||
handle_is_ptr(ira->codegen, first_arg_ptr->value->type->data.pointer.child_type))
|
|
||||||
{
|
|
||||||
first_arg = first_arg_ptr;
|
first_arg = first_arg_ptr;
|
||||||
} else {
|
} else {
|
||||||
first_arg = ir_get_deref(ira, &first_arg_ptr->base, first_arg_ptr, nullptr);
|
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"));
|
expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
|
||||||
comptime 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();
|
S.doTheTest();
|
||||||
comptime 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