From fa710a01039be5e0c3b45c7b78a8a0aa68817574 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 20 Jun 2020 15:10:29 -0500 Subject: [PATCH] Added if statements --- include/onyxlex.h | 1 + include/onyxparser.h | 12 ++++++++++++ onyx | Bin 158400 -> 159688 bytes progs/minimal.onyx | 8 ++++++++ progs/test.onyx | 17 +++++++++++++++++ src/onyxlex.c | 2 ++ src/onyxparser.c | 36 ++++++++++++++++++++++++++++++++++-- src/onyxutils.c | 17 +++++++++++++++++ src/onyxwasm.c | 25 +++++++++++++++++++++++++ 9 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 progs/test.onyx diff --git a/include/onyxlex.h b/include/onyxlex.h index 97754648..c9a4632a 100644 --- a/include/onyxlex.h +++ b/include/onyxlex.h @@ -14,6 +14,7 @@ typedef enum OnyxTokenType { TOKEN_TYPE_KEYWORD_EXPORT, TOKEN_TYPE_KEYWORD_IF, TOKEN_TYPE_KEYWORD_ELSE, + TOKEN_TYPE_KEYWORD_ELSEIF, TOKEN_TYPE_KEYWORD_FOR, TOKEN_TYPE_KEYWORD_DO, TOKEN_TYPE_KEYWORD_RETURN, diff --git a/include/onyxparser.h b/include/onyxparser.h index 91dc48ff..081e2adc 100644 --- a/include/onyxparser.h +++ b/include/onyxparser.h @@ -11,6 +11,7 @@ typedef struct OnyxAstNodeNumLit OnyxAstNodeNumLit; typedef struct OnyxAstNodeLocal OnyxAstNodeLocal; typedef struct OnyxAstNodeScope OnyxAstNodeScope; typedef struct OnyxAstNodeBlock OnyxAstNodeBlock; +typedef struct OnyxAstNodeIf OnyxAstNodeIf; typedef struct OnyxAstNodeParam OnyxAstNodeParam; typedef struct OnyxAstNodeFuncDef OnyxAstNodeFuncDef; typedef struct OnyxAstNodeForeign OnyxAstNodeForeign; @@ -162,6 +163,16 @@ struct OnyxAstNodeBlock { OnyxAstNodeScope *scope; // NOTE: Only set on blocks belonging to functions }; +struct OnyxAstNodeIf { + OnyxAstNodeKind kind; + u32 flags; + OnyxToken *token; // NOTE: UNUSED + OnyxAstNode *false_block; + OnyxAstNode *next; + OnyxAstNode *cond; + OnyxAstNode *true_block; +}; + struct OnyxAstNodeFuncDef { OnyxAstNodeKind kind; u32 flags; @@ -215,6 +226,7 @@ union OnyxAstNode { OnyxAstNodeCall as_call; OnyxAstNodeNumLit as_numlit; OnyxAstNodeForeign as_foreign; + OnyxAstNodeIf as_if; }; const char* onyx_ast_node_kind_string(OnyxAstNodeKind kind); diff --git a/onyx b/onyx index ea67fa4bbb97ca42a50fc2e210a29caab902b2cb..20ab66431676508fa008c72cdaa70068536b9c33 100755 GIT binary patch delta 64649 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 d1#Z*}VkUEpQ(Dt+1UauXa`Ra-z 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 diff --git a/progs/minimal.onyx b/progs/minimal.onyx index a78a82af..818a598a 100644 --- a/progs/minimal.onyx +++ b/progs/minimal.onyx @@ -33,6 +33,14 @@ float_test :: proc -> f32 { export main :: proc { output := do_stuff(); + if output + 66 { + new_output :: -output * 2; + print(new_output); + + } else { + print(-1); + }; + print(output); print_float(float_test()); diff --git a/progs/test.onyx b/progs/test.onyx new file mode 100644 index 00000000..5c6f3671 --- /dev/null +++ b/progs/test.onyx @@ -0,0 +1,17 @@ + +// Foreign functions are included this way: +// sym_name :: foreign "module" "name" proc ... +print :: foreign "host" "print" proc (value i32) --- + +get_value :: foreign "env" "get_val" proc -> i32 --- + + + +// This is the entry point +export main :: proc { + nineteen :: 5 * 3 + 4; + thirty_five :: 5 * (3 + 4) + get_value(); + + print(nineteen); + print(thirty_five); +} diff --git a/src/onyxlex.c b/src/onyxlex.c index d0069690..3ed4c58f 100644 --- a/src/onyxlex.c +++ b/src/onyxlex.c @@ -12,6 +12,7 @@ static const char* onyx_token_type_names[] = { "export", //"TOKEN_TYPE_KEYWORD_EXPORT", "if", //"TOKEN_TYPE_KEYWORD_IF", "else", //"TOKEN_TYPE_KEYWORD_ELSE", + "elseif", //"TOKEN_TYPE_KEYWORD_ELSEIF", "for", //"TOKEN_TYPE_KEYWORD_FOR", "do", //"TOKEN_TYPE_KEYWORD_DO", "return", //"TOKEN_TYPE_KEYWORD_RETURN", @@ -138,6 +139,7 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) { 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("for", 1, TOKEN_TYPE_KEYWORD_FOR); diff --git a/src/onyxparser.c b/src/onyxparser.c index 07cbfd1b..0eaa4db1 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -341,7 +341,7 @@ static inline i32 get_precedence(OnyxAstNodeKind kind) { static OnyxAstNode* parse_expression(OnyxParser* parser) { bh_arr(OnyxAstNode*) tree_stack = NULL; - bh_arr_new(global_scratch_allocator, tree_stack, 1); + bh_arr_new(global_scratch_allocator, tree_stack, 4); bh_arr_set_length(tree_stack, 0); OnyxAstNode* left = parse_factor(parser); @@ -413,7 +413,39 @@ expression_done: } static OnyxAstNode* parse_if_stmt(OnyxParser* parser) { - return &error_node; + expect(parser, TOKEN_TYPE_KEYWORD_IF); + + OnyxAstNode* cond = parse_expression(parser); + OnyxAstNode* true_block = (OnyxAstNode *) parse_block(parser, 0); + + OnyxAstNodeIf* if_node = (OnyxAstNodeIf *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_IF); + OnyxAstNodeIf* root_if = if_node; + + if_node->cond = cond; + if_node->true_block = true_block->as_block.body; + + while (parser->curr_token->type == TOKEN_TYPE_KEYWORD_ELSEIF) { + parser_next_token(parser); + OnyxAstNodeIf* elseif_node = (OnyxAstNodeIf *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_IF); + + cond = parse_expression(parser); + true_block = (OnyxAstNode *) parse_block(parser, 0); + + elseif_node->cond = cond; + elseif_node->true_block = true_block->as_block.body; + + if_node->false_block = (OnyxAstNode *) elseif_node; + if_node = elseif_node; + } + + if (parser->curr_token->type == TOKEN_TYPE_KEYWORD_ELSE) { + parser_next_token(parser); + + OnyxAstNode* false_block = (OnyxAstNode *) parse_block(parser, 0); + if_node->false_block = false_block->as_block.body; + } + + return (OnyxAstNode *) root_if; } // Returns 1 if the symbol was consumed. Returns 0 otherwise diff --git a/src/onyxutils.c b/src/onyxutils.c index 77cd47d0..5070e721 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -143,6 +143,23 @@ void onyx_ast_print(OnyxAstNode* node, i32 indent) { break; } + case ONYX_AST_NODE_KIND_IF: { + OnyxAstNodeIf* if_node = &node->as_if; + if (if_node->cond) { + onyx_ast_print(if_node->cond, indent + 1); + } + if (if_node->true_block) { + onyx_ast_print(if_node->true_block, indent + 1); + } + if (if_node->false_block) { + onyx_ast_print(if_node->false_block, indent + 1); + } + if (if_node->next) { + onyx_ast_print(if_node->next, indent); + } + break; + } + default: { onyx_ast_print(node->left, indent + 1); onyx_ast_print(node->right, indent + 1); diff --git a/src/onyxwasm.c b/src/onyxwasm.c index ce965f20..09091992 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -213,6 +213,7 @@ static void process_block(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeBlock* static void process_statement(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* stmt); static void process_assign_lval(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* lval); static void process_assignment(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* assign); +static void process_if(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeIf* if_node); static void process_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* expr); static void process_cast(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* cast); static void process_return(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* ret); @@ -242,6 +243,7 @@ static void process_statement(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* case ONYX_AST_NODE_KIND_SCOPE: break; case ONYX_AST_NODE_KIND_RETURN: process_return(mod, func, stmt); break; case ONYX_AST_NODE_KIND_ASSIGNMENT: process_assignment(mod, func, stmt); break; + case ONYX_AST_NODE_KIND_IF: process_if(mod, func, (OnyxAstNodeIf *) stmt); break; default: process_expression(mod, func, stmt); } } @@ -256,6 +258,28 @@ static void process_assign_lval(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode } } +static void process_if(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeIf* if_node) { + process_expression(mod, func, if_node->cond); + bh_arr_push(func->code, ((WasmInstruction){ WI_IF_START, 0x40 })); + + if (if_node->true_block) { + // NOTE: This is kind of gross, but making a function for this doesn't feel right + forll (OnyxAstNode, stmt, if_node->true_block, next) { + process_statement(mod, func, stmt); + } + } + + if (if_node->false_block) { + bh_arr_push(func->code, ((WasmInstruction){ WI_ELSE, 0x00 })); + + forll (OnyxAstNode, stmt, if_node->false_block, next) { + process_statement(mod, func, stmt); + } + } + + bh_arr_push(func->code, ((WasmInstruction){ WI_IF_END, 0x00 })); +} + static void process_assignment(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* assign) { process_expression(mod, func, assign->right); process_assign_lval(mod, func, assign->left); @@ -915,6 +939,7 @@ static void output_instruction(WasmInstruction* instr, bh_buffer* buff) { case WI_LOCAL_SET: case WI_CALL: case WI_BLOCK_START: + case WI_IF_START: leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); bh_buffer_append(buff, leb, leb_len); break; -- 2.25.1