added: per-file flag for optional semicolons
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 19 Feb 2024 03:13:38 +0000 (21:13 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 19 Feb 2024 03:13:38 +0000 (21:13 -0600)
compiler/include/lex.h
compiler/src/lex.c

index 2e721c777570b5e3da9449fa605250986335477f..5e2981df197724583add89e7f9fb116cdf8d79f6 100644 (file)
@@ -115,6 +115,7 @@ typedef struct OnyxTokenizer {
 
     bh_arr(OnyxToken) tokens;
 
+    b32 optional_semicolons : 1;
     b32 insert_semicolon: 1;
 } OnyxTokenizer;
 
index 0efad284352c17cdf7801a4c007726ac8a38e2da..00459736158e457e489a839f8e5d029f70d5158c 100644 (file)
@@ -158,7 +158,7 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) {
 
         switch (*tokenizer->curr) {
             case '\n':
-                if (tokenizer->insert_semicolon && context.options->enable_optional_semicolons) {
+                if (tokenizer->insert_semicolon && tokenizer->optional_semicolons) {
                     OnyxToken semicolon_token;
                     semicolon_token.type = Token_Type_Inserted_Semicolon;
                     semicolon_token.text = "; ";
@@ -219,6 +219,11 @@ whitespace_skipped:
         }
 
         tk.length = tokenizer->curr - tk.text - 2;
+
+        if (bh_arr_length(tokenizer->tokens) == 0 && bh_str_starts_with(tk.text, "+optional_semicolons")) {
+            tokenizer->optional_semicolons = 1;
+        }
+
         goto token_parsed;
     }
 
@@ -558,6 +563,7 @@ OnyxTokenizer onyx_tokenizer_create(bh_allocator allocator, bh_file_contents *fc
         .line_start     = fc->data,
         .tokens         = NULL,
 
+        .optional_semicolons = context.options->enable_optional_semicolons,
         .insert_semicolon = 0,
     };