whole-function comptime folding for zero-runtime value calls
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
Layout :: enum { auto, c }
|
||||
|
||||
ArrayInfo :: struct {
|
||||
child type
|
||||
len usize
|
||||
}
|
||||
|
||||
FieldInfo :: struct {
|
||||
name []u8
|
||||
type type
|
||||
index usize
|
||||
}
|
||||
|
||||
RecordInfo :: struct {
|
||||
name ?[]u8
|
||||
fields []FieldInfo
|
||||
is_tuple bool
|
||||
layout Layout
|
||||
}
|
||||
|
||||
EnumInfo :: struct {
|
||||
fields []FieldInfo
|
||||
}
|
||||
|
||||
TypeInfo :: union(enum) {
|
||||
invalid void
|
||||
void void
|
||||
noreturn void
|
||||
anyopaque void
|
||||
bool void
|
||||
integer void
|
||||
float void
|
||||
array ArrayInfo
|
||||
pointer void
|
||||
slice void
|
||||
range void
|
||||
optional void
|
||||
function void
|
||||
enum EnumInfo
|
||||
record RecordInfo
|
||||
union void
|
||||
fallible void
|
||||
distinct void
|
||||
}
|
||||
|
||||
EnumFieldStruct func($E, $Field type, $default ?Field) type {
|
||||
match typeinfo!(E) {
|
||||
.enum |info|: {
|
||||
names [info.fields.len]mut []u8 = undefined
|
||||
field_types [info.fields.len]mut type = undefined
|
||||
defaults [info.fields.len]mut ?Field = undefined
|
||||
expand for info.fields |field, index| {
|
||||
names[index] = field.name
|
||||
field_types[index] = Field
|
||||
defaults[index] = default
|
||||
}
|
||||
return struct_type!(.auto, names, field_types, defaults)
|
||||
}
|
||||
else: compile_error!("EnumFieldStruct key must be an enum")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user