From 8048c085282117977dd74b514c8c4799da407dbc Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 30 Dec 2020 07:47:36 -0600 Subject: [PATCH] added more to struct_robustness; parsing bug fix --- onyx | Bin 287128 -> 287128 bytes src/onyxparser.c | 5 +- tests/struct_robustness.onyx | 263 +++++++++++++++++++++-------------- 3 files changed, 165 insertions(+), 103 deletions(-) diff --git a/onyx b/onyx index fcbe01d9c10bb8b68535d5d7938d19f77ace54be..08c9d5cac8971de518df7f8e7d0006c0fb02ba3c 100755 GIT binary patch delta 38963 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
    L9x{*BQQ?Ex>aOTPfv3YZHR1ZWBH0DQm( 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 != NULL); AstBinding* binding = parse_top_level_binding(parser, symbol); + if (parser->hit_unexpected_token) return 2; + symbol_introduce(current_block->binding_scope, symbol, binding->node); return 2; } @@ -2076,7 +2078,8 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { if (parser->curr->type == ':') { AstBinding* binding = parse_top_level_binding(parser, symbol); - binding->node->flags |= private_kind; + + if (binding != NULL) binding->node->flags |= private_kind; return (AstNode *) binding; diff --git a/tests/struct_robustness.onyx b/tests/struct_robustness.onyx index 503d9b3e..2ba09551 100644 --- a/tests/struct_robustness.onyx +++ b/tests/struct_robustness.onyx @@ -2,134 +2,193 @@ use package core main :: proc (args: [] cstr) { - test_simple_struct(); - test_simple_union(); - test_default_values(); - test_simple_use(); - test_polymorphic(); - test_polymorphic_with_defaults(); + test_simple_struct(); + test_simple_union(); + test_default_values(); + test_simple_use(); + test_polymorphic(); + test_polymorphic_with_defaults(); + test_union_with_use(); + test_polymorphic_union(); + test_polymorphic_union_with_use(); + + test_simple_struct :: proc () { + println("Testing a simple structure."); + + SimpleStruct :: struct { + age : u16; + height : u32; + + name : str; + } + + ss := SimpleStruct.{ 41, 67, "Steve" }; - test_simple_struct :: proc () { - println("Testing a simple structure."); - - SimpleStruct :: struct { - age : u16; - height : u32; + printf("SimpleStruct<%i, %i>(%i, %i, %s)\n", + sizeof SimpleStruct, + alignof SimpleStruct, + cast(u32) ss.age, ss.height, ss.name); + } - name : str; - } + test_simple_union :: proc () { + println("\n\nTesting a simple union."); - ss := SimpleStruct.{ 41, 67, "Steve" }; + SimpleUnion :: struct #union { + int_val : i32; + float_val : f32; + } - printf("SimpleStruct<%i, %i>(%i, %i, %s)\n", - sizeof SimpleStruct, - alignof SimpleStruct, - cast(u32) ss.age, ss.height, ss.name); - } + u : SimpleUnion; + u.float_val = 0.5; - test_simple_union :: proc () { - println("\n\nTesting a simple union."); + printf("%p == 0x3F000000\n", u.int_val); + } - SimpleUnion :: struct #union { - int_val : i32; - float_val : f32; - } + test_default_values :: proc () { + println("\n\nTesting a struct with default values."); - u : SimpleUnion; - u.float_val = 0.5; + DefaultedStruct :: struct { + i : i32 = 0; + f : f32 = 1; + l : i64 = 2; + d : f64 = 3; + } + + ds1 := DefaultedStruct.{}; + print_defaulted(ds1); - printf("%p == 0x3F000000\n", u.int_val); - } + ds2 := DefaultedStruct.{ i = 3, d = 0 }; + print_defaulted(ds2); - test_default_values :: proc () { - println("\n\nTesting a struct with default values."); + print_defaulted :: proc (use ds: DefaultedStruct) { + printf("DefaultedStruct(%i, %f, %l, %d)\n", i, f, l, d); + } + } - DefaultedStruct :: struct { - i : i32 = 0; - f : f32 = 1; - l : i64 = 2; - d : f64 = 3; - } + test_simple_use :: proc () { + println("\n\nTesting a struct with `use`."); + + StructWithUse :: struct { + first_member : i32; + + use used_member : UsedMember; + + last_member : i32; + } + + UsedMember :: struct { + x : f32; + y : f32; + } + + swu := StructWithUse.{ 1234, UsedMember.{ 1, 2 }, 5678 }; + + swu2 := StructWithUse.{ + first_member = 1234, + used_member = UsedMember.{ 1, 2 }, + last_member = 5678, + }; + + // This will not work. `use`d members cannot be set directly. + // swu3 := StructWithUse.{ 1234, 1, 2, 5678 }; + + print_swu :: proc (use swu: StructWithUse) { + printf("StructWithUse(%i, (%f, %f), %i)\n", + first_member, x, y, last_member); + } + + print_swu(swu); + print_swu(swu2); + } + + test_polymorphic :: proc () { + println("\n\nTesting a polymorphic struct."); + + PolyStruct :: struct ($T, $R) { + t_data : T; + r_data : R; + } - ds1 := DefaultedStruct.{}; - print_defaulted(ds1); + ps1 : PolyStruct(i32, f32); + ps1.t_data = 1234; + ps1.r_data = 5678; - ds2 := DefaultedStruct.{ i = 3, d = 0 }; - print_defaulted(ds2); + printf("PolyStruct(%i, %f)\n", ps1.t_data, ps1.r_data); - print_defaulted :: proc (use ds: DefaultedStruct) { - printf("DefaultedStruct(%i, %f, %l, %d)\n", i, f, l, d); - } - } + // Currently, this is how you have to do this. + ps2 := (#type PolyStruct(f32, i32)).{ 1234, 5678 }; + printf("PolyStruct(%f, %i)\n", ps2.t_data, ps2.r_data); + } - test_simple_use :: proc () { - println("\n\nTesting a struct with `use`."); + test_polymorphic_with_defaults :: proc () { + println("\n\nTesting a polymorphic struct with default values."); - StructWithUse :: struct { - first_member : i32; + PolyStruct :: struct ($T, $R) { + t_data : T = 1234; + r_data : R = 5678; + } - use used_member : UsedMember; + PolyStructTyped :: #type PolyStruct(i32, f32); - last_member : i32; - } + ps := PolyStructTyped.{}; + printf("PolyStruct(%i, %f)\n", ps.t_data, ps.r_data); + } - UsedMember :: struct { - x : f32; - y : f32; - } + test_polymorphic_union_with_use :: proc () { + println("\n\nTesting a polymorphic union with use."); - swu := StructWithUse.{ 1234, UsedMember.{ 1, 2 }, 5678 }; + PolyStruct :: struct ($T, $R) { + use container : struct #union { + t_data : T; + r_data : R; + }; + } - swu2 := StructWithUse.{ - first_member = 1234, - used_member = UsedMember.{ 1, 2 }, - last_member = 5678, - }; + printf("%i == 8\n", sizeof PolyStruct(i32, [] u32)); - // This will not work. `use`d members cannot be set directly. - swu3 := StructWithUse.{ 1234, 1, 2, 5678 }; + ps : PolyStruct(i32, f64); + ps.t_data = 1234; + ps.r_data = 5678; + printf("%i, %d\n", ps.t_data, ps.r_data); + } - print_swu :: proc (use swu: StructWithUse) { - printf("StructWithUse(%i, (%f, %f), %i)\n", - first_member, x, y, last_member); - } + test_union_with_use :: proc () { + println("\n\nTesting a union with use."); - print_swu(swu); - print_swu(swu2); - } + Vec2 :: struct { + x : i32; + y : i32; + } - test_polymorphic :: proc () { - println("\n\nTesting a polymorphic struct."); + Union :: struct #union { + use container : Vec2; + name : str; + } - PolyStruct :: struct ($T, $R) { - t_data : T; - r_data : R; - } + u : Union; + u.x = 10; + u.y = 20; + printf("Union(%i, %i)\n", u.x, u.y); - ps1 : PolyStruct(i32, f32); - ps1.t_data = 1234; - ps1.r_data = 5678; - - printf("PolyStruct(%i, %f)\n", ps1.t_data, ps1.r_data); - - // Currently, this is how you have to do this. - ps2 := (#type PolyStruct(f32, i32)).{ 1234, 5678 }; - printf("PolyStruct(%f, %i)\n", ps2.t_data, ps2.r_data); - } - - test_polymorphic_with_defaults :: proc () { - println("\n\nTesting a polymorphic struct with default values."); - - PolyStruct :: struct ($T, $R) { - t_data : T = 1234; - r_data : R = 5678; - } - - PolyStructTyped :: #type PolyStruct(i32, f32); - - ps := PolyStructTyped.{}; - printf("PolyStruct(%i, %f)\n", ps.t_data, ps.r_data); - } + u.name = "Joe"; + printf("Union(%s)\n", u.name); + } + + test_polymorphic_union :: proc () { + println("\n\nTesting a polymorphic union."); + + PolyUnion :: struct ($T, $R) #union { + t_data : T; + r_data : R; + } + + pu : PolyUnion(str, i32); + pu.t_data = "Hello World."; + printf("PolyUnion(%s)\n", pu.t_data); + + pu.r_data = 0x4D2; + printf("PolyUnion(%i)\n", pu.r_data); + } } #include_file "core/std/js" \ No newline at end of file -- 2.25.1