small changes; setup sublime debugging
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 23 Jul 2020 22:16:08 +0000 (17:16 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 23 Jul 2020 22:16:08 +0000 (17:16 -0500)
.gitignore
docs/plan
include/onyxlex.h
misc/onyx.sublime-syntax
onyx
progs/ufc.onyx
src/onyxlex.c
src/onyxparser.c

index 75ef5be4ecd61a4114e8bd184e2c2744a170618f..6dc7d768fbbf05ce4eef06ab2beaad36ceaeb6b3 100644 (file)
@@ -6,3 +6,5 @@ test
 *.wasm
 *.html
 session.vim
+*.sublime-project
+*.sublime-workspace
\ No newline at end of file
index b9e28abff6d8a92450a18abf327cea7f75122d6c..57afcee5360206d64200c3b204f9ce061e1c6293 100644 (file)
--- a/docs/plan
+++ b/docs/plan
@@ -115,6 +115,8 @@ HOW:
             - Foreign functions will rename in the code because it is turning out
                 to be a nightmare to remove them. Lot's of refactoring... ugh
 
+        [ ] Package system
+
         [ ] Enum types
 
         [ ] Static pointers to sized data
index e82c3fb107353ff8c1ea8d357c7ffd49cc4f7565..cc27be0fa53c6466dcec4acc171113e87aa5012f 100644 (file)
@@ -11,53 +11,54 @@ typedef enum TokenType {
     Token_Type_Comment              = 258,
 
     Token_Type_Keyword_Struct       = 259,
-    Token_Type_Keyword_Use          = 260,
-    Token_Type_Keyword_Export       = 261,
-    Token_Type_Keyword_If           = 262,
-    Token_Type_Keyword_Else         = 263,
-    Token_Type_Keyword_Elseif       = 264,
-    Token_Type_Keyword_Return       = 265,
-    Token_Type_Keyword_Global       = 266,
-    Token_Type_Keyword_Proc         = 267,
-    Token_Type_Keyword_Cast         = 268,
-    Token_Type_Keyword_While        = 269,
-    Token_Type_Keyword_For          = 270,
-    Token_Type_Keyword_Break        = 271,
-    Token_Type_Keyword_Continue     = 272,
-    Token_Type_Keyword_Sizeof       = 273,
-
-    Token_Type_Right_Arrow          = 274,
-    Token_Type_Left_Arrow           = 275,
-    Token_Type_Empty_Block          = 276,
-
-    Token_Type_Greater_Equal        = 277,
-    Token_Type_Less_Equal           = 278,
-    Token_Type_Equal_Equal          = 279,
-    Token_Type_Not_Equal            = 280,
-    Token_Type_Plus_Equal           = 281,
-    Token_Type_Minus_Equal          = 282,
-    Token_Type_Star_Equal           = 283,
-    Token_Type_Fslash_Equal         = 284,
-    Token_Type_Percent_Equal        = 285,
-    Token_Type_And_Equal            = 286,
-    Token_Type_Or_Equal             = 287,
-    Token_Type_Xor_Equal            = 288,
-    Token_Type_And_And              = 289,
-    Token_Type_Or_Or                = 290,
-    Token_Type_Shift_Left           = 291,
-    Token_Type_Shift_Right          = 292,
-    Token_Type_Shift_Arith_Right    = 293,
-    Token_Type_Shl_Equal            = 294,
-    Token_Type_Shr_Equal            = 295,
-    Token_Type_Sar_Equal            = 296,
-
-    Token_Type_Symbol               = 297,
-    Token_Type_Literal_String       = 298,
-    Token_Type_Literal_Numeric      = 299,
-    Token_Type_Literal_True         = 300,
-    Token_Type_Literal_False        = 301,
-
-    Token_Type_Count                = 302,
+    Token_Type_Keyword_Enum         = 260,
+    Token_Type_Keyword_Use          = 261,
+    Token_Type_Keyword_Export       = 262,
+    Token_Type_Keyword_If           = 263,
+    Token_Type_Keyword_Else         = 264,
+    Token_Type_Keyword_Elseif       = 265,
+    Token_Type_Keyword_Return       = 266,
+    Token_Type_Keyword_Global       = 267,
+    Token_Type_Keyword_Proc         = 268,
+    Token_Type_Keyword_Cast         = 269,
+    Token_Type_Keyword_While        = 270,
+    Token_Type_Keyword_For          = 271,
+    Token_Type_Keyword_Break        = 272,
+    Token_Type_Keyword_Continue     = 273,
+    Token_Type_Keyword_Sizeof       = 274,
+
+    Token_Type_Right_Arrow          = 275,
+    Token_Type_Left_Arrow           = 276,
+    Token_Type_Empty_Block          = 277,
+
+    Token_Type_Greater_Equal        = 278,
+    Token_Type_Less_Equal           = 279,
+    Token_Type_Equal_Equal          = 280,
+    Token_Type_Not_Equal            = 281,
+    Token_Type_Plus_Equal           = 282,
+    Token_Type_Minus_Equal          = 283,
+    Token_Type_Star_Equal           = 284,
+    Token_Type_Fslash_Equal         = 285,
+    Token_Type_Percent_Equal        = 286,
+    Token_Type_And_Equal            = 287,
+    Token_Type_Or_Equal             = 288,
+    Token_Type_Xor_Equal            = 289,
+    Token_Type_And_And              = 290,
+    Token_Type_Or_Or                = 291,
+    Token_Type_Shift_Left           = 292,
+    Token_Type_Shift_Right          = 293,
+    Token_Type_Shift_Arith_Right    = 294,
+    Token_Type_Shl_Equal            = 295,
+    Token_Type_Shr_Equal            = 296,
+    Token_Type_Sar_Equal            = 297,
+
+    Token_Type_Symbol               = 298,
+    Token_Type_Literal_String       = 299,
+    Token_Type_Literal_Numeric      = 300,
+    Token_Type_Literal_True         = 301,
+    Token_Type_Literal_False        = 302,
+
+    Token_Type_Count                = 303,
 } TokenType;
 
 typedef struct OnyxFilePos {
index ad937c44593c13acc1cf346eb2533cb77ae98e45..24416dced4fdf468207640bda3d6f565a1cbd4f2 100644 (file)
@@ -23,11 +23,11 @@ contexts:
     # strings in YAML. When using single quoted strings, only single quotes
     # need to be escaped: this is done by using two single quotes next to each
     # other.
-    - match: '\b(struct|proc|use|global|if|elseif|else|for|while|do|break|continue|return|as|sizeof)\b'
+    - match: '\b(struct|proc|use|global|enum|if|elseif|else|for|while|do|break|continue|return|as|sizeof)\b'
       scope: keyword.control.onyx
 
     - match: '\b(unknown|bool|void|i8|u8|i16|u16|i32|u32|i64|u64|f32|f64|rawptr)\b'
-      scope: keyword.type.onyx
+      scope: constant.type.onyx
 
     - match: '\b(true|false)\b'
       scope: constant.boolean.onyx
diff --git a/onyx b/onyx
index 3d51e398539fae28ab568d20e94f047d11454acd..650cbc1f581689e85dcec9073be4f227ff1aeeff 100755 (executable)
Binary files a/onyx and b/onyx differ
index 2a0103ed6d8b963cdb559248767dedb90b2c2b11..5ab2af7920367f4b069e2d853406a73321dbfb41 100644 (file)
@@ -62,6 +62,10 @@ dot :: proc (v: Vec2, u: Vec2) -> f32 {
        return v.x * u.x + v.y * u.y;
 }
 
+
+// SomeType :: enum (u32) { Value1, Value2 }
+
+
 proc #export "main" {
        vec := alloc(sizeof Vec2) as ^Vec2;
        vec.x = 5.0f;
index 75eafd588d1dea3098a168488d685fe23ff3bf86..43a4dab6ac715726578964033b22cda28e837e22 100644 (file)
@@ -143,6 +143,7 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) {
     }
 
     LITERAL_TOKEN("struct",     1, Token_Type_Keyword_Struct);
+    LITERAL_TOKEN("enum"  ,     1, Token_Type_Keyword_Enum);
     LITERAL_TOKEN("use",        1, Token_Type_Keyword_Use);
     LITERAL_TOKEN("if",         1, Token_Type_Keyword_If);
     LITERAL_TOKEN("elseif",     1, Token_Type_Keyword_Elseif);
index 9e46d397749554c6abd6f7b3de1b3b35a4207a16..f27fb0a97c0c76677e6e42734f187aa72d6b56f8 100644 (file)
@@ -1056,6 +1056,10 @@ static AstTyped* parse_top_level_expression(OnyxParser* parser) {
     else if (parser->curr->type == Token_Type_Keyword_Struct) {
         return (AstTyped *) parse_struct(parser);
     }
+    else if (parser->curr->type == Token_Type_Keyword_Enum) {
+        consume_token(parser);
+        return (AstTyped *) &error_node;
+    }
     else {
         return parse_expression(parser);
     }