zig/test/behavior/fn_delegation.zig
David Rubin 05de6c279b
riscv: std.fmt.format running
- implements `airSlice`, `airBitAnd`, `airBitOr`, `airShr`.

- got a basic design going for the `airErrorName` but for some reason it simply returns
empty bytes. will investigate further.

- only generating `.got.zig` entries when not compiling an object or shared library

- reduced the total amount of ops a mnemonic can have to 3, simplifying the logic
2024-06-13 02:20:47 -07:00

44 lines
912 B
Zig

const builtin = @import("builtin");
const expect = @import("std").testing.expect;
const Foo = struct {
a: u64 = 10,
fn one(self: Foo) u64 {
return self.a + 1;
}
const two = __two;
fn __two(self: Foo) u64 {
return self.a + 2;
}
const three = __three;
const four = custom(Foo, 4);
};
fn __three(self: Foo) u64 {
return self.a + 3;
}
fn custom(comptime T: type, comptime num: u64) fn (T) u64 {
return struct {
fn function(self: T) u64 {
return self.a + num;
}
}.function;
}
test "fn delegation" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
const foo = Foo{};
try expect(foo.one() == 11);
try expect(foo.two() == 12);
try expect(foo.three() == 13);
try expect(foo.four() == 14);
}