From: Brendan Hansen Date: Wed, 23 Jun 2021 18:19:33 +0000 (-0500) Subject: moved type_info package to 'builtin' instead of 'core' X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=ebd7135a6c9b4d3db994a28275052f8f849d104b;p=onyx.git moved type_info package to 'builtin' instead of 'core' --- diff --git a/bin/onyx b/bin/onyx index c55c29c4..502d0108 100755 Binary files a/bin/onyx and b/bin/onyx differ diff --git a/core/std.onyx b/core/std.onyx index e36f2391..0d12896c 100644 --- a/core/std.onyx +++ b/core/std.onyx @@ -41,7 +41,7 @@ package core #load "./wasi/clock" #load "./io/file" - #load "./type_info_helper" + #load "./type_info/helper" } #if runtime.Runtime == runtime.Runtime_Js { diff --git a/core/type_info.onyx b/core/type_info.onyx deleted file mode 100644 index 3e323e89..00000000 --- a/core/type_info.onyx +++ /dev/null @@ -1,153 +0,0 @@ -// A lot of these names have been copied from JAI's introspection system. This is just because -// I don't want to mentally bike-shed about the names; I just want to get something working. - -package core.type_info - -type_table : [] ^Type_Info; - -Type_Info :: struct { - // This must match the order of the elements in onyxtypes.h - Kind :: enum { - Invalid :: 0x00; // Unused - Basic :: 0x01; - Pointer :: 0x02; - Function :: 0x03; - Struct :: 0x04; - Compound :: 0x05; - Array :: 0x06; - Slice :: 0x07; - Dynamic_Array :: 0x08; - Variadic_Argument :: 0x09; - Enum :: 0x0a; - } - - kind := Kind.Invalid; - size: u32; - - // Does this need to know alignment? Probably? - alignment: u32; -} - -Type_Info_Basic :: struct { - use base : Type_Info; - - // This must match the order of the elements in BasicKind in onyxtypes.h - Kind :: enum { - Void :: 0x00; - Bool :: 0x01; - I8 :: 0x03; - U8 :: 0x04; - I16 :: 0x05; - U16 :: 0x06; - I32 :: 0x07; - U32 :: 0x08; - I64 :: 0x09; - U64 :: 0x0a; - - F32 :: 0x0c; - F64 :: 0x0d; - - Rawptr :: 0x0e; - - I8X16 :: 0x0f; - I16X8 :: 0x10; - I32X4 :: 0x11; - I64X2 :: 0x12; - F32X4 :: 0x13; - F64X2 :: 0x14; - V128 :: 0x15; - - Type_Index :: 0x16; - } - - basic_kind: Kind; -} - -Type_Info_Pointer :: struct { - use base : Type_Info; - - @Rename - to: type_expr; -} - -Type_Info_Function :: struct { - use base : Type_Info; - - return_type: type_expr; - parameter_types: [] type_expr; - - is_variadic: bool; -} - -Type_Info_Array :: struct { - use base : Type_Info; - - @Rename - of: type_expr; - count: u32; -} - -Type_Info_Slice :: struct { - use base : Type_Info; - - @Rename - of: type_expr; -} - -Type_Info_Dynamic_Array :: struct { - use base : Type_Info; - - @Rename - of: type_expr; -} - -Type_Info_Variadic_Argument :: struct { - use base : Type_Info; - - @Rename - of: type_expr; -} - -Type_Info_Enum :: struct { - use base : Type_Info; - - Member :: struct { - name: str; - value: u64; // This assumes enums are always represented as ints. - } - - // This is first for better alignment - backing_type: type_expr; - name: str; - members: [] Member; - - is_flags: bool; -} - -Type_Info_Struct :: struct { - use base : Type_Info; - - Member :: struct { - name: str; - offset: u32; - type_index: type_expr; - - used: bool; - has_default: bool; - } - - name: str; - members: [] Member; -} - -Type_Info_Compound :: struct { - use base : Type_Info; - - components : [] type_expr; -} - -get_type_info :: (t: type_expr) -> ^Type_Info { - if t < ~~0 || t >= ~~type_table.count do return null; - - return type_table[cast(i32) t]; -} diff --git a/core/type_info/helper.onyx b/core/type_info/helper.onyx new file mode 100644 index 00000000..44c76a30 --- /dev/null +++ b/core/type_info/helper.onyx @@ -0,0 +1,112 @@ +package builtin.type_info + +#private_file io :: package core.io + +write_type_name :: (writer: ^io.Writer, t: type_expr) { + info := get_type_info(t); + if info == null do return; + + switch info.kind { + case .Basic { + basic := cast(^Type_Info_Basic) info; + + switch basic.basic_kind { + case .Void do io.write_str(writer, "void"); + case .Bool do io.write_str(writer, "bool"); + case .U8 do io.write_str(writer, "u8"); + case .I8 do io.write_str(writer, "i8"); + case .U16 do io.write_str(writer, "u16"); + case .I16 do io.write_str(writer, "i16"); + case .U32 do io.write_str(writer, "u32"); + case .I32 do io.write_str(writer, "i32"); + case .U64 do io.write_str(writer, "u64"); + case .I64 do io.write_str(writer, "i64"); + + case .F32 do io.write_str(writer, "f32"); + case .F64 do io.write_str(writer, "f64"); + + case .Rawptr do return io.write_str(writer, "rawptr"); + + case .I8X16 do return io.write_str(writer, "i8x16"); + case .I16X8 do return io.write_str(writer, "i16x8"); + case .I32X4 do return io.write_str(writer, "i32x4"); + case .I64X2 do return io.write_str(writer, "i64x2"); + case .F32X4 do return io.write_str(writer, "f32x4"); + case .F64X2 do return io.write_str(writer, "f64x2"); + case .V128 do return io.write_str(writer, "v128"); + + case .Type_Index do return io.write_str(writer, "type_expr"); + } + } + + case .Pointer { + pointer := cast(^Type_Info_Pointer) info; + io.write_str(writer, "^"); + write_type_name(writer, pointer.to); + } + + case .Array { + arr := cast(^Type_Info_Array) info; + io.write_format(writer, "[%i] ", arr.count); + write_type_name(writer, arr.of); + } + + case .Slice { + slice := cast(^Type_Info_Slice) info; + io.write_str(writer, "[] "); + write_type_name(writer, slice.of); + } + + case .Dynamic_Array { + dyn := cast(^Type_Info_Dynamic_Array) info; + io.write_str(writer, "[..] "); + write_type_name(writer, dyn.of); + } + + case .Variadic_Argument { + va := cast(^Type_Info_Variadic_Argument) info; + io.write_str(writer, ".."); + write_type_name(writer, va.of); + } + + case .Enum { + e := cast(^Type_Info_Enum) info; + io.write_str(writer, e.name); + } + + case .Struct { + s := cast(^Type_Info_Struct) info; + io.write_str(writer, s.name); + } + + case .Compound { + comp := cast(^Type_Info_Compound) info; + io.write_str(writer, "("); + + i := 0; + for type: comp.components { + if i != 0 do io.write_str(writer, ", "); + + write_type_name(writer, type); + i += 1; + } + io.write_str(writer, ")"); + } + + case .Function { + f := cast(^Type_Info_Function) info; + io.write_str(writer, "("); + + i := 0; + for type: f.parameter_types { + if i != 0 do io.write_str(writer, ", "); + + write_type_name(writer, type); + i += 1; + } + io.write_str(writer, ") -> "); + + write_type_name(writer, f.return_type); + } + } +} diff --git a/core/type_info/type_info.onyx b/core/type_info/type_info.onyx new file mode 100644 index 00000000..13b8c0c4 --- /dev/null +++ b/core/type_info/type_info.onyx @@ -0,0 +1,153 @@ +// A lot of these names have been copied from JAI's introspection system. This is just because +// I don't want to mentally bike-shed about the names; I just want to get something working. + +package builtin.type_info + +type_table : [] ^Type_Info; + +Type_Info :: struct { + // This must match the order of the elements in onyxtypes.h + Kind :: enum { + Invalid :: 0x00; // Unused + Basic :: 0x01; + Pointer :: 0x02; + Function :: 0x03; + Struct :: 0x04; + Compound :: 0x05; + Array :: 0x06; + Slice :: 0x07; + Dynamic_Array :: 0x08; + Variadic_Argument :: 0x09; + Enum :: 0x0a; + } + + kind := Kind.Invalid; + size: u32; + + // Does this need to know alignment? Probably? + alignment: u32; +} + +Type_Info_Basic :: struct { + use base : Type_Info; + + // This must match the order of the elements in BasicKind in onyxtypes.h + Kind :: enum { + Void :: 0x00; + Bool :: 0x01; + I8 :: 0x03; + U8 :: 0x04; + I16 :: 0x05; + U16 :: 0x06; + I32 :: 0x07; + U32 :: 0x08; + I64 :: 0x09; + U64 :: 0x0a; + + F32 :: 0x0c; + F64 :: 0x0d; + + Rawptr :: 0x0e; + + I8X16 :: 0x0f; + I16X8 :: 0x10; + I32X4 :: 0x11; + I64X2 :: 0x12; + F32X4 :: 0x13; + F64X2 :: 0x14; + V128 :: 0x15; + + Type_Index :: 0x16; + } + + basic_kind: Kind; +} + +Type_Info_Pointer :: struct { + use base : Type_Info; + + @Rename + to: type_expr; +} + +Type_Info_Function :: struct { + use base : Type_Info; + + return_type: type_expr; + parameter_types: [] type_expr; + + is_variadic: bool; +} + +Type_Info_Array :: struct { + use base : Type_Info; + + @Rename + of: type_expr; + count: u32; +} + +Type_Info_Slice :: struct { + use base : Type_Info; + + @Rename + of: type_expr; +} + +Type_Info_Dynamic_Array :: struct { + use base : Type_Info; + + @Rename + of: type_expr; +} + +Type_Info_Variadic_Argument :: struct { + use base : Type_Info; + + @Rename + of: type_expr; +} + +Type_Info_Enum :: struct { + use base : Type_Info; + + Member :: struct { + name: str; + value: u64; // This assumes enums are always represented as ints. + } + + // This is first for better alignment + backing_type: type_expr; + name: str; + members: [] Member; + + is_flags: bool; +} + +Type_Info_Struct :: struct { + use base : Type_Info; + + Member :: struct { + name: str; + offset: u32; + type_index: type_expr; + + used: bool; + has_default: bool; + } + + name: str; + members: [] Member; +} + +Type_Info_Compound :: struct { + use base : Type_Info; + + components : [] type_expr; +} + +get_type_info :: (t: type_expr) -> ^Type_Info { + if t < ~~0 || t >= ~~type_table.count do return null; + + return type_table[cast(i32) t]; +} diff --git a/core/type_info_helper.onyx b/core/type_info_helper.onyx deleted file mode 100644 index 1674e620..00000000 --- a/core/type_info_helper.onyx +++ /dev/null @@ -1,112 +0,0 @@ -package core.type_info - -#private_file io :: package core.io - -write_type_name :: (writer: ^io.Writer, t: type_expr) { - info := get_type_info(t); - if info == null do return; - - switch info.kind { - case .Basic { - basic := cast(^Type_Info_Basic) info; - - switch basic.basic_kind { - case .Void do io.write_str(writer, "void"); - case .Bool do io.write_str(writer, "bool"); - case .U8 do io.write_str(writer, "u8"); - case .I8 do io.write_str(writer, "i8"); - case .U16 do io.write_str(writer, "u16"); - case .I16 do io.write_str(writer, "i16"); - case .U32 do io.write_str(writer, "u32"); - case .I32 do io.write_str(writer, "i32"); - case .U64 do io.write_str(writer, "u64"); - case .I64 do io.write_str(writer, "i64"); - - case .F32 do io.write_str(writer, "f32"); - case .F64 do io.write_str(writer, "f64"); - - case .Rawptr do return io.write_str(writer, "rawptr"); - - case .I8X16 do return io.write_str(writer, "i8x16"); - case .I16X8 do return io.write_str(writer, "i16x8"); - case .I32X4 do return io.write_str(writer, "i32x4"); - case .I64X2 do return io.write_str(writer, "i64x2"); - case .F32X4 do return io.write_str(writer, "f32x4"); - case .F64X2 do return io.write_str(writer, "f64x2"); - case .V128 do return io.write_str(writer, "v128"); - - case .Type_Index do return io.write_str(writer, "type_expr"); - } - } - - case .Pointer { - pointer := cast(^Type_Info_Pointer) info; - io.write_str(writer, "^"); - write_type_name(writer, pointer.to); - } - - case .Array { - arr := cast(^Type_Info_Array) info; - io.write_format(writer, "[%i] ", arr.count); - write_type_name(writer, arr.of); - } - - case .Slice { - slice := cast(^Type_Info_Slice) info; - io.write_str(writer, "[] "); - write_type_name(writer, slice.of); - } - - case .Dynamic_Array { - dyn := cast(^Type_Info_Dynamic_Array) info; - io.write_str(writer, "[..] "); - write_type_name(writer, dyn.of); - } - - case .Variadic_Argument { - va := cast(^Type_Info_Variadic_Argument) info; - io.write_str(writer, ".."); - write_type_name(writer, va.of); - } - - case .Enum { - e := cast(^Type_Info_Enum) info; - io.write_str(writer, e.name); - } - - case .Struct { - s := cast(^Type_Info_Struct) info; - io.write_str(writer, s.name); - } - - case .Compound { - comp := cast(^Type_Info_Compound) info; - io.write_str(writer, "("); - - i := 0; - for type: comp.components { - if i != 0 do io.write_str(writer, ", "); - - write_type_name(writer, type); - i += 1; - } - io.write_str(writer, ")"); - } - - case .Function { - f := cast(^Type_Info_Function) info; - io.write_str(writer, "("); - - i := 0; - for type: f.parameter_types { - if i != 0 do io.write_str(writer, ", "); - - write_type_name(writer, type); - i += 1; - } - io.write_str(writer, ") -> "); - - write_type_name(writer, f.return_type); - } - } -} \ No newline at end of file diff --git a/modules/ui/components/slider.onyx b/modules/ui/components/slider.onyx index 6fbfe9a4..7e48b943 100644 --- a/modules/ui/components/slider.onyx +++ b/modules/ui/components/slider.onyx @@ -17,7 +17,7 @@ Slider_Theme :: struct { default_slider_theme := Slider_Theme.{}; -slider :: (use r: Rectangle, value: ^$T, min_value: T, max_value: T, text: str, theme := ^default_slider_theme, site := #callsite, increment := 0) -> bool { +slider :: (use r: Rectangle, value: ^$T, min_value: T, max_value: T, theme := ^default_slider_theme, site := #callsite, increment := 0) -> bool { result := false; hash := get_site_hash(site, increment); @@ -30,8 +30,6 @@ slider :: (use r: Rectangle, value: ^$T, min_value: T, max_value: T, text: str, result = true; // Animate this? - // adjust_slider_value(value, mouse_state.x - x0, width, min_value, max_value); - x := mouse_state.x - x0; if T == i32 || T == i64 || T == u32 || T == u64 { diff --git a/src/onyx.c b/src/onyx.c index c25bb89f..e5aea9c6 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -207,7 +207,7 @@ static void context_init(CompileOptions* opts) { .state = Entity_State_Parse_Builtin, .type = Entity_Type_Load_File, .package = NULL, - .include = create_load(context.ast_alloc, "core/type_info"), + .include = create_load(context.ast_alloc, "core/type_info/type_info"), })); add_entities_for_node(NULL, (AstNode *) &builtin_stack_top, context.global_scope, NULL); diff --git a/src/onyxbuiltins.c b/src/onyxbuiltins.c index d3282244..85bdd5d7 100644 --- a/src/onyxbuiltins.c +++ b/src/onyxbuiltins.c @@ -391,7 +391,7 @@ void initialize_builtins(bh_allocator a) { return; } - p = package_lookup("core.type_info"); + p = package_lookup("builtin.type_info"); if (p != NULL) { type_table_node = (AstTyped *) symbol_raw_resolve(p->scope, "type_table"); }