From: Brendan Hansen Date: Sat, 13 Nov 2021 15:18:14 +0000 (-0600) Subject: made "#type" optional in many cases X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=1fab02e3f72bf240e713a9ed4706f48737d3e5d1;p=onyx.git made "#type" optional in many cases --- diff --git a/examples/07_structs.onyx b/examples/07_structs.onyx index 4cf1593d..ff2b5926 100644 --- a/examples/07_structs.onyx +++ b/examples/07_structs.onyx @@ -152,9 +152,10 @@ main :: (args: [] cstr) { // The first being of type T, and the second being an N dimensional array of type T. // To use a struct with parameters, simply pass them in the type. - param_struct_instance : ParamStruct(f32, 10); - param_struct_instance.t_member = 3.14159; - param_struct_instance.array_of_T = f32.[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]; + param_struct_instance := ParamStruct(f32, 10).{ + t_member = 3.14159, + array_of_T = .[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ], + }; println("param_struct_instance values:"); println(param_struct_instance.t_member); diff --git a/include/astnodes.h b/include/astnodes.h index a00ea249..f6c154bf 100644 --- a/include/astnodes.h +++ b/include/astnodes.h @@ -780,8 +780,8 @@ struct AstSwitch { u32 flags; \ OnyxToken* token; \ struct Entity* entity; \ - u64 type_id; \ void* __unused; \ + u64 type_id; \ Type* type struct AstType { AstType_base; }; diff --git a/modules/immediate_mode/immediate_renderer.onyx b/modules/immediate_mode/immediate_renderer.onyx index 13e87396..127e1e68 100644 --- a/modules/immediate_mode/immediate_renderer.onyx +++ b/modules/immediate_mode/immediate_renderer.onyx @@ -151,7 +151,7 @@ Immediate_Renderer :: struct { world_transform := array.get_ptr(world_transform_stack, -1); world_matrix := transform_to_matrix(world_transform); - for shader: (#type ^Shader).[ ^simple_shader, ^textured_shader, ^alpha_shader ] { + for shader: (^Shader).[ ^simple_shader, ^textured_shader, ^alpha_shader ] { gl.useProgram(shader.program); gl.uniformMatrix4(shader.world_uniform, false, world_matrix); } diff --git a/src/builtins.c b/src/builtins.c index 8edafcdb..dbeff109 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -3,38 +3,38 @@ #include "errors.h" #include "utils.h" -AstBasicType basic_type_void = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Void] }; -AstBasicType basic_type_bool = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Bool] }; -AstBasicType basic_type_i8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I8] }; -AstBasicType basic_type_u8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U8] }; -AstBasicType basic_type_i16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I16] }; -AstBasicType basic_type_u16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U16] }; -AstBasicType basic_type_i32 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I32] }; -AstBasicType basic_type_u32 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U32] }; -AstBasicType basic_type_i64 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I64] }; -AstBasicType basic_type_u64 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U64] }; -AstBasicType basic_type_f32 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F32] }; -AstBasicType basic_type_f64 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F64] }; -AstBasicType basic_type_rawptr = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Rawptr] }; -AstBasicType basic_type_type_expr = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Type_Index] }; +AstBasicType basic_type_void = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_Void] }; +AstBasicType basic_type_bool = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_Bool] }; +AstBasicType basic_type_i8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I8] }; +AstBasicType basic_type_u8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_U8] }; +AstBasicType basic_type_i16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I16] }; +AstBasicType basic_type_u16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_U16] }; +AstBasicType basic_type_i32 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I32] }; +AstBasicType basic_type_u32 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_U32] }; +AstBasicType basic_type_i64 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I64] }; +AstBasicType basic_type_u64 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_U64] }; +AstBasicType basic_type_f32 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_F32] }; +AstBasicType basic_type_f64 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_F64] }; +AstBasicType basic_type_rawptr = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_Rawptr] }; +AstBasicType basic_type_type_expr = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_Type_Index] }; // NOTE: Types used for numeric literals -AstBasicType basic_type_int_unsized = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Int_Unsized] }; -AstBasicType basic_type_float_unsized = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Float_Unsized] }; +AstBasicType basic_type_int_unsized = { Ast_Kind_Basic_Type, 0, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_Int_Unsized] }; +AstBasicType basic_type_float_unsized = { Ast_Kind_Basic_Type, 0, NULL, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_Float_Unsized] }; static OnyxToken simd_token = { Token_Type_Symbol, 0, "", { 0 } }; -AstBasicType basic_type_i8x16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I8X16] }; -AstBasicType basic_type_i16x8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I16X8] }; -AstBasicType basic_type_i32x4 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I32X4] }; -AstBasicType basic_type_i64x2 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I64X2] }; -AstBasicType basic_type_f32x4 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F32X4] }; -AstBasicType basic_type_f64x2 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F64X2] }; -AstBasicType basic_type_v128 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_V128] }; +AstBasicType basic_type_i8x16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I8X16] }; +AstBasicType basic_type_i16x8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I16X8] }; +AstBasicType basic_type_i32x4 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I32X4] }; +AstBasicType basic_type_i64x2 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_I64X2] }; +AstBasicType basic_type_f32x4 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_F32X4] }; +AstBasicType basic_type_f64x2 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_F64X2] }; +AstBasicType basic_type_v128 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, NULL, 0, NULL, &basic_types[Basic_Kind_V128] }; // HACK // :AutoReturnType Type type_auto_return = { 0 }; -AstBasicType basic_type_auto_return = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &type_auto_return }; +AstBasicType basic_type_auto_return = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, NULL, 0, NULL, &type_auto_return }; OnyxToken builtin_package_token = { Token_Type_Symbol, 7, "builtin ", { 0 } }; diff --git a/src/checker.c b/src/checker.c index 79dffedf..09393547 100644 --- a/src/checker.c +++ b/src/checker.c @@ -490,14 +490,15 @@ CheckStatus check_call(AstCall** pcall) { // HACK HACK HACK AstPolyCallType *pct = onyx_ast_node_new(context.ast_alloc, sizeof(AstPolyCallType), Ast_Kind_Poly_Call_Type); pct->token = call->token; + pct->__unused = call->next; pct->callee = (AstType *) callee; pct->params = (AstNode **) call->args.values; bh_arr_each(AstNode *, pp, pct->params) { *pp = (AstNode *) (*(AstArgument **) pp)->value; } - CHECK(type, (AstType *) pct); *pcall = (AstCall *) pct; + CHECK(expression, (AstTyped **) pcall); return Check_Success; } } @@ -1351,6 +1352,15 @@ CheckStatus check_address_of(AstAddressOf** paof) { } expr = (AstTyped *) strip_aliases((AstNode *) aof->expr); + if (node_is_type((AstNode *) expr)) { + AstPointerType *pt = onyx_ast_node_new(context.ast_alloc, sizeof(AstPointerType), Ast_Kind_Pointer_Type); + pt->token = aof->token; + pt->elem = (AstType *) expr; + pt->__unused = aof->next; + *paof = (AstAddressOf *) pt; + CHECK(type, (AstType *) pt); + return Check_Success; + } if ((expr->kind != Ast_Kind_Subscript && expr->kind != Ast_Kind_Dereference @@ -1823,7 +1833,7 @@ CheckStatus check_statement(AstNode** pstmt) { case Ast_Kind_Defer: return check_statement(&((AstDefer *) stmt)->stmt); case Ast_Kind_Call: { CHECK(call, (AstCall **) pstmt); - stmt->flags |= Ast_Flag_Expr_Ignored; + (*pstmt)->flags |= Ast_Flag_Expr_Ignored; return Check_Success; } diff --git a/src/parser.c b/src/parser.c index f8f55a7c..7c15a929 100644 --- a/src/parser.c +++ b/src/parser.c @@ -527,6 +527,12 @@ static AstTyped* parse_factor(OnyxParser* parser) { break; } + case '[': { + AstType *type = parse_type(parser); + retval = (AstTyped *) type; + break; + } + case '#': { if (parse_possible_directive(parser, "file_contents")) { AstFileContents* fc = make_node(AstFileContents, Ast_Kind_File_Contents); diff --git a/src/wasm_emit.c b/src/wasm_emit.c index 659dca3e..477498b5 100644 --- a/src/wasm_emit.c +++ b/src/wasm_emit.c @@ -2519,6 +2519,8 @@ EMIT_FUNC(expression, AstTyped* expr) { if (node_is_type((AstNode *) expr)) { AstType* type = (AstType *) expr; + if (type->flags & Ast_Flag_Expr_Ignored) return; + if (type->type_id != 0) { WID(WI_I32_CONST, ((AstType *) expr)->type_id); } else { @@ -2526,6 +2528,7 @@ EMIT_FUNC(expression, AstTyped* expr) { WID(WI_I32_CONST, t->id); } + *pcode = code; return; } diff --git a/tests/aoc-2020/day14.onyx b/tests/aoc-2020/day14.onyx index 97c8397c..a5a33327 100644 --- a/tests/aoc-2020/day14.onyx +++ b/tests/aoc-2020/day14.onyx @@ -4,7 +4,7 @@ use package core reader :: package core.string.reader MASK_SIZE :: 36 -Bitmask :: #type [MASK_SIZE] u8; +Bitmask :: [MASK_SIZE] u8; // Part 1 bitmask_p1 :: (mask: Bitmask, val: u64) -> u64 { diff --git a/tests/aoc-2020/day20.onyx b/tests/aoc-2020/day20.onyx index 917a28ad..419a0f97 100644 --- a/tests/aoc-2020/day20.onyx +++ b/tests/aoc-2020/day20.onyx @@ -9,7 +9,7 @@ TILE_DATA_HEIGHT :: 10 // Thought about making this dynamic and really fancy... // and then I remembered this is advent of code so that // is not necessary. -TileData :: #type [TILE_DATA_WIDTH * TILE_DATA_HEIGHT] bool; +TileData :: [TILE_DATA_WIDTH * TILE_DATA_HEIGHT] bool; Tile :: struct { id : u32; @@ -41,7 +41,7 @@ TO :: enum (u8) { } // TOT[t0][t1] = t1 * t0; t1 after t0 -tile_orientation_table := (#type [8] TO).[ +tile_orientation_table := ([8] TO).[ // N R90 R180 R270 F FR90 FR180 FR270 /* N */ TO.[ TO.N, TO.R90, TO.R180, TO.R270, TO.F, TO.FR90, TO.FR180, TO.FR270 ], /* R90 */ TO.[ TO.R90, TO.R180, TO.R270, TO.N, TO.FR270, TO.F, TO.FR90, TO.FR180,], @@ -96,7 +96,7 @@ build_edges :: (tile: [] bool, a := context.allocator) -> [] u32 { // These were not fun to think about by hand... But they make the // program ridiculously faster so I'm okay with it. -side_relations := (#type [4] TO).[ +side_relations := ([4] TO).[ TO.[ TO.F, TO.N, TO.R90, TO.FR90, ], TO.[ TO.N, TO.F, TO.FR90, TO.R90, ], TO.[ TO.R270, TO.FR90, TO.FR180, TO.N, ], @@ -246,7 +246,7 @@ main :: (args: [] cstr) { tiles := array.make(Tile); defer array.free(^tiles); - tile_map := map.make(u32, #type ^Tile, null); + tile_map := map.make(u32, ^Tile, null); defer map.free(^tile_map); tile_data := calloc(200 * sizeof TileData); @@ -362,7 +362,7 @@ main :: (args: [] cstr) { } } - for ori: TO.[ TO.N, TO.R90, TO.R180, TO.R270, TO.F, TO.FR90, TO.FR180, TO.FR270 ] { + for ori: .[ TO.N, TO.R90, TO.R180, TO.R270, TO.F, TO.FR90, TO.FR180, TO.FR270 ] { if scan_for_monsters(cast(^u8) forest, ori, 12 * 8, 12 * 8) do break; } diff --git a/tests/aoc-2020/day7.onyx b/tests/aoc-2020/day7.onyx index 2fb4ea3c..434e70fb 100644 --- a/tests/aoc-2020/day7.onyx +++ b/tests/aoc-2020/day7.onyx @@ -115,7 +115,7 @@ main :: (args: [] cstr) { // printf("Count: {}\n", processed_bags.count - 1); // Part 2 - to_process := array.make(#type ^BagNode); + to_process := array.make(^BagNode); multiplier := array.make(u32); array.push(^to_process, bg_get_node(^graph, "shiny gold")); array.push(^multiplier, 1); diff --git a/tests/new_printf.onyx b/tests/new_printf.onyx index 97193712..19730868 100644 --- a/tests/new_printf.onyx +++ b/tests/new_printf.onyx @@ -3,5 +3,5 @@ use package core main :: (args: [] cstr) { - printf("{} {} {{}} {} {.1} {.5} {}\n", 123, "Test", false, 12.34, 12.3456789, #type [..] map.Map(i32, str)); + printf("{} {} {{}} {} {.1} {.5} {}\n", 123, "Test", false, 12.34, 12.3456789, [..] map.Map(i32, str)); }