I have this code
test "struct conversions" {
const S = struct {
member_1: i32,
member_2: []const u8,
const Self = @This();
pub fn clone(self: Self, _: std.mem.Allocator) Self {
// placeholder for test
return .{
.member_1 = self.member_1,
.member_2 = self.member_2,
};
}
};
var gpa = std.heap.DebugAllocator(.{}){};
const allocator = gpa.allocator();
var map = std.StringHashMapUnmanaged(LispType).empty;
defer map.deinit(allocator);
// Insert values (simulate parsed data)
try map.put(allocator, "member_1", .{ .int = 42 });
try map.put(allocator, "member_2", LispType.String.initString(allocator, "hello"));
const v = try LispType.Record.fromHashMap(S, allocator, map);
const s = try v.cast(S, allocator);
try std.testing.expect(s.member_1 == map.get("member_1").?.int);
try std.testing.expect(std.mem.eql(u8, s.member_2, map.get("member_2").?.string.getItems()));
}
This code does not compile, it gives me the error
src/types.zig:323:26: error: union 'types.LispType.Function' depends on itself
pub const Function = union(enum) {
However, the same code compiles just fine on my main.zig. I discovered that adding this line
_ = Interpreter.init(allocator);
For some reason makes the code compile (it seems like that's why the code compiles when running zig build run).