sdl phase 1

This commit is contained in:
agra
2026-02-12 12:27:35 +02:00
parent cfac6791cb
commit 1087bd1977
10 changed files with 820 additions and 10 deletions

View File

@@ -21,6 +21,7 @@ pub const Type = union(enum) {
pointer_type: PointerTypeInfo,
many_pointer_type: ManyPointerTypeInfo,
vector_type: VectorTypeInfo,
function_type: FunctionTypeInfo,
any_type,
meta_type: MetaTypeInfo,
@@ -36,6 +37,11 @@ pub const Type = union(enum) {
element_name: []const u8,
};
pub const FunctionTypeInfo = struct {
param_types: []const Type,
return_type: *const Type,
};
pub const ArrayTypeInfo = struct {
element_name: []const u8,
length: u32,
@@ -182,6 +188,13 @@ pub const Type = union(enum) {
};
}
pub fn isFunctionType(self: Type) bool {
return switch (self) {
.function_type => true,
else => false,
};
}
pub fn isArray(self: Type) bool {
return switch (self) {
.array_type => true,
@@ -235,6 +248,7 @@ pub const Type = union(enum) {
.f32 => 32,
.f64 => 64,
.boolean => 1,
.pointer_type, .many_pointer_type, .function_type => 64,
else => 0,
};
}
@@ -382,6 +396,20 @@ pub const Type = union(enum) {
try buf.append(allocator, ')');
return try buf.toOwnedSlice(allocator);
},
.function_type => |info| {
var buf = std.ArrayList(u8).empty;
try buf.append(allocator, '(');
for (info.param_types, 0..) |pt, i| {
if (i > 0) try buf.appendSlice(allocator, ", ");
try buf.appendSlice(allocator, try pt.displayName(allocator));
}
try buf.append(allocator, ')');
if (!std.meta.eql(info.return_type.*, Type.void_type)) {
try buf.appendSlice(allocator, " -> ");
try buf.appendSlice(allocator, try info.return_type.displayName(allocator));
}
return try buf.toOwnedSlice(allocator);
},
.meta_type => |info| info.name,
};
}