From 6fe0ca11381952f33bf388124755eae4a8cf9ae4 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 22 Jun 2021 22:19:27 -0500 Subject: [PATCH] fixing bugs with first class types; and basic type printing --- bin/onyx | Bin 409120 -> 409120 bytes core/std.onyx | 2 + core/type_info.onyx | 2 +- core/type_info_helper.onyx | 112 +++++++++++++++++++++++++++++++++++++ src/onyxwasm_type_table.c | 2 + 5 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 core/type_info_helper.onyx diff --git a/bin/onyx b/bin/onyx index 2bcf731c7ba9e5cae9112a2324d8730a6de236de..b0b63777c1a4d183aa47f60091fbaddb147b0c1c 100755 GIT binary patch delta 6167 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 IR&_!D2G!8oMF0Q* delta 6108 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 Sw__DNzp&B!hmUAe6Y?+8<-QjH diff --git a/core/std.onyx b/core/std.onyx index 3c0b5527..e36f2391 100644 --- a/core/std.onyx +++ b/core/std.onyx @@ -40,6 +40,8 @@ package core #load "./wasi/env" #load "./wasi/clock" #load "./io/file" + + #load "./type_info_helper" } #if runtime.Runtime == runtime.Runtime_Js { diff --git a/core/type_info.onyx b/core/type_info.onyx index c62ab36b..3e323e89 100644 --- a/core/type_info.onyx +++ b/core/type_info.onyx @@ -150,4 +150,4 @@ get_type_info :: (t: type_expr) -> ^Type_Info { if t < ~~0 || t >= ~~type_table.count do return null; return type_table[cast(i32) t]; -} \ No newline at end of file +} diff --git a/core/type_info_helper.onyx b/core/type_info_helper.onyx new file mode 100644 index 00000000..1674e620 --- /dev/null +++ b/core/type_info_helper.onyx @@ -0,0 +1,112 @@ +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/src/onyxwasm_type_table.c b/src/onyxwasm_type_table.c index 059a3018..e14f9906 100644 --- a/src/onyxwasm_type_table.c +++ b/src/onyxwasm_type_table.c @@ -85,10 +85,12 @@ u64 build_type_table(OnyxWasmModule* module) { bh_buffer_write_u32(&table_buffer, type_idx); } + bh_buffer_align(&table_buffer, 8); table_info[type_idx] = table_buffer.length; bh_buffer_write_u32(&table_buffer, type->kind); bh_buffer_write_u32(&table_buffer, type_size_of(type)); bh_buffer_write_u32(&table_buffer, type_alignment_of(type)); + bh_buffer_align(&table_buffer, 8); PATCH; bh_buffer_write_u64(&table_buffer, components_base); bh_buffer_write_u64(&table_buffer, components_count); -- 2.25.1