From 75af429627a313e620d9490ff62470314115876b Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 25 May 2020 16:47:38 -0500 Subject: [PATCH] Starting on the semantic pass phase --- docs/plan | 24 ++++++++++++++---------- docs/thoughts | 24 ++++++++++++++++++++++++ onyx | Bin 83216 -> 83176 bytes onyxparser.c | 7 +++++++ onyxutils.c | 22 ---------------------- progs/minimal.onyx | 4 ++-- 6 files changed, 47 insertions(+), 34 deletions(-) create mode 100644 docs/thoughts diff --git a/docs/plan b/docs/plan index 666e18db..0d11788d 100644 --- a/docs/plan +++ b/docs/plan @@ -9,15 +9,20 @@ WHAT: WHY: ONYX was made to help me learn about compiler design. +END GOAL: + ONYX will be used to make a simple-ish game for the browser that leverages + WASM and WebGL for a performant experience. Language design will reflect the + needs of the game programming. + FEATURES: - Strong type system - - Smart package loading - - Structs and enums - functions (no anonymous functions) + - Structs and enums - Control structures if, for, switch - pointers - inferred typing + - Smart package loading - defer ? polymorphic functions @@ -28,13 +33,13 @@ EXAMPLE CODE: use "core"; // Looks for "core.onyx" in the current directory -Foo :: struct { x: i32, y: i32 }; +Foo :: struct { x i32, y i32 }; -export add :: (a: i32, b: i32) -> i32 { - return a + b; +export add :: proc (a i32, b i32) -> i32 { + return a + b; }; -foo :: (a: i32) -> Foo { +foo :: proc (a i32) -> Foo { return Foo { x = a, y = 0 }; } @@ -42,16 +47,15 @@ MVP CODE: /* Comments need to be parsed */ -export proc add :: (a i32, b i32) -> i32 { +export add :: proc (a i32, b i32) -> i32 { return a + b; } -export proc max :: (a i32, b i32) -> i32 { +export max :: proc (a i32, b i32) -> i32 { /* Curly braces are required */ - if a > b { return a; } else { return b; } -} \ No newline at end of file +} diff --git a/docs/thoughts b/docs/thoughts new file mode 100644 index 00000000..ddf255fb --- /dev/null +++ b/docs/thoughts @@ -0,0 +1,24 @@ +Type checking at parse time: + Why couldn't this work? + * Every variable is of known type or the type must be known by immediate assignment + * This requires that functions are declared in a particular order like C + * This also requires immediate evaluation of external symbols (C #include style) + - Don't like this at all + - Want a proper module system + + /* foo.onyx */ + foo :: proc (a i32) -> f32 { + return a as f32; + } + + + /* main.onyx */ + use "foo"; + + export main :: proc () -> void { + a := 2.0f + foo(5); + } + + foo(5) would have a left node of SYMBOL:foo + This will be resolved in a later stage between the parsing and semantic pass + diff --git a/onyx b/onyx index 6ec79ea91f5dad35682e1545c61ee8a15a197f14..9015a7d81bda3362b478f258095335967a094e0e 100755 GIT binary patch delta 14822 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, + ONYX_MESSAGE_TYPE_UNKNOWN_SYMBOL, + sym_token->pos, sym_token->token); + onyx_token_null_toggle(*sym_token); + } // TODO: Handle calling a function return sym_node; diff --git a/onyxutils.c b/onyxutils.c index 02d191f5..5fdddcde 100644 --- a/onyxutils.c +++ b/onyxutils.c @@ -2,26 +2,4 @@ void onyx_ast_print(OnyxAstNode* node) { if (node == NULL) return; - - bh_printf("%s <%d> ", onyx_ast_node_kind_string(node->kind), node->flags); - if (node->token) - bh_printf("[%b] ", node->token->token, (int) node->token->length); - - if ((i64) node->left > 10) { // HACK: but okay - bh_printf("("); - onyx_ast_print(node->left); - bh_printf(") "); - } - if ((i64) node->right > 10) { // HACK: but okay - bh_printf("("); - onyx_ast_print(node->right); - bh_printf(")"); - } - - if (node->next) { - bh_printf("{"); - onyx_ast_print(node->next); - bh_printf("}"); - } - } diff --git a/progs/minimal.onyx b/progs/minimal.onyx index 5b82b699..ee2e6516 100644 --- a/progs/minimal.onyx +++ b/progs/minimal.onyx @@ -8,13 +8,13 @@ export add :: proc (a i32, b i32) -> i32 { return a + b; } -c :: proc () -> void --- - export mul :: proc (a i32, b i32) -> i32 { + /* Typechecked */ c: const i32 = a - b; /* Don't love this syntax, but it's easy to parse so whatever Inferred type, but constant */ + /* a and b are both i32, so i32 + i32 is i32 so d is i32 */ d: const = a + b; return c * d; -- 2.25.1