From 2a0c9b18927812692cda8d84af71a736c0c64663 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 15 Jul 2020 19:27:48 -0500 Subject: [PATCH] MAJOR CHANGES TO THE LANGUAGE Removed some keywords and changed the way somethings work --- docs/thoughts | 122 +++++++++++++++++--- include/onyxastnodes.h | 54 ++++++--- include/onyxparser.h | 20 +++- misc/onyx.vim | 4 +- onyx | Bin 233440 -> 232280 bytes progs/basic.onyx | 18 ++- progs/other.onyx | 4 +- progs/print_funcs.onyx | 10 +- progs/test.onyx | 46 ++++++-- src/onyx.c | 48 +++----- src/onyxchecker.c | 248 +++++++++++++++++++++++++++-------------- src/onyxlex.c | 4 +- src/onyxparser.c | 246 ++++++++++++++++++++-------------------- src/onyxsempass.c | 112 +++++++++---------- src/onyxsymres.c | 142 +++++++++++++---------- src/onyxutils.c | 6 + src/onyxwasm.c | 113 +++++++++++-------- 17 files changed, 734 insertions(+), 463 deletions(-) diff --git a/docs/thoughts b/docs/thoughts index 639488db..b9402481 100644 --- a/docs/thoughts +++ b/docs/thoughts @@ -1,18 +1,104 @@ -Memory design: - - Pointers will work very similar to how they do in C - - A pointer is a u32 - - Pointers will be notated: - ^u32 <- Pointer to u32 - - - Pointer operations will be: - * will take the address of a value - - This operation will not be defined well for a while - - You can't take the address of a local since it doesn't exist in memory - - << will take the value out of a pointer - - Example use: - {{{ - ptr: ^i32 = 0; // Address starting at 0 - ptr_ptr := ^ptr; - }}} +Memory design: + - Pointers will work very similar to how they do in C + - A pointer is a u32 + - Pointers will be notated: + ^u32 <- Pointer to u32 + + - Pointer operations will be: + * will take the address of a value + - This operation will not be defined well for a while + - You can't take the address of a local since it doesn't exist in memory + + << will take the value out of a pointer + + Example use: + {{{ + ptr: ^i32 = 0; // Address starting at 0 + ptr_ptr := ^ptr; + }}} + + + + + +Treating top level declarations differently: + Currently, top level declarations are treated special, as they would correspond to + the structure of the WASM that would be generated. For example, + + inc :: proc (a: i32) -> i32 { return a + 1; } + + would be turned into an AstFunction node with a token of 'inc', and, + + global :: 5 + + would be turned into a AstGlobal node with a token of 'global'. + + The problem I have with this approach is it creates an inconsistency when thinking + about what is going on in the various stages in the compiler. + + A better approach would be to have a AstBinding node, that represents a binding + from a symbol, stored on the token member, to another Ast Node. The node definition + would be: + + struct AstBinding { AstTyped base; AstNode* node; } + + For a function definition such as 'inc' above, the node structure would look like: + + AstBinding (inc) + .node -> AstFunction + .params -> AstLocal (a) -> NULL + .body -> ... + + This way, in symbol resolution, the top level bindings are added to the table and + there are no special cases. + + Other nuances: + + global :: 5 - This would replace all instances of 'global' with the integer constant + 5. This would not make a global in WASM. + + global := 5 - This would work as expected but will make generating the WASM more difficult. + This feature may wait to come back. + + global :: i32 - This would work as a type alias. 'global' would have the type node as it's 'node' + + print :: proc #foriegn "host" "print" (...) --- + + +Explicit overriden functions: + Considered syntax: + + foo_i32 :: proc (val: i32) -> i32 --- + foo_i64 :: proc (val: i64) -> i64 --- + foo_f32 :: proc (val: f32) -> f32 --- + foo_f64 :: proc (val: f64) -> f64 --- + + foo :: proc #overload { + foo_i32, foo_i64, foo_f32, foo_f64 + } + + foo(10); // calls foo_i32 + foo(2.0f); // calls foo_f32 + + + min_f32 :: proc #intrinsic (a: f32, b:f32) -> f32 --- + min_f64 :: proc #intrinsic (a: f64, b:f64) -> f64 --- + + min_i32 :: proc (a: i32, b: i32) -> i32 { + least := a; + if b < a { least = b; } + + return least; + } + + min_i64 :: proc (a: i64, b: i64) -> i64 { + least := a; + if b < a { least = b; } + + return least; + } + + min :: proc #overload { min_i32, min_i64, min_f32, min_f64 } + + min(2, 5); + min(4.5, 10.4); diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index a39b876c..ba6fe398 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -11,28 +11,33 @@ typedef struct AstBinOp AstBinaryOp; typedef struct AstAssign AstAssign; typedef struct AstNumLit AstNumLit; typedef struct AstLocal AstLocal; -typedef struct AstLocalGroup AstLocalGroup; typedef struct AstReturn AstReturn; -typedef struct AstBlock AstBlock; -typedef struct AstIf AstIf; -typedef struct AstWhile AstWhile; -typedef struct AstFunction AstFunction; -typedef struct AstForeign AstForeign; -typedef struct AstGlobal AstGlobal; typedef struct AstCall AstCall; typedef struct AstIntrinsicCall AstIntrinsicCall; typedef struct AstArgument AstArgument; -typedef struct AstUse AstUse; + +typedef struct AstBlock AstBlock; +typedef struct AstIf AstIf; +typedef struct AstWhile AstWhile; +typedef struct AstLocalGroup AstLocalGroup; typedef struct AstType AstType; typedef struct AstBasicType AstBasicType; typedef struct AstPointerType AstPointerType; +typedef struct AstFunctionType AstFunctionType; + +typedef struct AstBinding AstBinding; +typedef struct AstFunction AstFunction; +typedef struct AstForeign AstForeign; +typedef struct AstGlobal AstGlobal; +typedef struct AstUse AstUse; typedef enum AstKind { Ast_Kind_Error, Ast_Kind_Program, Ast_Kind_Use, + Ast_Kind_Binding, Ast_Kind_Function, Ast_Kind_Foreign, Ast_Kind_Block, @@ -44,9 +49,12 @@ typedef enum AstKind { Ast_Kind_Unary_Op, Ast_Kind_Binary_Op, + Ast_Kind_Type_Start, Ast_Kind_Type, Ast_Kind_Basic_Type, Ast_Kind_Pointer_Type, + Ast_Kind_Function_Type, + Ast_Kind_Type_End, Ast_Kind_Literal, Ast_Kind_Param, @@ -76,6 +84,7 @@ typedef enum AstFlags { // Function flags Ast_Flag_Inline = BH_BIT(8), Ast_Flag_Intrinsic = BH_BIT(9), + Ast_Flag_Foreign = BH_BIT(10), } AstFlags; typedef enum UnaryOp { @@ -137,10 +146,10 @@ struct AstTyped { // Expression Nodes struct AstBinOp { AstTyped base; BinaryOp operation; AstTyped *left, *right; }; struct AstUnaryOp { AstTyped base; UnaryOp operation; AstTyped *expr; }; -struct AstAssign { AstNode base; AstTyped* lval; AstTyped* expr; }; +struct AstAssign { AstNode base; AstTyped* lval; AstTyped* expr; }; struct AstNumLit { AstTyped base; union { i32 i; i64 l; f32 f; f64 d; } value; }; struct AstLocal { AstTyped base; AstLocal *prev_local; }; -struct AstReturn { AstNode base; AstTyped* expr; }; +struct AstReturn { AstNode base; AstTyped* expr; }; struct AstCall { AstTyped base; AstArgument *arguments; AstNode *callee; }; struct AstArgument { AstTyped base; AstTyped *value; }; @@ -166,12 +175,26 @@ struct AstIf { struct AstType { AstKind kind; u32 flags; char* name; }; struct AstBasicType { AstType base; Type* type; }; struct AstPointerType { AstType base; AstType* elem; }; +struct AstFunctionType { AstType base; bh_arr(AstType *) params; AstType* results; }; // Top level nodes -struct AstFunction { AstTyped base; AstBlock *body; AstLocal *params; }; -struct AstForeign { AstNode base; OnyxToken *mod_token, *name_token; AstNode *import; }; +struct AstBinding { AstTyped base; AstNode* node; }; +struct AstForeign { AstNode base; OnyxToken *mod_token, *name_token; AstNode *import; }; struct AstGlobal { AstTyped base; AstTyped *initial_value; }; -struct AstUse { AstNode base; OnyxToken *filename; }; +struct AstUse { AstNode base; OnyxToken *filename; }; +struct AstFunction { + AstTyped base; + + AstBlock *body; + AstLocal *params; + + // NOTE: Used when a function is exported with a specific name + char* exported_name; + + // NOTE: Used when the function is declared as foreign + OnyxToken* foreign_module; + OnyxToken* foreign_name; +}; typedef enum OnyxIntrinsic { ONYX_INTRINSIC_UNDEFINED, @@ -206,9 +229,10 @@ typedef enum OnyxIntrinsic { struct AstIntrinsicCall { AstTyped base; AstArgument *arguments; OnyxIntrinsic intrinsic; }; typedef struct OnyxProgram { - bh_arr(AstGlobal *) globals; + bh_arr(AstBinding *) top_level_bindings; + bh_arr(AstNode *) nodes_to_process; + bh_arr(AstFunction *) functions; - bh_arr(AstForeign *) foreigns; } OnyxProgram; diff --git a/include/onyxparser.h b/include/onyxparser.h index fbf30cbb..fba6bfaf 100644 --- a/include/onyxparser.h +++ b/include/onyxparser.h @@ -7,20 +7,34 @@ #include "onyxmsgs.h" #include "onyxastnodes.h" +typedef struct ParseResults { + // NOTE: The allocator used to make the arrays below + bh_allocator allocator; + + bh_arr(AstUse *) uses; + bh_arr(AstBinding *) bindings; + + // NOTE: Contains all the nodes that will need some processing (symbol resolution, type checking) + bh_arr(AstNode *) nodes_to_process; +} ParseResults; + typedef struct OnyxParser { - OnyxTokenizer *tokenizer; // NOTE: not used since all tokens are lexed before parsing starts + bh_allocator allocator; + + // NOTE: not used since all tokens are lexed before parsing starts + OnyxTokenizer *tokenizer; OnyxToken *prev_token; OnyxToken *curr_token; OnyxMessages *msgs; - bh_allocator allocator; + ParseResults results; } OnyxParser; const char* onyx_ast_node_kind_string(AstKind kind); void* onyx_ast_node_new(bh_allocator alloc, i32 size, AstKind kind); OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer, OnyxMessages* msgs); void onyx_parser_free(OnyxParser* parser); -bh_arr(AstNode *) onyx_parse(OnyxParser *parser); +ParseResults onyx_parse(OnyxParser *parser); #endif // #ifndef ONYXPARSER_H diff --git a/misc/onyx.vim b/misc/onyx.vim index ca189a5e..23ebf5b7 100644 --- a/misc/onyx.vim +++ b/misc/onyx.vim @@ -10,9 +10,9 @@ endif let s:cpo_save = &cpo set cpo&vim -syn keyword onyxKeyword struct proc use export foreign +syn keyword onyxKeyword struct proc use syn keyword onyxKeyword if elseif else -syn keyword onyxKeyword for while loop return do +syn keyword onyxKeyword for while do syn keyword onyxKeyword break continue return syn keyword onyxKeyword as diff --git a/onyx b/onyx index be28846fee968f54df9eca91182a3ede8434a47d..9fb8a4b9ebbe69027e5cec4721d2b8fd8a5fc919 100755 GIT binary patch literal 232280 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
    U9HQ_3&_lE{AvU$Yw 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 literal 233440 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%0D^E=XXt7#f!q)Dx-%;o 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 diff --git a/progs/basic.onyx b/progs/basic.onyx index d8e5bcb8..e7a0c5f0 100644 --- a/progs/basic.onyx +++ b/progs/basic.onyx @@ -4,7 +4,9 @@ pointer_test :: proc { p := 0 as ^i32; } -print :: foreign "host" "print" proc (val: i32) --- +print :: proc + #foreign "host" "print" + (val: i32) --- test :: proc (a: bool) -> bool { return !a; @@ -16,10 +18,22 @@ foo :: proc (n: i32) -> i32 { return or_i32(a, b); } -export main :: proc { +// THOUGHT: This could be a WASM global that is immutable and it +// would be accessed using global.get +// OR +// This could be immediately substituted in the expression tree. i.e. +// 4 + global => 4 + (5 * 2 + 6) +global :: 5 * 2 + 6 + +// WASM globals would be declared as such: +// wasm_global :: global i32 + +main :: proc #export { a := 16; print(clz_i32(a)); + print(4 + global); + b := 1 + foo(2); print(b); diff --git a/progs/other.onyx b/progs/other.onyx index 7bab1efb..70b9a52e 100644 --- a/progs/other.onyx +++ b/progs/other.onyx @@ -4,7 +4,7 @@ other_value :: proc (n: i32) -> i32 { return 8675309 + something_else(n) + global_value; } -export fib :: proc (n: i32) -> i32 { +fib :: proc #export (n: i32) -> i32 { if n == 0 { return 1; } if n == 1 { return 1; } @@ -24,7 +24,7 @@ export fib :: proc (n: i32) -> i32 { return a; } -export factorial :: proc (n: i32) -> i32 { +factorial :: proc #export (n: i32) -> i32 { if n <= 1 { return 1; } f := 1; diff --git a/progs/print_funcs.onyx b/progs/print_funcs.onyx index bb2a3d60..3ac27828 100644 --- a/progs/print_funcs.onyx +++ b/progs/print_funcs.onyx @@ -1,5 +1,5 @@ -print_bool :: foreign "host" "print" proc (value: bool) --- -print_i32 :: foreign "host" "print" proc (value: i32) --- -print_f32 :: foreign "host" "print" proc (value: f32) --- -print_i64 :: foreign "host" "print" proc (value: i64) --- -print_f64 :: foreign "host" "print" proc (value: f64) --- +print_bool :: proc #foreign "host" "print" (value: bool) --- +print_i32 :: proc #foreign "host" "print" (value: i32) --- +print_f32 :: proc #foreign "host" "print" (value: f32) --- +print_i64 :: proc #foreign "host" "print" (value: i64) --- +print_f64 :: proc #foreign "host" "print" (value: f64) --- diff --git a/progs/test.onyx b/progs/test.onyx index db16c2b9..6214b278 100644 --- a/progs/test.onyx +++ b/progs/test.onyx @@ -6,17 +6,46 @@ something_else :: proc (n: i32) -> i32 { return 100 * n + global_value; } -global_value := 100 - -export in_unit_circle :: proc (x: f32, y: f32) -> bool { +in_unit_circle :: proc #export (x: f32, y: f32) -> bool { return (x * x) + (y * y) < 1.0f; } +echo :: proc (n: i32) -> i32 { + print_i32(n); + return n; +} + +global_value :: echo(fib(4) * 2); + +local_brute :: proc { + + a := 123; + b := 123.0f; + c := 123.0; + + { + a := 5.0f; + b := 12.3; + + print_f32(a); + print_f64(b); + } + + print_i32(a); + print_f32(b); + print_f64(c); +} + +main3 :: proc #export { + local_brute(); +} + + // This is the entry point -export main2 :: proc { +main2 :: proc #export { i := 0; while i < 10 { - res :: fib(i); + res :: clz_i32(fib(i)); print_i32(res); i += 1; } @@ -61,7 +90,7 @@ export main2 :: proc { // z : f32; // } -export main :: proc { +main :: proc #export { print_i32(clz_i32(16)); print_f32(sqrt_f32(2.0f)); @@ -69,10 +98,9 @@ export main :: proc { print_bool(in_unit_circle(0.5f, 0.5f)); big_num := fib(factorial(4)); - something :: other_value(0); - global_value = 1000; - something_else :: other_value(0); + something :: other_value(0); + something_else :: other_value(1); condition := big_num < something; diff --git a/src/onyx.c b/src/onyx.c index 7c2abd82..b7c24e29 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -106,7 +106,7 @@ static void compile_opts_free(OnyxCompileOptions* opts) { bh_arr_free(opts->files); } -static bh_arr(AstNode *) parse_source_file(CompilerState* compiler_state, bh_file_contents* file_contents) { +static ParseResults parse_source_file(CompilerState* compiler_state, bh_file_contents* file_contents) { // NOTE: Maybe don't want to recreate the tokenizer and parser for every file if (compiler_state->options->verbose_output) bh_printf("[Lexing] %s\n", file_contents->filename); @@ -142,35 +142,9 @@ static CompilerProgress process_source_file(CompilerState* compiler_state, char* bh_table_put(bh_file_contents, compiler_state->loaded_files, (char *) filename, fc); fc = bh_table_get(bh_file_contents, compiler_state->loaded_files, (char *) filename); - bh_arr(AstNode *) top_nodes = parse_source_file(compiler_state, &fc); + ParseResults results = parse_source_file(compiler_state, &fc); - bh_arr(AstUse *) uses = NULL; - - bh_arr_each(AstNode *, node, top_nodes) { - switch ((*node)->kind) { - case Ast_Kind_Use: - bh_arr_push(uses, (AstUse *) *node); - break; - - case Ast_Kind_Global: - bh_arr_push(compiler_state->program.globals, (AstGlobal *) (*node)); - break; - - case Ast_Kind_Foreign: - bh_arr_push(compiler_state->program.foreigns, (AstForeign *) (*node)); - break; - - case Ast_Kind_Function: - bh_arr_push(compiler_state->program.functions, (AstFunction *) (*node)); - break; - - default: - assert(("Invalid top level node", 0)); - break; - } - } - - bh_arr_each(AstUse *, use_node, uses) { + bh_arr_each(AstUse *, use_node, results.uses) { char* formatted_name = bh_aprintf( global_heap_allocator, "%b.onyx", @@ -179,7 +153,11 @@ static CompilerProgress process_source_file(CompilerState* compiler_state, char* bh_arr_push(compiler_state->queued_files, formatted_name); } - bh_arr_free(uses); + bh_arr_each(AstBinding *, binding_node, results.bindings) + bh_arr_push(compiler_state->program.top_level_bindings, *binding_node); + + bh_arr_each(AstNode *, node, results.nodes_to_process) + bh_arr_push(compiler_state->program.nodes_to_process, *node); if (onyx_message_has_errors(&compiler_state->msgs)) { return ONYX_COMPILER_PROGRESS_FAILED_PARSE; @@ -191,8 +169,7 @@ static CompilerProgress process_source_file(CompilerState* compiler_state, char* static void compiler_state_init(CompilerState* compiler_state, OnyxCompileOptions* opts) { compiler_state->options = opts; - bh_arr_new(global_heap_allocator, compiler_state->program.foreigns, 4); - bh_arr_new(global_heap_allocator, compiler_state->program.globals, 4); + bh_arr_new(global_heap_allocator, compiler_state->program.top_level_bindings, 4); bh_arr_new(global_heap_allocator, compiler_state->program.functions, 4); bh_arena_init(&compiler_state->msg_arena, opts->allocator, 4096); @@ -289,9 +266,10 @@ int main(int argc, char *argv[]) { OnyxCompileOptions compile_opts = compile_opts_parse(global_heap_allocator, argc, argv); CompilerState compile_state = { .program = { - .foreigns = NULL, - .globals = NULL, - .functions = NULL + .top_level_bindings = NULL, + .nodes_to_process = NULL, + + .functions = NULL, }, .wasm_mod = { 0 } }; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 531ebd32..365a11c9 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -1,26 +1,26 @@ #define BH_DEBUG #include "onyxsempass.h" -static void check_function(OnyxSemPassState* state, AstFunction* func); -static void check_block(OnyxSemPassState* state, AstBlock* block); -static void check_statement_chain(OnyxSemPassState* state, AstNode* start); -static void check_statement(OnyxSemPassState* state, AstNode* stmt); -static void check_assignment(OnyxSemPassState* state, AstAssign* assign); -static void check_return(OnyxSemPassState* state, AstReturn* retnode); -static void check_if(OnyxSemPassState* state, AstIf* ifnode); -static void check_while(OnyxSemPassState* state, AstWhile* whilenode); -static void check_call(OnyxSemPassState* state, AstCall* call); -static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop); -static void check_expression(OnyxSemPassState* state, AstTyped* expr); -static void check_global(OnyxSemPassState* state, AstGlobal* global); - -static void check_assignment(OnyxSemPassState* state, AstAssign* assign) { +static b32 check_function(OnyxSemPassState* state, AstFunction* func); +static b32 check_block(OnyxSemPassState* state, AstBlock* block); +static b32 check_statement_chain(OnyxSemPassState* state, AstNode* start); +static b32 check_statement(OnyxSemPassState* state, AstNode* stmt); +static b32 check_assignment(OnyxSemPassState* state, AstAssign* assign); +static b32 check_return(OnyxSemPassState* state, AstReturn* retnode); +static b32 check_if(OnyxSemPassState* state, AstIf* ifnode); +static b32 check_while(OnyxSemPassState* state, AstWhile* whilenode); +static b32 check_call(OnyxSemPassState* state, AstCall* call); +static b32 check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop); +static b32 check_expression(OnyxSemPassState* state, AstTyped* expr); +static b32 check_global(OnyxSemPassState* state, AstGlobal* global); + +static b32 check_assignment(OnyxSemPassState* state, AstAssign* assign) { if (assign->lval->kind == Ast_Kind_Symbol) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_UNRESOLVED_SYMBOL, assign->lval->token->pos, assign->lval->token->text, assign->lval->token->length); - return; + return 1; } if ((assign->lval->flags & Ast_Flag_Const) != 0 && assign->lval->type != NULL) { @@ -28,7 +28,7 @@ static void check_assignment(OnyxSemPassState* state, AstAssign* assign) { ONYX_MESSAGE_TYPE_ASSIGN_CONST, assign->base.token->pos, assign->lval->token->text, assign->lval->token->length); - return; + return 1; } if ((assign->lval->flags & Ast_Flag_Lval) == 0) { @@ -36,14 +36,14 @@ static void check_assignment(OnyxSemPassState* state, AstAssign* assign) { ONYX_MESSAGE_TYPE_NOT_LVAL, assign->base.token->pos, assign->lval->token->text, assign->lval->token->length); - return; + return 1; } if (assign->lval->type == NULL) { assign->lval->type = type_build_from_ast(state->node_allocator, assign->lval->type_node); } - check_expression(state, assign->expr); + if (check_expression(state, assign->expr)) return 1; if (assign->lval->type == NULL) { assign->lval->type = assign->expr->type; @@ -54,14 +54,16 @@ static void check_assignment(OnyxSemPassState* state, AstAssign* assign) { assign->base.token->pos, type_get_name(assign->lval->type), type_get_name(assign->expr->type)); - return; + return 1; } } + + return 0; } -static void check_return(OnyxSemPassState* state, AstReturn* retnode) { +static b32 check_return(OnyxSemPassState* state, AstReturn* retnode) { if (retnode->expr) { - check_expression(state, retnode->expr); + if (check_expression(state, retnode->expr)) return 1; if (!types_are_compatible(retnode->expr->type, state->expected_return_type)) { onyx_message_add(state->msgs, @@ -69,6 +71,7 @@ static void check_return(OnyxSemPassState* state, AstReturn* retnode) { retnode->expr->token->pos, type_get_name(retnode->expr->type), type_get_name(state->expected_return_type)); + return 1; } } else { if (state->expected_return_type->Basic.size > 0) { @@ -76,12 +79,15 @@ static void check_return(OnyxSemPassState* state, AstReturn* retnode) { ONYX_MESSAGE_TYPE_LITERAL, retnode->base.token->pos, "returning from non-void function without value"); + return 1; } } + + return 0; } -static void check_if(OnyxSemPassState* state, AstIf* ifnode) { - check_expression(state, ifnode->cond); +static b32 check_if(OnyxSemPassState* state, AstIf* ifnode) { + if (check_expression(state, ifnode->cond)) return 1; if (ifnode->cond->type == NULL || ifnode->cond->type->kind != Type_Kind_Basic @@ -91,15 +97,17 @@ static void check_if(OnyxSemPassState* state, AstIf* ifnode) { ONYX_MESSAGE_TYPE_LITERAL, ifnode->cond->token->pos, "expected boolean type for condition"); - return; + return 1; } - if (ifnode->true_block.as_if) check_statement(state, (AstNode *) ifnode->true_block.as_block); - if (ifnode->false_block.as_if) check_statement(state, (AstNode *) ifnode->false_block.as_block); + if (ifnode->true_block.as_if) if (check_statement(state, (AstNode *) ifnode->true_block.as_block)) return 1; + if (ifnode->false_block.as_if) if (check_statement(state, (AstNode *) ifnode->false_block.as_block)) return 1; + + return 0; } -static void check_while(OnyxSemPassState* state, AstWhile* whilenode) { - check_expression(state, whilenode->cond); +static b32 check_while(OnyxSemPassState* state, AstWhile* whilenode) { + if (check_expression(state, whilenode->cond)) return 1; if (whilenode->cond->type == NULL || whilenode->cond->type->kind != Type_Kind_Basic @@ -109,13 +117,13 @@ static void check_while(OnyxSemPassState* state, AstWhile* whilenode) { ONYX_MESSAGE_TYPE_LITERAL, whilenode->cond->token->pos, "expected boolean type for condition"); - return; + return 1; } - check_block(state, whilenode->body); + return check_block(state, whilenode->body); } -static void check_call(OnyxSemPassState* state, AstCall* call) { +static b32 check_call(OnyxSemPassState* state, AstCall* call) { AstFunction* callee = (AstFunction *) call->callee; if (callee->base.kind == Ast_Kind_Symbol) { @@ -123,7 +131,7 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { ONYX_MESSAGE_TYPE_UNRESOLVED_SYMBOL, callee->base.token->pos, callee->base.token->text, callee->base.token->length); - return; + return 1; } if (callee->base.kind != Ast_Kind_Function) { @@ -131,7 +139,7 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { ONYX_MESSAGE_TYPE_CALL_NON_FUNCTION, call->base.token->pos, callee->base.token->text, callee->base.token->length); - return; + return 1; } // NOTE: If we calling an intrinsic function, translate the @@ -207,7 +215,7 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { i32 arg_pos = 0; while (formal_param != NULL && actual_param != NULL) { - check_expression(state, (AstTyped *) actual_param); + if (check_expression(state, (AstTyped *) actual_param)) return 1; if (formal_param->base.type == NULL) { formal_param->base.type = type_build_from_ast(state->node_allocator, formal_param->base.type_node); @@ -221,7 +229,7 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { type_get_name(formal_param->base.type), arg_pos, type_get_name(actual_param->base.type)); - return; + return 1; } arg_pos++; @@ -234,7 +242,7 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { ONYX_MESSAGE_TYPE_LITERAL, call->base.token->pos, "too few arguments to function call"); - return; + return 1; } if (formal_param == NULL && actual_param != NULL) { @@ -242,20 +250,22 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { ONYX_MESSAGE_TYPE_LITERAL, call->base.token->pos, "too many arguments to function call"); - return; + return 1; } + + return 0; } -static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { - check_expression(state, binop->left); - check_expression(state, binop->right); +static b32 check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { + if (check_expression(state, binop->left)) return 1; + if (check_expression(state, binop->right)) return 1; if (binop->left->type == NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, binop->base.token->pos, NULL, 0); - return; + return 1; } if (binop->right->type == NULL) { @@ -263,7 +273,7 @@ static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, binop->base.token->pos, NULL, 0); - return; + return 1; } if (type_is_pointer(binop->left->type) @@ -272,7 +282,7 @@ static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { ONYX_MESSAGE_TYPE_LITERAL, binop->base.token->pos, "binary operations are not supported for pointers (yet)."); - return; + return 1; } if (!types_are_compatible(binop->left->type, binop->right->type)) { @@ -281,7 +291,7 @@ static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { binop->base.token->pos, type_get_name(binop->left->type), type_get_name(binop->right->type)); - return; + return 1; } if (binop->operation >= Binary_Op_Equal @@ -290,39 +300,44 @@ static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { } else { binop->base.type = binop->left->type; } + + return 0; } -static void check_expression(OnyxSemPassState* state, AstTyped* expr) { +static b32 check_expression(OnyxSemPassState* state, AstTyped* expr) { + if (expr->kind > Ast_Kind_Type_Start && expr->kind < Ast_Kind_Type_End) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + (OnyxFilePos) { 0 }, + "type used as part of an expression"); + return 1; + } + if (expr->type == NULL) { expr->type = type_build_from_ast(state->node_allocator, expr->type_node); } + i32 retval = 0; switch (expr->kind) { - case Ast_Kind_Binary_Op: - check_binaryop(state, (AstBinaryOp *) expr); - break; + case Ast_Kind_Binary_Op: retval = check_binaryop(state, (AstBinaryOp *) expr); break; case Ast_Kind_Unary_Op: - check_expression(state, ((AstUnaryOp *) expr)->expr); + retval = check_expression(state, ((AstUnaryOp *) expr)->expr); if (((AstUnaryOp *) expr)->operation != Unary_Op_Cast) { expr->type = ((AstUnaryOp *) expr)->expr->type; } break; - case Ast_Kind_Call: - check_call(state, (AstCall *) expr); - break; - - case Ast_Kind_Block: - check_block(state, (AstBlock *) expr); - break; + case Ast_Kind_Call: retval = check_call(state, (AstCall *) expr); break; + case Ast_Kind_Block: retval = check_block(state, (AstBlock *) expr); break; case Ast_Kind_Symbol: onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_UNRESOLVED_SYMBOL, expr->token->pos, expr->token->text, expr->token->length); + retval = 1; break; case Ast_Kind_Local: @@ -332,6 +347,7 @@ static void check_expression(OnyxSemPassState* state, AstTyped* expr) { ONYX_MESSAGE_TYPE_LITERAL, expr->token->pos, "local variable with unknown type"); + retval = 1; } break; @@ -341,11 +357,12 @@ static void check_expression(OnyxSemPassState* state, AstTyped* expr) { ONYX_MESSAGE_TYPE_LITERAL, expr->token->pos, "global with unknown type"); + retval = 1; } break; case Ast_Kind_Argument: - check_expression(state, ((AstArgument *) expr)->value); + retval = check_expression(state, ((AstArgument *) expr)->value); expr->type = ((AstArgument *) expr)->value->type; break; @@ -356,14 +373,17 @@ static void check_expression(OnyxSemPassState* state, AstTyped* expr) { break; default: + retval = 1; DEBUG_HERE; break; } + + return retval; } -static void check_global(OnyxSemPassState* state, AstGlobal* global) { +static b32 check_global(OnyxSemPassState* state, AstGlobal* global) { if (global->initial_value) { - check_expression(state, global->initial_value); + if (check_expression(state, global->initial_value)) return 1; if (global->base.type == NULL) { global->base.type = type_build_from_ast(state->node_allocator, global->base.type_node); @@ -377,7 +397,7 @@ static void check_global(OnyxSemPassState* state, AstGlobal* global) { global->base.token->text, global->base.token->length, type_get_name(global->base.type), type_get_name(global->initial_value->type)); - return; + return 1; } } else { if (global->initial_value->type) @@ -390,31 +410,36 @@ static void check_global(OnyxSemPassState* state, AstGlobal* global) { ONYX_MESSAGE_TYPE_LITERAL, global->base.token->pos, "global variable with unknown type"); + return 1; } + + return 0; } -static void check_statement(OnyxSemPassState* state, AstNode* stmt) { +static b32 check_statement(OnyxSemPassState* state, AstNode* stmt) { switch (stmt->kind) { - case Ast_Kind_Assignment: check_assignment(state, (AstAssign *) stmt); break; - case Ast_Kind_Return: check_return(state, (AstReturn *) stmt); break; - case Ast_Kind_If: check_if(state, (AstIf *) stmt); break; - case Ast_Kind_While: check_while(state, (AstWhile *) stmt); break; - case Ast_Kind_Call: check_call(state, (AstCall *) stmt); break; - case Ast_Kind_Block: check_block(state, (AstBlock *) stmt); break; - - default: break; + case Ast_Kind_Assignment: return check_assignment(state, (AstAssign *) stmt); + case Ast_Kind_Return: return check_return(state, (AstReturn *) stmt); + case Ast_Kind_If: return check_if(state, (AstIf *) stmt); + case Ast_Kind_While: return check_while(state, (AstWhile *) stmt); + case Ast_Kind_Call: return check_call(state, (AstCall *) stmt); + case Ast_Kind_Block: return check_block(state, (AstBlock *) stmt); + + default: return 0; } } -static void check_statement_chain(OnyxSemPassState* state, AstNode* start) { +static b32 check_statement_chain(OnyxSemPassState* state, AstNode* start) { while (start) { - check_statement(state, start); + if (check_statement(state, start)) return 1; start = start->next; } + + return 0; } -static void check_block(OnyxSemPassState* state, AstBlock* block) { - check_statement_chain(state, block->body); +static b32 check_block(OnyxSemPassState* state, AstBlock* block) { + if (check_statement_chain(state, block->body)) return 1; forll(AstLocal, local, block->locals->last_local, prev_local) { if (local->base.type == NULL) { @@ -422,12 +447,14 @@ static void check_block(OnyxSemPassState* state, AstBlock* block) { ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, local->base.token->pos, local->base.token->text, local->base.token->length); - return; + return 1; } } + + return 0; } -static void check_function(OnyxSemPassState* state, AstFunction* func) { +static b32 check_function(OnyxSemPassState* state, AstFunction* func) { for (AstLocal *param = func->params; param != NULL; param = (AstLocal *) param->base.next) { if (param->base.type == NULL) { param->base.type = type_build_from_ast(state->node_allocator, param->base.type_node); @@ -438,7 +465,7 @@ static void check_function(OnyxSemPassState* state, AstFunction* func) { ONYX_MESSAGE_TYPE_LITERAL, param->base.token->pos, "function parameter types must be known"); - return; + return 1; } if (param->base.type->Basic.size == 0) { @@ -446,29 +473,80 @@ static void check_function(OnyxSemPassState* state, AstFunction* func) { ONYX_MESSAGE_TYPE_LITERAL, param->base.token->pos, "function parameters must have non-void types"); - return; + return 1; } } + // NOTE: Acutally the return type if (func->base.type == NULL) { func->base.type = type_build_from_ast(state->node_allocator, func->base.type_node); } + if ((func->base.flags & Ast_Flag_Exported) != 0) { + if ((func->base.flags & Ast_Flag_Foreign) != 0) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + func->base.token->pos, + "exporting a foreign function"); + return 1; + } + + if ((func->base.flags & Ast_Flag_Intrinsic) != 0) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + func->base.token->pos, + "exporting a intrinsic function"); + return 1; + } + + if ((func->base.flags & Ast_Flag_Inline) != 0) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + func->base.token->pos, + "exporting a inlined function"); + return 1; + } + } + state->expected_return_type = func->base.type; if (func->body) { - check_block(state, func->body); + return check_block(state, func->body); + } + + return 0; +} + +static b32 check_node(OnyxSemPassState* state, AstNode* node) { + switch (node->kind) { + case Ast_Kind_Function: return check_function(state, (AstFunction *) node); + case Ast_Kind_Block: return check_block(state, (AstBlock *) node); + case Ast_Kind_Assignment: return check_assignment(state, (AstAssign *) node); + case Ast_Kind_Return: return check_return(state, (AstReturn *) node); + case Ast_Kind_If: return check_if(state, (AstIf *) node); + case Ast_Kind_While: return check_while(state, (AstWhile *) node); + case Ast_Kind_Call: return check_call(state, (AstCall *) node); + case Ast_Kind_Binary_Op: return check_binaryop(state, (AstBinaryOp *) node); + default: return check_expression(state, (AstTyped *) node); } } void onyx_type_check(OnyxSemPassState* state, OnyxProgram* program) { - bh_arr_each(AstForeign *, foreign, program->foreigns) - if ((*foreign)->import->kind == Ast_Kind_Function) - check_function(state, (AstFunction *) (*foreign)->import); + // bh_arr_each(AstForeign *, foreign, program->foreigns) + // if ((*foreign)->import->kind == Ast_Kind_Function) + // check_function(state, (AstFunction *) (*foreign)->import); - bh_arr_each(AstGlobal *, global, program->globals) - check_global(state, *global); + // bh_arr_each(AstGlobal *, global, program->globals) + // check_global(state, *global); - bh_arr_each(AstFunction *, function, program->functions) - check_function(state, *function); + // bh_arr_each(AstFunction *, function, program->functions) + // check_function(state, *function); + + bh_arr_each(AstNode *, node, program->nodes_to_process) { + check_node(state, *node); + + if ((*node)->kind == Ast_Kind_Function) { + bh_arr_push(program->functions, (AstFunction *) *node); + } + } } diff --git a/src/onyxlex.c b/src/onyxlex.c index 8368a011..6987e51b 100644 --- a/src/onyxlex.c +++ b/src/onyxlex.c @@ -129,12 +129,12 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) { } LITERAL_TOKEN("struct", 1, Token_Type_Keyword_Struct); - LITERAL_TOKEN("export", 1, Token_Type_Keyword_Export); +// LITERAL_TOKEN("export", 1, Token_Type_Keyword_Export); LITERAL_TOKEN("use", 1, Token_Type_Keyword_Use); LITERAL_TOKEN("if", 1, Token_Type_Keyword_If); LITERAL_TOKEN("elseif", 1, Token_Type_Keyword_Elseif); LITERAL_TOKEN("else", 1, Token_Type_Keyword_Else); - LITERAL_TOKEN("foreign", 1, Token_Type_Keyword_Foreign); + // LITERAL_TOKEN("foreign", 1, Token_Type_Keyword_Foreign); LITERAL_TOKEN("return", 1, Token_Type_Keyword_Return); LITERAL_TOKEN("proc", 1, Token_Type_Keyword_Proc); LITERAL_TOKEN("as", 1, Token_Type_Keyword_Cast); diff --git a/src/onyxparser.c b/src/onyxparser.c index 3a0113ad..c99608b5 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -27,19 +27,20 @@ static void parser_next_token(OnyxParser* parser); static void parser_prev_token(OnyxParser* parser); static b32 is_terminating_token(TokenType token_type); static OnyxToken* expect(OnyxParser* parser, TokenType token_type); -static AstNumLit* parse_numeric_literal(OnyxParser* parser); -static AstTyped* parse_factor(OnyxParser* parser); -static AstTyped* parse_expression(OnyxParser* parser); -static AstIf* parse_if_stmt(OnyxParser* parser); -static AstWhile* parse_while_stmt(OnyxParser* parser); -static b32 parse_symbol_statement(OnyxParser* parser, AstNode** ret); -static AstReturn* parse_return_statement(OnyxParser* parser); -static AstBlock* parse_block(OnyxParser* parser); -static AstNode* parse_statement(OnyxParser* parser); -static AstType* parse_type(OnyxParser* parser); -static AstLocal* parse_function_params(OnyxParser* parser); + +static AstNumLit* parse_numeric_literal(OnyxParser* parser); +static AstTyped* parse_factor(OnyxParser* parser); +static AstTyped* parse_expression(OnyxParser* parser); +static AstIf* parse_if_stmt(OnyxParser* parser); +static AstWhile* parse_while_stmt(OnyxParser* parser); +static b32 parse_symbol_statement(OnyxParser* parser, AstNode** ret); +static AstReturn* parse_return_statement(OnyxParser* parser); +static AstBlock* parse_block(OnyxParser* parser); +static AstNode* parse_statement(OnyxParser* parser); +static AstType* parse_type(OnyxParser* parser); +static AstLocal* parse_function_params(OnyxParser* parser); static AstFunction* parse_function_definition(OnyxParser* parser); -static AstNode* parse_top_level_statement(OnyxParser* parser); +static AstNode* parse_top_level_statement(OnyxParser* parser); static void parser_next_token(OnyxParser* parser) { parser->prev_token = parser->curr_token; @@ -236,6 +237,16 @@ static AstTyped* parse_factor(OnyxParser* parser) { break; } + case Token_Type_Keyword_Proc: + { + AstFunction* func_node = parse_function_definition(parser); + + bh_arr_push(parser->results.nodes_to_process, (AstNode *) func_node); + + retval = (AstTyped *) func_node; + break; + } + default: onyx_message_add(parser->msgs, ONYX_MESSAGE_TYPE_UNEXPECTED_TOKEN, @@ -736,6 +747,26 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { func_def->base.flags |= Ast_Flag_Inline; } + else if (parse_possible_directive(parser, "foreign")) { + func_def->foreign_module = expect(parser, Token_Type_Literal_String); + func_def->foreign_name = expect(parser, Token_Type_Literal_String); + + func_def->base.flags |= Ast_Flag_Foreign; + } + + else if (parse_possible_directive(parser, "export")) { + func_def->base.flags |= Ast_Flag_Exported; + + if (parser->curr_token->type == Token_Type_Literal_String) { + OnyxToken* str_token = expect(parser, Token_Type_Literal_String); + func_def->exported_name = + bh_aprintf(global_heap_allocator, + "%b", + str_token->text, + str_token->length); + } + } + else { OnyxToken* directive_token = expect(parser, '#'); OnyxToken* symbol_token = expect(parser, Token_Type_Symbol); @@ -764,50 +795,52 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { return func_def; } -static AstNode* parse_foreign(OnyxParser* parser) { - expect(parser, Token_Type_Keyword_Foreign); - - AstForeign* foreign = make_node(AstForeign, Ast_Kind_Foreign); - foreign->mod_token = expect(parser, Token_Type_Literal_String); - foreign->name_token = expect(parser, Token_Type_Literal_String); - - if (parser->curr_token->type == Token_Type_Keyword_Proc) { - foreign->import = (AstNode *) parse_function_definition(parser); - - } else { - AstType* type = parse_type(parser); - - AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); - global->base.type_node = type; - global->base.flags |= Ast_Flag_Lval; - - foreign->import = (AstNode *) global; - } - - return (AstNode *) foreign; -} - -static AstNode* parse_top_level_constant_symbol(OnyxParser* parser) { - if (parser->curr_token->type == Token_Type_Keyword_Proc) { - return (AstNode *) parse_function_definition(parser); - - } else if (parser->curr_token->type == Token_Type_Keyword_Struct) { - // Handle struct case - assert(0); - - } else if (parser->curr_token->type == Token_Type_Keyword_Foreign) { - return (AstNode *) parse_foreign(parser); - - } else { - // Global constant with initial value - AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); - global->initial_value = parse_expression(parser); - global->base.flags |= Ast_Flag_Const; - global->base.flags |= Ast_Flag_Lval; - global->base.flags |= Ast_Flag_Comptime; - - return (AstNode *) global; - } +// static AstNode* parse_foreign(OnyxParser* parser) { +// expect(parser, Token_Type_Keyword_Foreign); +// +// AstForeign* foreign = make_node(AstForeign, Ast_Kind_Foreign); +// foreign->mod_token = expect(parser, Token_Type_Literal_String); +// foreign->name_token = expect(parser, Token_Type_Literal_String); +// +// if (parser->curr_token->type == Token_Type_Keyword_Proc) { +// foreign->import = (AstNode *) parse_function_definition(parser); +// +// } else { +// AstType* type = parse_type(parser); +// +// AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); +// global->base.type_node = type; +// global->base.flags |= Ast_Flag_Lval; +// +// foreign->import = (AstNode *) global; +// } +// +// return (AstNode *) foreign; +// } + +static AstTyped* parse_top_level_constant_symbol(OnyxParser* parser) { +// if (parser->curr_token->type == Token_Type_Keyword_Proc) { +// return (AstNode *) parse_function_definition(parser); +// +// } else if (parser->curr_token->type == Token_Type_Keyword_Struct) { +// // Handle struct case +// assert(0); +// +// } else if (parser->curr_token->type == Token_Type_Keyword_Foreign) { +// return (AstNode *) parse_foreign(parser); +// +// } else { +// // Global constant with initial value +// AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); +// global->initial_value = parse_expression(parser); +// global->base.flags |= Ast_Flag_Const; +// global->base.flags |= Ast_Flag_Lval; +// global->base.flags |= Ast_Flag_Comptime; +// +// return (AstNode *) global; +// } + + return parse_expression(parser); } static AstNode* parse_top_level_statement(OnyxParser* parser) { @@ -821,75 +854,28 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { return (AstNode *) use_node; } - case Token_Type_Keyword_Export: - { - expect(parser, Token_Type_Keyword_Export); - if (parser->curr_token->type != Token_Type_Symbol) { - onyx_message_add(parser->msgs, - ONYX_MESSAGE_TYPE_EXPECTED_TOKEN, - parser->curr_token->pos, - onyx_get_token_type_name(Token_Type_Symbol), - onyx_get_token_type_name(parser->curr_token->type)); - break; - } - - AstNode* top_level_decl = parse_top_level_statement(parser); - top_level_decl->flags |= Ast_Flag_Exported; - return top_level_decl; - } - case Token_Type_Symbol: { OnyxToken* symbol = parser->curr_token; parser_next_token(parser); + expect(parser, ':'); expect(parser, ':'); - AstType* type = NULL; - - if (parser->curr_token->type == Token_Type_Symbol) { - type = parse_type(parser); - } - - if (parser->curr_token->type == ':') { - parser_next_token(parser); - - AstNode* node = parse_top_level_constant_symbol(parser); - - if (node->kind == Ast_Kind_Global) { - ((AstGlobal *) node)->base.type_node = type; - } - - if (node->kind == Ast_Kind_Foreign) { - ((AstForeign *) node)->import->token = symbol; - - } else { - node->token = symbol; - } - - return node; - - } else if (parser->curr_token->type == '=') { - parser_next_token(parser); - - AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); - global->base.token = symbol; - global->base.flags |= Ast_Flag_Lval; - global->initial_value = parse_expression(parser); - global->base.type_node = type; - - return (AstNode *) global; + AstTyped* node = parse_top_level_constant_symbol(parser); + if (node->kind == Ast_Kind_Function) { + node->token = symbol; } else { - onyx_token_null_toggle(parser->curr_token); - onyx_message_add(parser->msgs, - ONYX_MESSAGE_TYPE_UNEXPECTED_TOKEN, - parser->curr_token->pos, - parser->curr_token->text); - onyx_token_null_toggle(parser->curr_token); + // HACK + bh_arr_push(parser->results.nodes_to_process, (AstNode *) node); } - return &error_node; + AstBinding* binding = make_node(AstBinding, Ast_Kind_Binding); + binding->base.token = symbol; + binding->node = (AstNode *) node; + + return (AstNode *) binding; } default: break; @@ -919,28 +905,44 @@ OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer, Onyx parser.allocator = alloc; parser.tokenizer = tokenizer; parser.curr_token = tokenizer->tokens; - parser.prev_token = NULL; parser.msgs = msgs; + parser.prev_token = NULL; + parser.msgs = msgs; + + parser.results = (ParseResults) { + .allocator = global_heap_allocator, + + .uses = NULL, + .bindings = NULL, + .nodes_to_process = NULL, + }; + + bh_arr_new(parser.results.allocator, parser.results.uses, 4); + bh_arr_new(parser.results.allocator, parser.results.bindings, 4); + bh_arr_new(parser.results.allocator, parser.results.nodes_to_process, 4); + return parser; } void onyx_parser_free(OnyxParser* parser) { } -bh_arr(AstNode *) onyx_parse(OnyxParser *parser) { - bh_arr(AstNode *) top_level_nodes = NULL; - bh_arr_new(global_heap_allocator, top_level_nodes, 4); - +ParseResults onyx_parse(OnyxParser *parser) { while (parser->curr_token->type != Token_Type_End_Stream) { AstNode* curr_stmt = parse_top_level_statement(parser); - // Building a linked list of statements down the "next" chain if (curr_stmt != NULL && curr_stmt != &error_node) { while (curr_stmt != NULL) { - bh_arr_push(top_level_nodes, curr_stmt); + + switch (curr_stmt->kind) { + case Ast_Kind_Use: bh_arr_push(parser->results.uses, (AstUse *) curr_stmt); break; + case Ast_Kind_Binding: bh_arr_push(parser->results.bindings, (AstBinding *) curr_stmt); break; + default: assert(("Invalid top level node", 0)); + } + curr_stmt = curr_stmt->next; } } } - return top_level_nodes; + return parser->results; } diff --git a/src/onyxsempass.c b/src/onyxsempass.c index 7f2b4bc8..9c8d225c 100644 --- a/src/onyxsempass.c +++ b/src/onyxsempass.c @@ -23,61 +23,61 @@ OnyxSemPassState onyx_sempass_create(bh_allocator alloc, bh_allocator node_alloc // WASM, this function may not be needed. It brings all of the locals // defined in sub-scopes up to the function-block level. This is a // requirement of WASM, but not of other targets. -static void collapse_scopes(OnyxProgram* program) { - bh_arr(AstBlock*) traversal_queue = NULL; - bh_arr_new(global_scratch_allocator, traversal_queue, 4); - bh_arr_set_length(traversal_queue, 0); - - bh_arr_each(AstFunction *, func, program->functions) { - AstLocalGroup* top_locals = (*func)->body->locals; - - bh_arr_push(traversal_queue, (*func)->body); - while (!bh_arr_is_empty(traversal_queue)) { - AstBlock* block = traversal_queue[0]; - - if (block->base.kind == Ast_Kind_If) { - AstIf* if_node = (AstIf *) block; - if (if_node->true_block.as_block != NULL) - bh_arr_push(traversal_queue, if_node->true_block.as_block); - - if (if_node->false_block.as_block != NULL) - bh_arr_push(traversal_queue, if_node->false_block.as_block); - - } else { - - if (block->locals != top_locals && block->locals->last_local != NULL) { - AstLocal* last_local = block->locals->last_local; - while (last_local && last_local->prev_local != NULL) last_local = last_local->prev_local; - - last_local->prev_local = top_locals->last_local; - top_locals->last_local = block->locals->last_local; - block->locals->last_local = NULL; - } - - AstNode* walker = block->body; - while (walker) { - if (walker->kind == Ast_Kind_Block) { - bh_arr_push(traversal_queue, (AstBlock *) walker); - - } else if (walker->kind == Ast_Kind_While) { - bh_arr_push(traversal_queue, ((AstWhile *) walker)->body); - - } else if (walker->kind == Ast_Kind_If) { - if (((AstIf *) walker)->true_block.as_block != NULL) - bh_arr_push(traversal_queue, ((AstIf *) walker)->true_block.as_block); - - if (((AstIf *) walker)->false_block.as_block != NULL) - bh_arr_push(traversal_queue, ((AstIf *) walker)->false_block.as_block); - } - - walker = walker->next; - } - } - - bh_arr_deleten(traversal_queue, 0, 1); - } - } -} +// static void collapse_scopes(OnyxProgram* program) { +// bh_arr(AstBlock*) traversal_queue = NULL; +// bh_arr_new(global_scratch_allocator, traversal_queue, 4); +// bh_arr_set_length(traversal_queue, 0); +// +// bh_arr_each(AstFunction *, func, program->functions) { +// AstLocalGroup* top_locals = (*func)->body->locals; +// +// bh_arr_push(traversal_queue, (*func)->body); +// while (!bh_arr_is_empty(traversal_queue)) { +// AstBlock* block = traversal_queue[0]; +// +// if (block->base.kind == Ast_Kind_If) { +// AstIf* if_node = (AstIf *) block; +// if (if_node->true_block.as_block != NULL) +// bh_arr_push(traversal_queue, if_node->true_block.as_block); +// +// if (if_node->false_block.as_block != NULL) +// bh_arr_push(traversal_queue, if_node->false_block.as_block); +// +// } else { +// +// if (block->locals != top_locals && block->locals->last_local != NULL) { +// AstLocal* last_local = block->locals->last_local; +// while (last_local && last_local->prev_local != NULL) last_local = last_local->prev_local; +// +// last_local->prev_local = top_locals->last_local; +// top_locals->last_local = block->locals->last_local; +// block->locals->last_local = NULL; +// } +// +// AstNode* walker = block->body; +// while (walker) { +// if (walker->kind == Ast_Kind_Block) { +// bh_arr_push(traversal_queue, (AstBlock *) walker); +// +// } else if (walker->kind == Ast_Kind_While) { +// bh_arr_push(traversal_queue, ((AstWhile *) walker)->body); +// +// } else if (walker->kind == Ast_Kind_If) { +// if (((AstIf *) walker)->true_block.as_block != NULL) +// bh_arr_push(traversal_queue, ((AstIf *) walker)->true_block.as_block); +// +// if (((AstIf *) walker)->false_block.as_block != NULL) +// bh_arr_push(traversal_queue, ((AstIf *) walker)->false_block.as_block); +// } +// +// walker = walker->next; +// } +// } +// +// bh_arr_deleten(traversal_queue, 0, 1); +// } +// } +// } void onyx_sempass(OnyxSemPassState* state, OnyxProgram* program) { onyx_resolve_symbols(state, program); @@ -86,5 +86,5 @@ void onyx_sempass(OnyxSemPassState* state, OnyxProgram* program) { onyx_type_check(state, program); if (onyx_message_has_errors(state->msgs)) return; - collapse_scopes(program); + // collapse_scopes(program); } diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 1460832f..c363c396 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -1,13 +1,14 @@ #define BH_DEBUG #include "onyxsempass.h" -static void symbol_introduce(OnyxSemPassState* state, AstNode* symbol); +static void symbol_introduce(OnyxSemPassState* state, OnyxToken* tkn, AstNode* symbol); static void symbol_basic_type_introduce(OnyxSemPassState* state, AstBasicType* basic_type); -static b32 symbol_unique_introduce(OnyxSemPassState* state, AstNode* symbol); -static void symbol_remove(OnyxSemPassState* state, AstNode* symbol); -static AstNode* symbol_resolve(OnyxSemPassState* state, AstNode* symbol); +static b32 symbol_unique_introduce(OnyxSemPassState* state, OnyxToken* tkn, AstNode* symbol); +static void symbol_remove(OnyxSemPassState* state, OnyxToken* tkn); +static AstNode* symbol_resolve(OnyxSemPassState* state, OnyxToken* tkn); static void local_group_enter(OnyxSemPassState* state, AstLocalGroup* local_group); static void local_group_leave(OnyxSemPassState* state); + static void symres_local(OnyxSemPassState* state, AstLocal** local); static void symres_call(OnyxSemPassState* state, AstCall* call); static void symres_expression(OnyxSemPassState* state, AstTyped** expr); @@ -16,23 +17,23 @@ static void symres_return(OnyxSemPassState* state, AstReturn* ret); static void symres_if(OnyxSemPassState* state, AstIf* ifnode); static void symres_while(OnyxSemPassState* state, AstWhile* whilenode); static void symres_statement_chain(OnyxSemPassState* state, AstNode* walker, AstNode** trailer); -static b32 symres_statement(OnyxSemPassState* state, AstNode* stmt); +static b32 symres_statement(OnyxSemPassState* state, AstNode* stmt); static void symres_block(OnyxSemPassState* state, AstBlock* block); static void symres_function(OnyxSemPassState* state, AstFunction* func); static AstType* symres_type(OnyxSemPassState* state, AstType* type); -static void symbol_introduce(OnyxSemPassState* state, AstNode* symbol) { - onyx_token_null_toggle(symbol->token); +static void symbol_introduce(OnyxSemPassState* state, OnyxToken* tkn, AstNode* symbol) { + onyx_token_null_toggle(tkn); SemPassSymbol* sp_sym = (SemPassSymbol *) bh_alloc_item(state->allocator, SemPassSymbol); sp_sym->node = symbol; sp_sym->shadowed = NULL; - if (bh_table_has(SemPassSymbol *, state->symbols, symbol->token->text)) { - sp_sym->shadowed = bh_table_get(SemPassSymbol *, state->symbols, symbol->token->text); + if (bh_table_has(SemPassSymbol *, state->symbols, tkn->text)) { + sp_sym->shadowed = bh_table_get(SemPassSymbol *, state->symbols, tkn->text); } - bh_table_put(SemPassSymbol *, state->symbols, symbol->token->text, sp_sym); + bh_table_put(SemPassSymbol *, state->symbols, tkn->text, sp_sym); if (symbol->kind == Ast_Kind_Local) { AstLocal* local = (AstLocal *) symbol; @@ -40,39 +41,39 @@ static void symbol_introduce(OnyxSemPassState* state, AstNode* symbol) { state->curr_local_group->last_local = local; } - onyx_token_null_toggle(symbol->token); + onyx_token_null_toggle(tkn); } -static void symbol_remove(OnyxSemPassState* state, AstNode* symbol) { - onyx_token_null_toggle(symbol->token); +static void symbol_remove(OnyxSemPassState* state, OnyxToken* tkn) { + onyx_token_null_toggle(tkn); - SemPassSymbol* sp_sym = bh_table_get(SemPassSymbol *, state->symbols, symbol->token->text); + SemPassSymbol* sp_sym = bh_table_get(SemPassSymbol *, state->symbols, tkn->text); if (sp_sym->shadowed) { - bh_table_put(SemPassSymbol *, state->symbols, symbol->token->text, sp_sym->shadowed); + bh_table_put(SemPassSymbol *, state->symbols, tkn->text, sp_sym->shadowed); } else { - bh_table_delete(SemPassSymbol *, state->symbols, symbol->token->text); + bh_table_delete(SemPassSymbol *, state->symbols, tkn->text); } - onyx_token_null_toggle(symbol->token); + onyx_token_null_toggle(tkn); } -static AstNode* symbol_resolve(OnyxSemPassState* state, AstNode* symbol) { - onyx_token_null_toggle(symbol->token); +static AstNode* symbol_resolve(OnyxSemPassState* state, OnyxToken* tkn) { + onyx_token_null_toggle(tkn); - if (!bh_table_has(SemPassSymbol *, state->symbols, symbol->token->text)) { + if (!bh_table_has(SemPassSymbol *, state->symbols, tkn->text)) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_UNKNOWN_SYMBOL, - symbol->token->pos, - symbol->token->text); + tkn->pos, + tkn->text); - onyx_token_null_toggle(symbol->token); - return symbol; + onyx_token_null_toggle(tkn); + return NULL; } - SemPassSymbol* sp_sym = bh_table_get(SemPassSymbol *, state->symbols, symbol->token->text); + SemPassSymbol* sp_sym = bh_table_get(SemPassSymbol *, state->symbols, tkn->text); - onyx_token_null_toggle(symbol->token); + onyx_token_null_toggle(tkn); return sp_sym->node; } @@ -85,7 +86,7 @@ static void local_group_leave(OnyxSemPassState* state) { assert(state->curr_local_group != NULL); for (AstLocal *walker = state->curr_local_group->last_local; walker != NULL; walker = walker->prev_local) { - symbol_remove(state, (AstNode *) walker); + symbol_remove(state, walker->base.token); } state->curr_local_group = state->curr_local_group->prev_group; @@ -98,27 +99,27 @@ static void symbol_basic_type_introduce(OnyxSemPassState* state, AstBasicType* b bh_table_put(SemPassSymbol *, state->symbols, basic_type->base.name, sp_sym); } -static b32 symbol_unique_introduce(OnyxSemPassState* state, AstNode* symbol) { - onyx_token_null_toggle(symbol->token); +static b32 symbol_unique_introduce(OnyxSemPassState* state, OnyxToken* tkn, AstNode* symbol) { + onyx_token_null_toggle(tkn); // NOTE: If the function hasn't already been defined - if (!bh_table_has(SemPassSymbol *, state->symbols, symbol->token->text)) { + if (!bh_table_has(SemPassSymbol *, state->symbols, tkn->text)) { SemPassSymbol* sp_sym = bh_alloc_item(state->allocator, SemPassSymbol); sp_sym->node = symbol; sp_sym->shadowed = NULL; - bh_table_put(SemPassSymbol *, state->symbols, symbol->token->text, sp_sym); + bh_table_put(SemPassSymbol *, state->symbols, tkn->text, sp_sym); } else { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_CONFLICTING_GLOBALS, - symbol->token->pos, - symbol->token->text); + tkn->pos, + tkn->text); // NOTE: I really wish C had defer... - onyx_token_null_toggle(symbol->token); + onyx_token_null_toggle(tkn); return 0; } - onyx_token_null_toggle(symbol->token); + onyx_token_null_toggle(tkn); return 1; } @@ -126,7 +127,7 @@ static AstType* symres_type(OnyxSemPassState* state, AstType* type) { if (type == NULL) return NULL; if (type->kind == Ast_Kind_Symbol) { - return (AstType *) symbol_resolve(state, (AstNode *) type); + return (AstType *) symbol_resolve(state, ((AstNode *) type)->token); } // NOTE: Already resolved @@ -143,11 +144,11 @@ static AstType* symres_type(OnyxSemPassState* state, AstType* type) { static void symres_local(OnyxSemPassState* state, AstLocal** local) { (*local)->base.type_node = symres_type(state, (*local)->base.type_node); - symbol_introduce(state, (AstNode *) *local); + symbol_introduce(state, (*local)->base.token, (AstNode *) *local); } static void symres_call(OnyxSemPassState* state, AstCall* call) { - AstNode* callee = symbol_resolve(state, call->callee); + AstNode* callee = symbol_resolve(state, call->callee->token); if (callee) call->callee = callee; else DEBUG_HERE; @@ -178,7 +179,7 @@ static void symres_expression(OnyxSemPassState* state, AstTyped** expr) { case Ast_Kind_Block: symres_block(state, (AstBlock *) *expr); break; case Ast_Kind_Symbol: - *expr = (AstTyped *) symbol_resolve(state, (AstNode *) *expr); + *expr = (AstTyped *) symbol_resolve(state, ((AstNode *) *expr)->token); break; // NOTE: This is a good case, since it means the symbol is already resolved @@ -195,7 +196,7 @@ static void symres_expression(OnyxSemPassState* state, AstTyped** expr) { } static void symres_assignment(OnyxSemPassState* state, AstAssign* assign) { - AstTyped* lval = (AstTyped *) symbol_resolve(state, (AstNode *) assign->lval); + AstTyped* lval = (AstTyped *) symbol_resolve(state, assign->lval->token); if (lval == NULL) return; assign->lval = lval; @@ -277,7 +278,7 @@ static void symres_function(OnyxSemPassState* state, AstFunction* func) { for (AstLocal *param = func->params; param != NULL; param = (AstLocal *) param->base.next) { param->base.type_node = symres_type(state, param->base.type_node); - symbol_introduce(state, (AstNode *) param); + symbol_introduce(state, param->base.token, (AstNode *) param); } if (func->base.type_node != NULL) { @@ -289,7 +290,27 @@ static void symres_function(OnyxSemPassState* state, AstFunction* func) { symres_block(state, func->body); for (AstLocal *param = func->params; param != NULL; param = (AstLocal *) param->base.next) { - symbol_remove(state, (AstNode *) param); + symbol_remove(state, param->base.token); + } +} + +static void symres_top_node(OnyxSemPassState* state, AstNode** node) { + switch ((*node)->kind) { + case Ast_Kind_Call: + case Ast_Kind_Unary_Op: + case Ast_Kind_Binary_Op: + case Ast_Kind_Literal: + case Ast_Kind_Symbol: + symres_expression(state, (AstTyped **) node); + break; + + case Ast_Kind_Function: + symres_function(state, (AstFunction *) *node); + break; + + default: + DEBUG_HERE; + break; } } @@ -311,26 +332,29 @@ void onyx_resolve_symbols(OnyxSemPassState* state, OnyxProgram* program) { symbol_basic_type_introduce(state, &basic_type_rawptr); // NOTE: Introduce all global symbols - bh_arr_each(AstGlobal *, global, program->globals) - if (!symbol_unique_introduce(state, (AstNode *) *global)) return; + // bh_arr_each(AstGlobal *, global, program->globals) + // if (!symbol_unique_introduce(state, (AstNode *) *global)) return; - bh_arr_each(AstFunction *, function, program->functions) - if (!symbol_unique_introduce(state, (AstNode *) *function)) return; + // bh_arr_each(AstFunction *, function, program->functions) + // if (!symbol_unique_introduce(state, (AstNode *) *function)) return; - bh_arr_each(AstForeign *, foreign, program->foreigns) { - AstKind import_kind = (*foreign)->import->kind; + // bh_arr_each(AstForeign *, foreign, program->foreigns) { + // AstKind import_kind = (*foreign)->import->kind; - if (import_kind == Ast_Kind_Function || import_kind == Ast_Kind_Global) - if (!symbol_unique_introduce(state, (*foreign)->import)) return; - } + // if (import_kind == Ast_Kind_Function || import_kind == Ast_Kind_Global) + // if (!symbol_unique_introduce(state, (*foreign)->import)) return; + // } - // NOTE: Then, resolve all symbols in all functions - bh_arr_each(AstForeign *, foreign, program->foreigns) { - if ((*foreign)->import->kind == Ast_Kind_Function) { - symres_function(state, (AstFunction *) (*foreign)->import); - } - } + // // NOTE: Then, resolve all symbols in all functions + // bh_arr_each(AstForeign *, foreign, program->foreigns) { + // if ((*foreign)->import->kind == Ast_Kind_Function) { + // symres_function(state, (AstFunction *) (*foreign)->import); + // } + // } + + bh_arr_each(AstBinding *, binding, program->top_level_bindings) + if (!symbol_unique_introduce(state, (*binding)->base.token, (*binding)->node)) return; - bh_arr_each(AstFunction *, function, program->functions) - symres_function(state, *function); + bh_arr_each(AstNode *, node, program->nodes_to_process) + symres_top_node(state, node); } diff --git a/src/onyxutils.c b/src/onyxutils.c index b98f5dd8..26a384f3 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -13,6 +13,7 @@ static const char* ast_node_names[] = { "PROGRAM", "USE", + "BINDING", "FUNCTION", "FOREIGN", "BLOCK", @@ -24,7 +25,12 @@ static const char* ast_node_names[] = { "UN_OP", "BIN_OP", + "TYPE_START (BAD)" "TYPE", + "POINTER_TYPE", + "FUNCTION_TYPE", + "TYPE_END (BAD)" + "LITERAL", "PARAM", "ARGUMENT", diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 7c817808..b67b091e 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -219,23 +219,24 @@ static WasmType onyx_type_to_wasm_type(Type* type) { #define WI(instr) bh_arr_push(code, ((WasmInstruction){ instr, 0x00 })); #define WID(instr, data) bh_arr_push(code, ((WasmInstruction){ instr, data })); - -static void compile_function_body(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstFunction* fd); -static void compile_block(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstBlock* block); -static void compile_statement(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstNode* stmt); -static void compile_assign_lval(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstTyped* lval); -static void compile_assignment(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstAssign* assign); -static void compile_if(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstIf* if_node); -static void compile_while(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstWhile* while_node); -static void compile_binop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstBinaryOp* binop); -static void compile_unaryop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstUnaryOp* unop); -static void compile_call(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstCall* call); -static void compile_intrinsic_call(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstIntrinsicCall* call); -static void compile_expression(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstTyped* expr); -static void compile_cast(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstUnaryOp* cast); -static void compile_return(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstReturn* ret); - -static void compile_function_body(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstFunction* fd) { +#define COMPILE_FUNC(kind, ...) static void compile_ ## kind (OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, __VA_ARGS__) + +COMPILE_FUNC(function_body, AstFunction* fd); +COMPILE_FUNC(block, AstBlock* block); +COMPILE_FUNC(statement, AstNode* stmt); +COMPILE_FUNC(assign_lval, AstTyped* lval); +COMPILE_FUNC(assignment, AstAssign* assign); +COMPILE_FUNC(if, AstIf* if_node); +COMPILE_FUNC(while, AstWhile* while_node); +COMPILE_FUNC(binop, AstBinaryOp* binop); +COMPILE_FUNC(unaryop, AstUnaryOp* unop); +COMPILE_FUNC(call, AstCall* call); +COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call); +COMPILE_FUNC(expression, AstTyped* expr); +COMPILE_FUNC(cast, AstUnaryOp* cast); +COMPILE_FUNC(return, AstReturn* ret); + +COMPILE_FUNC(function_body, AstFunction* fd) { if (fd->body == NULL) return; bh_arr(WasmInstruction) code = *pcode; @@ -249,7 +250,7 @@ static void compile_function_body(OnyxWasmModule* mod, bh_arr(WasmInstruction)* *pcode = code; } -static void compile_block(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstBlock* block) { +COMPILE_FUNC(block, AstBlock* block) { bh_arr(WasmInstruction) code = *pcode; bh_arr_push(mod->structured_jump_target, 1); @@ -265,7 +266,7 @@ static void compile_block(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, A *pcode = code; } -static void compile_structured_jump(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, b32 jump_backward) { +COMPILE_FUNC(structured_jump, b32 jump_backward) { bh_arr(WasmInstruction) code = *pcode; i32 labelidx = 0; @@ -291,7 +292,7 @@ static void compile_structured_jump(OnyxWasmModule* mod, bh_arr(WasmInstruction) *pcode = code; } -static void compile_statement(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstNode* stmt) { +COMPILE_FUNC(statement, AstNode* stmt) { bh_arr(WasmInstruction) code = *pcode; switch (stmt->kind) { @@ -315,7 +316,7 @@ static void compile_statement(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcod *pcode = code; } -static void compile_assign_lval(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstTyped* lval) { +COMPILE_FUNC(assign_lval, AstTyped* lval) { bh_arr(WasmInstruction) code = *pcode; if (lval->kind == Ast_Kind_Local || lval->kind == Ast_Kind_Param) { @@ -335,7 +336,7 @@ static void compile_assign_lval(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pc *pcode = code; } -static void compile_if(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstIf* if_node) { +COMPILE_FUNC(if, AstIf* if_node) { bh_arr(WasmInstruction) code = *pcode; compile_expression(mod, &code, if_node->cond); @@ -378,7 +379,7 @@ static void compile_if(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstI *pcode = code; } -static void compile_while(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstWhile* while_node) { +COMPILE_FUNC(while, AstWhile* while_node) { bh_arr(WasmInstruction) code = *pcode; WID(WI_BLOCK_START, 0x40); @@ -406,7 +407,7 @@ static void compile_while(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, A *pcode = code; } -static void compile_assignment(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstAssign* assign) { +COMPILE_FUNC(assignment, AstAssign* assign) { bh_arr(WasmInstruction) code = *pcode; compile_expression(mod, &code, assign->expr); @@ -433,7 +434,7 @@ static const WasmInstructionType binop_map[][4] = { /* GTE */ { WI_I32_GE_S, WI_I64_GE_S, WI_F32_GE, WI_F64_GE }, }; -static void compile_binop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstBinaryOp* binop) { +COMPILE_FUNC(binop, AstBinaryOp* binop) { bh_arr(WasmInstruction) code = *pcode; b32 is_sign_significant = 0; @@ -480,7 +481,7 @@ static void compile_binop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, A *pcode = code; } -static void compile_unaryop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstUnaryOp* unop) { +COMPILE_FUNC(unaryop, AstUnaryOp* unop) { bh_arr(WasmInstruction) code = *pcode; switch (unop->operation) { @@ -527,7 +528,7 @@ static void compile_unaryop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, *pcode = code; } -static void compile_call(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstCall* call) { +COMPILE_FUNC(call, AstCall* call) { bh_arr(WasmInstruction) code = *pcode; for (AstArgument *arg = call->arguments; @@ -542,7 +543,7 @@ static void compile_call(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, As *pcode = code; } -static void compile_intrinsic_call(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstIntrinsicCall* call) { +COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call) { bh_arr(WasmInstruction) code = *pcode; i32 place_arguments_normally = 1; @@ -613,7 +614,7 @@ static void compile_intrinsic_call(OnyxWasmModule* mod, bh_arr(WasmInstruction)* *pcode = code; } -static void compile_expression(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstTyped* expr) { +COMPILE_FUNC(expression, AstTyped* expr) { bh_arr(WasmInstruction) code = *pcode; switch (expr->kind) { @@ -696,7 +697,7 @@ static const WasmInstructionType cast_map[][6] = { /* F64 */ { WI_I32_FROM_F64_S, WI_I32_FROM_F64_U, WI_I64_FROM_F64_S, WI_I64_FROM_F64_U, WI_F32_FROM_F64, WI_NOP, }, }; -static void compile_cast(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstUnaryOp* cast) { +COMPILE_FUNC(cast, AstUnaryOp* cast) { bh_arr(WasmInstruction) code = *pcode; compile_expression(mod, &code, cast->expr); @@ -739,7 +740,7 @@ static void compile_cast(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, As *pcode = code; } -static void compile_return(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, AstReturn* ret) { +COMPILE_FUNC(return, AstReturn* ret) { bh_arr(WasmInstruction) code = *pcode; if (ret->expr) { @@ -799,6 +800,18 @@ static void compile_function(OnyxWasmModule* mod, AstFunction* fd) { i32 type_idx = generate_type_idx(mod, fd); + if (fd->base.flags & Ast_Flag_Foreign) { + WasmImport import = { + .kind = WASM_FOREIGN_FUNCTION, + .idx = type_idx, + .mod = fd->foreign_module, + .name = fd->foreign_name, + }; + + bh_arr_push(mod->imports, import); + return; + } + WasmFunc wasm_func = { .type_idx = type_idx, .locals = { @@ -979,36 +992,40 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc, OnyxMessages* msgs) { void onyx_wasm_module_compile(OnyxWasmModule* module, OnyxProgram* program) { // NOTE: First, introduce all indicies for globals and functions - bh_arr_each(AstForeign *, foreign, program->foreigns) { - AstKind import_kind = (*foreign)->import->kind; + // bh_arr_each(AstForeign *, foreign, program->foreigns) { + // AstKind import_kind = (*foreign)->import->kind; - if (import_kind == Ast_Kind_Function) { - module->next_func_idx++; - bh_imap_put(&module->func_map, (u64) (*foreign)->import, module->next_import_func_idx++); - } - else if (import_kind == Ast_Kind_Global) { - module->next_global_idx++; - bh_imap_put(&module->global_map, (u64) (*foreign)->import, module->next_import_global_idx++); - } + // if (import_kind == Ast_Kind_Function) { + // module->next_func_idx++; + // bh_imap_put(&module->func_map, (u64) (*foreign)->import, module->next_import_func_idx++); + // } + // else if (import_kind == Ast_Kind_Global) { + // module->next_global_idx++; + // bh_imap_put(&module->global_map, (u64) (*foreign)->import, module->next_import_global_idx++); + // } - compile_foreign(module, *foreign); + // compile_foreign(module, *foreign); + // } + + bh_arr_each(AstFunction *, function, program->functions) { + if ((*function)->base.flags & Ast_Flag_Foreign) { + bh_imap_put(&module->func_map, (u64) *function, module->next_func_idx++); + } } bh_arr_each(AstFunction *, function, program->functions) { + if ((*function)->base.flags & Ast_Flag_Foreign) continue; + if (((*function)->base.flags & Ast_Flag_Intrinsic) == 0) bh_imap_put(&module->func_map, (u64) *function, module->next_func_idx++); } - bh_arr_each(AstGlobal *, global, program->globals) - bh_imap_put(&module->global_map, (u64) *global, module->next_global_idx++); - - // NOTE: Then, compile everything bh_arr_each(AstFunction *, function, program->functions) compile_function(module, *function); - bh_arr_each(AstGlobal *, global, program->globals) - compile_global_declaration(module, *global); + // bh_arr_each(AstGlobal *, global, program->globals) + // compile_global_declaration(module, *global); } void onyx_wasm_module_free(OnyxWasmModule* module) { -- 2.25.1