fixed: random bugs with expected semi-colons
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 8 Feb 2024 23:05:54 +0000 (17:05 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 8 Feb 2024 23:05:54 +0000 (17:05 -0600)
compiler/src/parser.c
tests/bugs/injecting_global_symbol_order.onyx

index e39791182d43d21aa8223426773dabb4c8ad9092..d63bd07f0512949795259cfeb534c01e8159e142 100644 (file)
@@ -3857,6 +3857,7 @@ static void parse_top_level_statement(OnyxParser* parser) {
                 injection_point->alias = parse_expression(parser, 0);
                 injection_point->token = injection_point->alias->token;
 
+                consume_token_if_next(parser, Token_Type_Inserted_Semicolon);
                 if (peek_token(0)->type == '{') {
                     if (parser->injection_point) {
                         onyx_report_error(dir_token->pos, Error_Critical, "#inject blocks cannot be nested.");
@@ -3952,7 +3953,14 @@ static void parse_top_level_statement(OnyxParser* parser) {
             break;
         }
 
-        default: break;
+        case ';':
+        case Token_Type_Inserted_Semicolon:
+            break;
+
+        default:
+            onyx_report_error(parser->curr->pos, Error_Critical, "Unexpected token in top-level statement, '%s'", token_name(parser->curr));
+            parser->hit_unexpected_token = 1;
+            break;
     }
 
     return;
@@ -4059,6 +4067,7 @@ static void parse_import_statement(OnyxParser* parser, OnyxToken *token) {
     import_node->imported_package = package_node;
     import_node->import_package_itself = 1;
 
+    consume_token_if_next(parser, Token_Type_Inserted_Semicolon);
     if (consume_token_if_next(parser, '{')) {
         import_node->specified_imports = 1;
         import_node->import_package_itself = 0;
index d1351865dcaa86e0be534618a24609cdd23587df..60c0fcf205effc521ba79ad83e0b2da2956703d7 100644 (file)
@@ -8,7 +8,7 @@ use core {
 isPrime :: (n: i64) => {
     max := math.sqrt(n);
 
-    for x: iter.range(cast(u64, 2), max) {
+    for x in iter.range(cast(u64, 2), max) {
         if n % x == 0 {
             return false;
         }
@@ -25,7 +25,7 @@ prime_generator :: () => iter.counter(2, i64)->filter(isPrime)
 }
 
 main :: () {
-    for prime: prime_generator() |> iter.take(10) {
+    for prime in prime_generator() |> iter.take(10) {
         println(prime);
     }
 }