From c25f887bc2eec174d8287335ac0fc4f9176d5883 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 22 Jun 2020 22:20:05 -0500 Subject: [PATCH] Various improvements and bug fixes --- include/onyxmsgs.h | 1 + misc/onyx.vim | 11 +++++++---- onyx | Bin 184712 -> 185128 bytes progs/game.onyx | 14 +++++--------- src/onyx.c | 7 +------ src/onyxmsgs.c | 5 +++-- src/onyxparser.c | 13 +++++++------ src/onyxsempass.c | 5 +++++ src/onyxtypecheck.c | 24 ++++++++++++++++++++++++ 9 files changed, 53 insertions(+), 27 deletions(-) diff --git a/include/onyxmsgs.h b/include/onyxmsgs.h index b6e0a8fb..c2919ea9 100644 --- a/include/onyxmsgs.h +++ b/include/onyxmsgs.h @@ -20,6 +20,7 @@ typedef enum OnyxMessageType { ONYX_MESSAGE_TYPE_BINOP_MISMATCH_TYPE, ONYX_MESSAGE_TYPE_ASSIGNMENT_TYPE_MISMATCH, ONYX_MESSAGE_TYPE_EXPECTED_EXPRESSION, + ONYX_MESSAGE_TYPE_CALL_NON_FUNCTION, ONYX_MESSAGE_TYPE_FUNCTION_RETURN_MISMATCH, ONYX_MESSAGE_TYPE_FUNCTION_PARAM_TYPE_MISMATCH, diff --git a/misc/onyx.vim b/misc/onyx.vim index 5b008a97..4e85c159 100644 --- a/misc/onyx.vim +++ b/misc/onyx.vim @@ -12,7 +12,7 @@ set cpo&vim syn keyword onyxKeyword struct proc use export foreign global syn keyword onyxKeyword if elseif else -syn keyword onyxKeyword for return do +syn keyword onyxKeyword for while loop return do syn keyword onyxKeyword return syn keyword onyxKeyword as @@ -21,14 +21,17 @@ syn keyword onyxType i64 syn keyword onyxType f32 syn keyword onyxType f64 +syn keyword onyxConstant true false + syn keyword onyxCommentStart contained TODO NOTE BUG HACK syn region onyxComment start="//" end="$" keepend contains=onyxCommentStart -hi def link onyxKeyword Statement -hi def link onyxType Type -hi def link onyxComment Comment +hi def link onyxKeyword Statement +hi def link onyxType Type +hi def link onyxComment Comment hi def link onyxCommentStart Todo +hi def link onyxConstant Constant let b:current_syntax = "onyx" let &cpo = s:cpo_save diff --git a/onyx b/onyx index 06ca04055b3312b7c0578b066db555927aca8fec..8c6c53a73be7048de096302eae3d6e624f3730f8 100755 GIT binary patch delta 56976 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 F{{m@}9K8Sl delta 56352 zcmd442YggT_cwm$ZnC?%VK0g4gI@is&o9!2nFU4i0yoQ5pA3(U-|Q4pa=HoV z6qTjZ1+Rs-ajQ9U+{@m1EPcnvl9avFmB~TlAsnwc%!;DB~#wML47wRT~6Ila6e@Lle^~^bWUsKl-sN7+A5Re0jlb$ zT2B6QWkL0-&oOy!o_f04WVuXUL00DT%;#ST%?sboUU)To;l)-9Z@!iR3$qt~oW1Zj z6co?h|Z>I;`FqIk>7?qyB37i7M(l^}m$|?N$>SC&_sW)GH0r z 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%0DK= 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, ONYX_AST_NODE_KIND_ASSIGNMENT); + assignment->token = parser->curr_token; parser_next_token(parser); OnyxAstNode* lval = onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_SYMBOL); lval->token = symbol; OnyxAstNode* rval = parse_expression(parser); - OnyxAstNode* assignment = onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_ASSIGNMENT); assignment->right = rval; assignment->left = lval; *ret = assignment; @@ -540,20 +541,20 @@ static OnyxAstNode* parse_statement(OnyxParser* parser) { } static OnyxAstNodeBlock* parse_block(OnyxParser* parser) { + OnyxAstNodeBlock* block = (OnyxAstNodeBlock *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_BLOCK); + OnyxAstNodeScope* scope = (OnyxAstNodeScope *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_SCOPE); + block->scope = scope; + // --- is for an empty block if (parser->curr_token->type == TOKEN_TYPE_SYM_MINUS) { expect(parser, TOKEN_TYPE_SYM_MINUS); expect(parser, TOKEN_TYPE_SYM_MINUS); expect(parser, TOKEN_TYPE_SYM_MINUS); - return NULL; + return block; } expect(parser, TOKEN_TYPE_OPEN_BRACE); - OnyxAstNodeBlock* block = (OnyxAstNodeBlock *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_BLOCK); - OnyxAstNodeScope* scope = (OnyxAstNodeScope *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_SCOPE); - block->scope = scope; - OnyxAstNode** next = &block->body; OnyxAstNode* stmt = NULL; while (parser->curr_token->type != TOKEN_TYPE_CLOSE_BRACE) { diff --git a/src/onyxsempass.c b/src/onyxsempass.c index d593cb30..0426789b 100644 --- a/src/onyxsempass.c +++ b/src/onyxsempass.c @@ -17,7 +17,12 @@ OnyxSemPassState onyx_sempass_create(bh_allocator alloc, bh_allocator node_alloc return state; } +static void collapse_scopes(OnyxAstNode* root_node, OnyxAstNodeScope* prev_scope) { + +} + void onyx_sempass(OnyxSemPassState* state, OnyxAstNode* root_node) { onyx_resolve_symbols(state, root_node); onyx_type_check(state, root_node); + collapse_scopes(root_node, NULL); } diff --git a/src/onyxtypecheck.c b/src/onyxtypecheck.c index 28b1f72e..9a620468 100644 --- a/src/onyxtypecheck.c +++ b/src/onyxtypecheck.c @@ -20,6 +20,22 @@ static void typecheck_assignment(OnyxSemPassState* state, OnyxAstNode* assign) { return; } + if ((assign->left->flags & ONYX_AST_FLAG_LVAL) == 0) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_NOT_LVAL, + assign->token->pos, + assign->left->token->token, assign->left->token->length); + return; + } + + if ((assign->left->flags & ONYX_AST_FLAG_CONST) != 0 && assign->left->type->is_known) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_ASSIGN_CONST, + assign->token->pos, + assign->left->token->token, assign->left->token->length); + return; + } + typecheck_expression(state, assign->right); if (!assign->left->type->is_known) { @@ -72,6 +88,14 @@ static void typecheck_call(OnyxSemPassState* state, OnyxAstNodeCall* call) { return; } + if (callee->kind != ONYX_AST_NODE_KIND_FUNCDEF) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_CALL_NON_FUNCTION, + call->token->pos, + callee->token->token, callee->token->length); + return; + } + call->type = callee->return_type; OnyxAstNodeParam* formal_param = callee->params; -- 2.25.1