Changing syntax and union support

This commit is contained in:
ookami125 2025-03-25 16:07:29 -04:00
parent 2331a29358
commit acadefcaa5
4 changed files with 408 additions and 303 deletions

View file

@ -65,9 +65,9 @@ fn serialize_raw_reducer_def_v9(array: *std.ArrayList(u8), val: RawReducerDefV9)
for(val.params.elements) |element| {
try serialize_product_type_element(array, element);
}
try array.appendSlice(&[_]u8{ @intFromBool(val.lifecycle == null) });
if(val.lifecycle) |lifecycle| {
try serialize_lifecycle(array, lifecycle);
try array.appendSlice(&[_]u8{ @intFromBool(val.lifecycle == .None) });
if(val.lifecycle != .None) {
try serialize_lifecycle(array, val.lifecycle);
}
}
@ -146,6 +146,22 @@ fn serialize_table_access(array: *std.ArrayList(u8), val: TableAccess) !void {
try array.appendSlice(&[_]u8{@intFromEnum(val)});
}
fn serialize_sum_type_variant(array: *std.ArrayList(u8), val: SumTypeVariant) !void {
try array.appendSlice(&[_]u8{ @intFromBool(val.name == null) });
if(val.name) |name| {
try array.appendSlice(&std.mem.toBytes(@as(u32, @intCast(name.len))));
try array.appendSlice(name);
}
try serialize_algebraic_type(array, val.algebraic_type);
}
fn serialize_sum_type(array: *std.ArrayList(u8), val: SumType) std.mem.Allocator.Error!void {
try array.appendSlice(&std.mem.toBytes(@as(u32, @intCast(val.variants.len))));
for(val.variants) |variant| {
try serialize_sum_type_variant(array, variant);
}
}
fn serialize_product_type_element(array: *std.ArrayList(u8), val: ProductTypeElement) !void {
try array.appendSlice(&[_]u8{ 0 });
try array.appendSlice(&std.mem.toBytes(@as(u32, @intCast(val.name.len))));
@ -170,6 +186,10 @@ fn serialize_algebraic_type(array: *std.ArrayList(u8), val: AlgebraicType) !void
try array.appendSlice(&[_]u8{@intFromEnum(val)});
try array.appendSlice(&std.mem.toBytes(ref.inner));
},
AlgebraicType.Sum => |sum| {
try array.appendSlice(&[_]u8{@intFromEnum(val)});
try serialize_sum_type(array, sum);
},
else => try array.appendSlice(&[_]u8{@intFromEnum(val)}),
}
}