From 16f8ee856e11081ca2ec876cf92dae60893a9c63 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 9 Jul 2020 23:36:39 -0500 Subject: [PATCH] Revamping type system; CODE IS VERY BROKEN --- .vimspector.json | 2 +- include/onyxastnodes.h | 173 +++++++++++++++++------------------------ include/onyxparser.h | 3 - include/onyxsempass.h | 2 +- include/onyxtypes.h | 5 +- onyx | Bin 227448 -> 232544 bytes progs/basic.onyx | 9 +++ src/onyxchecker.c | 157 +++++++++++++++++++++++-------------- src/onyxmsgs.c | 2 +- src/onyxparser.c | 130 +++++++++++++++---------------- src/onyxsymres.c | 88 +++++++++++++++++---- src/onyxtypes.c | 25 ++++++ src/onyxwasm.c | 84 ++++++++++++-------- 13 files changed, 400 insertions(+), 280 deletions(-) create mode 100644 progs/basic.onyx diff --git a/.vimspector.json b/.vimspector.json index e309f7f9..88493853 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -6,7 +6,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/onyx", - "args": ["progs/test.onyx"], + "args": ["progs/basic.onyx"], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index a19b4954..ae30f3ae 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -24,6 +24,10 @@ typedef struct AstIntrinsicCall AstIntrinsicCall; typedef struct AstArgument AstArgument; typedef struct AstUse AstUse; +typedef struct AstType AstType; +typedef struct AstBasicType AstBasicType; +typedef struct AstPointerType AstPointerType; + typedef enum AstKind { Ast_Kind_Error, Ast_Kind_Program, @@ -41,6 +45,9 @@ typedef enum AstKind { Ast_Kind_Binary_Op, Ast_Kind_Type, + Ast_Kind_Basic_Type, + Ast_Kind_Pointer_Type, + Ast_Kind_Literal, Ast_Kind_Param, Ast_Kind_Argument, @@ -92,6 +99,9 @@ typedef enum BinaryOp { Binary_Op_Greater_Equal = 10, } BinaryOp; + +// Base Nodes + // NOTE: AstNode and AstTyped need to be EXACTLY the same for all // arguments existing in AstNode. I do this to avoid a nested // "inheiritance" where you would have to say node.base.base.next @@ -108,67 +118,38 @@ struct AstTyped { u32 flags; OnyxToken *token; AstNode *next; - Type *type; -}; - -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 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 AstLocalGroup { - AstNode base; - - AstLocalGroup *prev_group; - AstLocal *last_local; -}; - -struct AstBlock { - AstNode base; - - AstNode *body; - AstLocalGroup *locals; + // NOTE: 'type_node' is filled out by the parser. + // For a type such as '^^i32', the tree would look something like + // + // Typed Thing -> AstPointerType -> AstPointerType -> AstNode (symbol node) + // + // The symbol node will be filled out during symbol resolution. + // It will end up pointing to an AstBasicType that corresponds to + // the underlying type. + // + // 'type' is filled out afterwards. If it is NULL, the Type* is built + // using the type_node. This can then be used to typecheck this node. + AstType *type_node; + Type *type; }; +// 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 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 AstCall { AstTyped base; AstArgument *arguments; AstNode *callee; }; +struct AstArgument { AstTyped base; AstTyped *value; }; + +// Structure Nodes +struct AstLocalGroup { AstNode base; AstLocalGroup *prev_group; AstLocal *last_local; }; +struct AstBlock { AstNode base; AstNode *body; AstLocalGroup *locals; }; +struct AstWhile { AstNode base; AstTyped *cond; AstBlock *body; }; struct AstIf { AstNode base; - AstTyped *cond; union { @@ -177,47 +158,20 @@ struct AstIf { } true_block, false_block; }; -struct AstWhile { - AstNode base; - - AstTyped *cond; - AstBlock *body; -}; - -struct AstFunction { - AstTyped base; - - AstBlock *body; - AstLocal *params; -}; - -struct AstForeign { - AstNode base; - - OnyxToken *mod_token, *name_token; - AstNode *import; -}; - -struct AstGlobal { - AstTyped base; - - AstTyped *initial_value; -}; - -struct AstCall { - AstTyped base; - - AstArgument *arguments; // NOTE: Expressions that form the actual param list - // They will be chained down using the "next" property - // unless this becomes used by something else - AstNode *callee; // NOTE: Function definition node -}; - -struct AstArgument { - AstTyped base; - - AstTyped *value; -}; +// Type Nodes +// NOTE: This node is very similar to an AstNode, just +// without the 'next' member. This is because types +// can't be in expressions so a 'next' thing +// doesn't make sense. +struct AstType { AstKind kind; u32 flags; char* name; }; +struct AstBasicType { AstType base; Type* type; }; +struct AstPointerType { AstType base; AstType* elem; }; + +// Top level nodes +struct AstFunction { AstTyped base; AstBlock *body; AstLocal *params; }; +struct AstForeign { AstNode base; OnyxToken *mod_token, *name_token; AstNode *import; }; +struct AstGlobal { AstTyped base; AstTyped *initial_value; }; +struct AstUse { AstNode base; OnyxToken *filename; }; typedef enum OnyxIntrinsic { ONYX_INTRINSIC_UNDEFINED, @@ -279,16 +233,29 @@ struct AstIntrinsicCall { OnyxIntrinsic intrinsic; }; -struct AstUse { - AstNode base; - - OnyxToken *filename; -}; - typedef struct OnyxProgram { bh_arr(AstGlobal *) globals; bh_arr(AstFunction *) functions; bh_arr(AstForeign *) foreigns; } OnyxProgram; + + + + +// NOTE: Basic internal types constructed in the parser +extern AstBasicType basic_type_void; +extern AstBasicType basic_type_bool; +extern AstBasicType basic_type_i8; +extern AstBasicType basic_type_u8; +extern AstBasicType basic_type_i16; +extern AstBasicType basic_type_u16; +extern AstBasicType basic_type_i32; +extern AstBasicType basic_type_u32; +extern AstBasicType basic_type_i64; +extern AstBasicType basic_type_u64; +extern AstBasicType basic_type_f32; +extern AstBasicType basic_type_f64; +extern AstBasicType basic_type_rawptr; + #endif // #ifndef ONYXASTNODES_H diff --git a/include/onyxparser.h b/include/onyxparser.h index 98c67d43..fbf30cbb 100644 --- a/include/onyxparser.h +++ b/include/onyxparser.h @@ -12,9 +12,6 @@ typedef struct OnyxParser { OnyxToken *prev_token; OnyxToken *curr_token; - // NOTE: Identifiers currently is only used to resolve type names - // at parse time, since these are the only symbols we know. - bh_table(AstNode *) identifiers; OnyxMessages *msgs; bh_allocator allocator; diff --git a/include/onyxsempass.h b/include/onyxsempass.h index 287c4b33..138ef8e0 100644 --- a/include/onyxsempass.h +++ b/include/onyxsempass.h @@ -22,7 +22,7 @@ typedef struct OnyxSemPassState { AstLocalGroup* curr_local_group; // NOTE: Used in type checking phase - TypeInfo* expected_return_type; + Type* expected_return_type; // NOTE: All symbols a given point that we can resolve bh_table(SemPassSymbol *) symbols; diff --git a/include/onyxtypes.h b/include/onyxtypes.h index 5a50ba4b..5954d375 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -48,7 +48,7 @@ typedef struct Type Type; #define TYPE_KINDS \ TYPE_KIND(Basic, TypeBasic) \ - TYPE_KIND(Pointer, struct { Type *elem; }) + TYPE_KIND(Pointer, struct { TypeBasic base; Type *elem; }) typedef enum TypeKind { Type_Kind_Invalid, @@ -82,5 +82,8 @@ struct Type { extern Type basic_types[]; +struct AstType; +b32 types_are_compatible(Type* t1, Type* t2); +Type* type_build_from_ast(bh_allocator alloc, struct AstType* type_node); #endif // #ifndef ONYX_TYPES diff --git a/onyx b/onyx index 6d1375199e08677a71833fbb674e66d6bfc52d42..25b0e01d5c1b2fbdd99e8007198a5774e4adb6c1 100755 GIT binary patch literal 232544 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 literal 227448 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 diff --git a/progs/basic.onyx b/progs/basic.onyx new file mode 100644 index 00000000..3d3f1584 --- /dev/null +++ b/progs/basic.onyx @@ -0,0 +1,9 @@ +use "progs/intrinsics" + +test :: proc (a: bool) -> i32 { + return 0; +} + +export main :: proc { + a : i32 = 0; +} diff --git a/src/onyxchecker.c b/src/onyxchecker.c index c7d0fcd7..38b9bac4 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -10,6 +10,7 @@ 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); @@ -22,7 +23,11 @@ static void check_assignment(OnyxSemPassState* state, AstAssign* assign) { return; } - if ((assign->lval->flags & Ast_Flag_Const) != 0 && assign->lval->type->is_known) { + if (assign->lval->type == NULL) { + assign->lval->type = type_build_from_ast(state->node_allocator, assign->lval->type_node); + } + + if ((assign->lval->flags & Ast_Flag_Const) != 0 && assign->lval->type != NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_ASSIGN_CONST, assign->base.token->pos, @@ -40,14 +45,14 @@ static void check_assignment(OnyxSemPassState* state, AstAssign* assign) { check_expression(state, assign->expr); - if (!assign->lval->type->is_known) { + if (assign->lval->type == NULL) { assign->lval->type = assign->expr->type; } else { - if (assign->lval->type != assign->expr->type) { + if (!types_are_compatible(assign->lval->type, assign->expr->type)) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_ASSIGNMENT_TYPE_MISMATCH, assign->base.token->pos, - assign->lval->type->name, assign->expr->type->name); + "TEMP", "TEMP"); return; } } @@ -57,14 +62,14 @@ static void check_return(OnyxSemPassState* state, AstReturn* retnode) { if (retnode->expr) { check_expression(state, retnode->expr); - if (retnode->expr->type != state->expected_return_type) { + if (!types_are_compatible(retnode->expr->type, state->expected_return_type)) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_FUNCTION_RETURN_MISMATCH, retnode->expr->token->pos, - retnode->expr->type->name, state->expected_return_type->name); + "TEMP", "TEMP"); } } else { - if (state->expected_return_type->size > 0) { + if (state->expected_return_type->Basic.size > 0) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, retnode->base.token->pos, @@ -75,7 +80,10 @@ static void check_return(OnyxSemPassState* state, AstReturn* retnode) { static void check_if(OnyxSemPassState* state, AstIf* ifnode) { check_expression(state, ifnode->cond); - if (ifnode->cond->type != &builtin_types[TYPE_INFO_KIND_BOOL]) { + + if (ifnode->cond->type->kind != Type_Kind_Basic + || ifnode->cond->type->Basic.kind != Basic_Kind_Bool) { + onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, ifnode->cond->token->pos, @@ -83,13 +91,16 @@ static void check_if(OnyxSemPassState* state, AstIf* ifnode) { return; } - if (ifnode->true_block.as_if) check_statement(state, (AstNode *) ifnode->true_block.as_block); + 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); } static void check_while(OnyxSemPassState* state, AstWhile* whilenode) { check_expression(state, whilenode->cond); - if (whilenode->cond->type != &builtin_types[TYPE_INFO_KIND_BOOL]) { + + if (whilenode->cond->type->kind != Type_Kind_Basic + || whilenode->cond->type->Basic.kind != Basic_Kind_Bool) { + onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, whilenode->cond->token->pos, @@ -182,6 +193,9 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { onyx_token_null_toggle(callee->base.token); } + if (callee->base.type == NULL) { + callee->base.type = type_build_from_ast(state->node_allocator, callee->base.type_node); + } call->base.type = callee->base.type; AstLocal* formal_param = callee->params; @@ -191,13 +205,17 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { while (formal_param != NULL && actual_param != NULL) { check_expression(state, (AstTyped *) actual_param); - if (formal_param->base.type != actual_param->base.type) { + if (formal_param->base.type == NULL) { + formal_param->base.type = type_build_from_ast(state->node_allocator, formal_param->base.type_node); + } + + if (!types_are_compatible(formal_param->base.type, actual_param->base.type)) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_FUNCTION_PARAM_TYPE_MISMATCH, actual_param->value->token->pos, callee->base.token->text, callee->base.token->length, - formal_param->base.type->name, arg_pos, - actual_param->base.type->name); + "TEMP", arg_pos, + "TEMP"); return; } @@ -223,46 +241,59 @@ static void check_call(OnyxSemPassState* state, AstCall* call) { } } -static void check_expression(OnyxSemPassState* state, AstTyped* expr) { - switch (expr->kind) { - case Ast_Kind_Binary_Op: - expr->type = &builtin_types[TYPE_INFO_KIND_UNKNOWN]; +static void check_binaryop(OnyxSemPassState* state, AstBinaryOp* binop) { + check_expression(state, binop->left); + check_expression(state, binop->right); - check_expression(state, ((AstBinaryOp *) expr)->left); - check_expression(state, ((AstBinaryOp *) expr)->right); + if (binop->left->type == NULL) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, + binop->base.token->pos, + NULL, 0); + return; + } - if (((AstBinaryOp *) expr)->left->type == NULL) { - onyx_message_add(state->msgs, - ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, - expr->token->pos, - NULL, 0); - return; - } + if (binop->right->type == NULL) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, + binop->base.token->pos, + NULL, 0); + return; + } - if (((AstBinaryOp *) expr)->right->type == NULL) { - onyx_message_add(state->msgs, - ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, - expr->token->pos, - NULL, 0); - return; - } + if (binop->left->type->kind == Type_Kind_Pointer + || binop->right->type->kind == Type_Kind_Pointer) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + binop->base.token->pos, + "binary operations are not supported for pointers (yet)."); + return; + } - if (((AstBinaryOp *) expr)->left->type != ((AstBinaryOp *) expr)->right->type) { - onyx_message_add(state->msgs, - ONYX_MESSAGE_TYPE_BINOP_MISMATCH_TYPE, - expr->token->pos, - ((AstBinaryOp *) expr)->left->type->name, - ((AstBinaryOp *) expr)->right->type->name); - return; - } + if (!types_are_compatible(binop->left->type, binop->right->type)) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_BINOP_MISMATCH_TYPE, + binop->base.token->pos, + "TEMP", "TEMP"); + return; + } - if (((AstBinaryOp *) expr)->operation >= Binary_Op_Equal - && ((AstBinaryOp *) expr)->operation <= Binary_Op_Greater_Equal) { - expr->type = &builtin_types[TYPE_INFO_KIND_BOOL]; - } else { - expr->type = ((AstBinaryOp *) expr)->left->type; - } + if (binop->operation >= Binary_Op_Equal + && binop->operation <= Binary_Op_Greater_Equal) { + binop->base.type = &basic_types[Basic_Kind_Bool]; + } else { + binop->base.type = binop->left->type; + } +} +static void check_expression(OnyxSemPassState* state, AstTyped* expr) { + if (expr->type == NULL) { + expr->type = type_build_from_ast(state->node_allocator, expr->type_node); + } + + switch (expr->kind) { + case Ast_Kind_Binary_Op: + check_binaryop(state, (AstBinaryOp *) expr); break; case Ast_Kind_Unary_Op: @@ -289,7 +320,7 @@ static void check_expression(OnyxSemPassState* state, AstTyped* expr) { case Ast_Kind_Local: case Ast_Kind_Param: - if (!expr->type->is_known) { + if (expr->type == NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, expr->token->pos, @@ -298,7 +329,7 @@ static void check_expression(OnyxSemPassState* state, AstTyped* expr) { break; case Ast_Kind_Global: - if (!expr->type->is_known) { + if (expr->type == NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, expr->token->pos, @@ -314,7 +345,7 @@ static void check_expression(OnyxSemPassState* state, AstTyped* expr) { case Ast_Kind_Literal: // NOTE: Literal types should have been decided // in the parser (for now). - assert(expr->type->is_known); + assert(expr->type != NULL); break; default: @@ -327,13 +358,17 @@ static void check_global(OnyxSemPassState* state, AstGlobal* global) { if (global->initial_value) { check_expression(state, global->initial_value); - if (global->base.type->is_known) { - if (global->base.type != global->initial_value->type) { + if (global->base.type == NULL) { + global->base.type = type_build_from_ast(state->node_allocator, global->base.type_node); + } + + if (global->base.type != NULL) { + if (!types_are_compatible(global->base.type, global->initial_value->type)) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_GLOBAL_TYPE_MISMATCH, global->base.token->pos, global->base.token->text, global->base.token->length, - global->base.type->name, global->initial_value->type->name); + "TEMP", "TEMP"); return; } } else { @@ -342,7 +377,7 @@ static void check_global(OnyxSemPassState* state, AstGlobal* global) { } } else { - if (!global->base.type || !global->base.type->is_known) { + if (global->base.type == NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, global->base.token->pos, @@ -375,7 +410,7 @@ static void check_block(OnyxSemPassState* state, AstBlock* block) { check_statement_chain(state, block->body); forll(AstLocal, local, block->locals->last_local, prev_local) { - if (!local->base.type->is_known) { + if (local->base.type == NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE, local->base.token->pos, @@ -387,7 +422,11 @@ static void check_block(OnyxSemPassState* state, AstBlock* block) { static void check_function(OnyxSemPassState* state, AstFunction* func) { for (AstLocal *param = func->params; param != NULL; param = (AstLocal *) param->base.next) { - if (!param->base.type->is_known) { + if (param->base.type == NULL) { + param->base.type = type_build_from_ast(state->node_allocator, param->base.type_node); + } + + if (param->base.type == NULL) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, param->base.token->pos, @@ -395,7 +434,7 @@ static void check_function(OnyxSemPassState* state, AstFunction* func) { return; } - if (param->base.type->size == 0) { + if (param->base.type->Basic.size == 0) { onyx_message_add(state->msgs, ONYX_MESSAGE_TYPE_LITERAL, param->base.token->pos, @@ -404,6 +443,10 @@ static void check_function(OnyxSemPassState* state, AstFunction* func) { } } + if (func->base.type == NULL) { + func->base.type = type_build_from_ast(state->node_allocator, func->base.type_node); + } + state->expected_return_type = func->base.type; if (func->body) { check_block(state, func->body); diff --git a/src/onyxmsgs.c b/src/onyxmsgs.c index 4ef2848c..949adcf1 100644 --- a/src/onyxmsgs.c +++ b/src/onyxmsgs.c @@ -63,7 +63,7 @@ static void print_detailed_message(OnyxMessage* msg, bh_file_contents* fc) { void onyx_message_print(OnyxMessages* msgs) { OnyxMessage* msg = msgs->first; - i32 msg_count = 3; + i32 msg_count = 1000; while (msg && msg_count-- > 0) { if (msg->pos.filename) { diff --git a/src/onyxparser.c b/src/onyxparser.c index 0f5fb536..3356c981 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -6,27 +6,22 @@ // NOTE: The one weird define you need to know before read the code below #define make_node(nclass, kind) onyx_ast_node_new(parser->allocator, sizeof(nclass), kind) -struct TypeInfo builtin_types[] = { - { TYPE_INFO_KIND_UNKNOWN, 0, "unknown" }, - { TYPE_INFO_KIND_VOID, 0, "void", 0, 0, 0, 0, 1 }, - - { TYPE_INFO_KIND_BOOL, 1, "bool", 0, 1, 0, 1, 1 }, - - { TYPE_INFO_KIND_UINT32, 4, "u32", 1, 1, 0, 0, 1 }, - { TYPE_INFO_KIND_UINT64, 8, "u64", 1, 1, 0, 0, 1 }, - - { TYPE_INFO_KIND_INT32, 4, "i32", 1, 0, 0, 0, 1 }, - { TYPE_INFO_KIND_INT64, 8, "i64", 1, 0, 0, 0, 1 }, - - { TYPE_INFO_KIND_FLOAT32, 4, "f32", 0, 0, 1, 0, 1 }, - { TYPE_INFO_KIND_FLOAT64, 8, "f64", 0, 0, 1, 0, 1}, - { TYPE_INFO_KIND_SOFT_FLOAT, 8, "sf64", 0, 0, 1, 0, 1 }, - - { 0xffffffff } // Sentinel -}; - static AstNode error_node = { Ast_Kind_Error, 0, NULL, NULL }; +AstBasicType basic_type_void = { { Ast_Kind_Basic_Type, 0, "void" }, &basic_types[Basic_Kind_Void] }; +AstBasicType basic_type_bool = { { Ast_Kind_Basic_Type, 0, "bool" }, &basic_types[Basic_Kind_Bool] }; +AstBasicType basic_type_i8 = { { Ast_Kind_Basic_Type, 0, "i8" }, &basic_types[Basic_Kind_I8] }; +AstBasicType basic_type_u8 = { { Ast_Kind_Basic_Type, 0, "u8" }, &basic_types[Basic_Kind_U8] }; +AstBasicType basic_type_i16 = { { Ast_Kind_Basic_Type, 0, "i16" }, &basic_types[Basic_Kind_I16] }; +AstBasicType basic_type_u16 = { { Ast_Kind_Basic_Type, 0, "u16" }, &basic_types[Basic_Kind_U16] }; +AstBasicType basic_type_i32 = { { Ast_Kind_Basic_Type, 0, "i32" }, &basic_types[Basic_Kind_I32] }; +AstBasicType basic_type_u32 = { { Ast_Kind_Basic_Type, 0, "u32" }, &basic_types[Basic_Kind_U32] }; +AstBasicType basic_type_i64 = { { Ast_Kind_Basic_Type, 0, "i64" }, &basic_types[Basic_Kind_I64] }; +AstBasicType basic_type_u64 = { { Ast_Kind_Basic_Type, 0, "u64" }, &basic_types[Basic_Kind_U64] }; +AstBasicType basic_type_f32 = { { Ast_Kind_Basic_Type, 0, "f32" }, &basic_types[Basic_Kind_F32] }; +AstBasicType basic_type_f64 = { { Ast_Kind_Basic_Type, 0, "f64" }, &basic_types[Basic_Kind_F64] }; +AstBasicType basic_type_rawptr = { { Ast_Kind_Basic_Type, 0, "rawptr" }, &basic_types[Basic_Kind_Rawptr] }; + // NOTE: Forward declarations static void parser_next_token(OnyxParser* parser); static void parser_prev_token(OnyxParser* parser); @@ -41,7 +36,7 @@ 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 AstNode* parse_type(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); @@ -94,33 +89,32 @@ static AstNumLit* parse_numeric_literal(OnyxParser* parser) { lit_node->base.flags |= Ast_Flag_Comptime; lit_node->value.l = 0ll; + AstType* type; onyx_token_null_toggle(lit_node->base.token); - - TypeInfo* type; char* tok = lit_node->base.token->text; // NOTE: charset_contains() behaves more like string_contains() // so I'm using it in this case if (charset_contains(tok, '.')) { if (tok[lit_node->base.token->length - 1] == 'f') { - type = &builtin_types[TYPE_INFO_KIND_FLOAT32]; + type = (AstType *) &basic_type_f32; lit_node->value.f = strtof(tok, NULL); } else { - type = &builtin_types[TYPE_INFO_KIND_FLOAT64]; + type = (AstType *) &basic_type_f64; lit_node->value.d = strtod(tok, NULL); } } else { i64 value = strtoll(tok, NULL, 0); if (bh_abs(value) < ((u64) 1 << 32)) { - type = &builtin_types[TYPE_INFO_KIND_INT32]; + type = (AstType *) &basic_type_i32; } else { - type = &builtin_types[TYPE_INFO_KIND_INT64]; + type = (AstType *) &basic_type_i64; } lit_node->value.l = value; } - lit_node->base.type = type; + lit_node->base.type_node = type; onyx_token_null_toggle(lit_node->base.token); return lit_node; } @@ -209,7 +203,7 @@ static AstTyped* parse_factor(OnyxParser* parser) { case Token_Type_Literal_True: { AstNumLit* bool_node = make_node(AstNumLit, Ast_Kind_Literal); - bool_node->base.type = &builtin_types[TYPE_INFO_KIND_BOOL]; + bool_node->base.type_node = (AstType *) &basic_type_i8; bool_node->base.token = expect(parser, Token_Type_Literal_True); bool_node->value.i = 1; retval = (AstTyped *) bool_node; @@ -219,7 +213,7 @@ static AstTyped* parse_factor(OnyxParser* parser) { case Token_Type_Literal_False: { AstNumLit* bool_node = make_node(AstNumLit, Ast_Kind_Literal); - bool_node->base.type = &builtin_types[TYPE_INFO_KIND_BOOL]; + bool_node->base.type_node = (AstType *) &basic_type_i8; bool_node->base.token = expect(parser, Token_Type_Literal_False); bool_node->value.i = 0; retval = (AstTyped *) bool_node; @@ -238,7 +232,7 @@ static AstTyped* parse_factor(OnyxParser* parser) { parser_next_token(parser); AstUnaryOp* cast_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op); - cast_node->base.type = parse_type(parser); + cast_node->base.type_node = parse_type(parser); cast_node->operation = Unary_Op_Cast; cast_node->expr = retval; retval = (AstTyped *) cast_node; @@ -398,16 +392,16 @@ static b32 parse_symbol_statement(OnyxParser* parser, AstNode** ret) { case ':': { parser_next_token(parser); - TypeInfo* type = &builtin_types[TYPE_INFO_KIND_UNKNOWN]; + AstType* type_node = NULL; // NOTE: var: type if (parser->curr_token->type == Token_Type_Symbol) { - type = parse_type(parser); + type_node = parse_type(parser); } AstLocal* local = make_node(AstLocal, Ast_Kind_Local); local->base.token = symbol; - local->base.type = type; + local->base.type_node = type_node; local->base.flags |= Ast_Flag_Lval; // NOTE: DELETE *ret = (AstNode *) local; @@ -621,26 +615,40 @@ static AstBlock* parse_block(OnyxParser* parser) { return block; } -static TypeInfo* parse_type(OnyxParser* parser) { - TypeInfo* type_info = &builtin_types[TYPE_INFO_KIND_UNKNOWN]; +static AstType* parse_type(OnyxParser* parser) { + AstType* root = NULL; + AstType** next_insertion = &root; - OnyxToken* symbol = expect(parser, Token_Type_Symbol); - if (symbol == NULL) return type_info; + while (1) { + if (parser->curr_token->type == '^') { + AstPointerType* new = make_node(AstPointerType, Ast_Kind_Pointer_Type); + *next_insertion = (AstType *) new; + next_insertion = &new->elem; + } - onyx_token_null_toggle(symbol); + else if (parser->curr_token->type == Token_Type_Symbol) { + AstNode* symbol_node = make_node(AstNode, Ast_Kind_Symbol); + symbol_node->token = expect(parser, Token_Type_Symbol); + *next_insertion = (AstType *) symbol_node; + next_insertion = NULL; + } - if (!bh_table_has(AstNode*, parser->identifiers, symbol->text)) { - onyx_message_add(parser->msgs, ONYX_MESSAGE_TYPE_UNKNOWN_TYPE, symbol->pos, symbol->text); - } else { - AstTyped* type_info_node = bh_table_get(AstTyped*, parser->identifiers, symbol->text); + 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); - if (type_info_node->kind == Ast_Kind_Type) { - type_info = type_info_node->type; + parser_next_token(parser); + break; } + + if (next_insertion == NULL) break; } - onyx_token_null_toggle(symbol); - return type_info; + return root; } static AstLocal* parse_function_params(OnyxParser* parser) { @@ -668,7 +676,7 @@ static AstLocal* parse_function_params(OnyxParser* parser) { curr_param = make_node(AstLocal, Ast_Kind_Param); curr_param->base.token = symbol; curr_param->base.flags |= Ast_Flag_Const; - curr_param->base.type = parse_type(parser); + curr_param->base.type_node = parse_type(parser); if (first_param == NULL) first_param = curr_param; @@ -727,10 +735,10 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { if (parser->curr_token->type == Token_Type_Right_Arrow) { expect(parser, Token_Type_Right_Arrow); - TypeInfo* return_type = parse_type(parser); - func_def->base.type = return_type; + AstType* return_type = parse_type(parser); + func_def->base.type_node = return_type; } else { - func_def->base.type = &builtin_types[TYPE_INFO_KIND_VOID]; + func_def->base.type_node = (AstType *) &basic_type_void; } func_def->body = parse_block(parser); @@ -749,10 +757,10 @@ static AstNode* parse_foreign(OnyxParser* parser) { foreign->import = (AstNode *) parse_function_definition(parser); } else { - TypeInfo* type = parse_type(parser); + AstType* type = parse_type(parser); AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); - global->base.type = type; + global->base.type_node = type; global->base.flags |= Ast_Flag_Lval; foreign->import = (AstNode *) global; @@ -776,7 +784,6 @@ static AstNode* parse_top_level_constant_symbol(OnyxParser* parser) { // Global constant with initial value AstGlobal* global = make_node(AstGlobal, Ast_Kind_Global); global->initial_value = parse_expression(parser); - global->base.type = &builtin_types[TYPE_INFO_KIND_UNKNOWN]; global->base.flags |= Ast_Flag_Const; global->base.flags |= Ast_Flag_Lval; global->base.flags |= Ast_Flag_Comptime; @@ -820,7 +827,7 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { expect(parser, ':'); - TypeInfo* type = &builtin_types[TYPE_INFO_KIND_UNKNOWN]; + AstType* type = NULL; if (parser->curr_token->type == Token_Type_Symbol) { type = parse_type(parser); @@ -832,7 +839,7 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { AstNode* node = parse_top_level_constant_symbol(parser); if (node->kind == Ast_Kind_Global) { - ((AstGlobal *) node)->base.type = type; + ((AstGlobal *) node)->base.type_node = type; } if (node->kind == Ast_Kind_Foreign) { @@ -851,7 +858,7 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { global->base.token = symbol; global->base.flags |= Ast_Flag_Lval; global->initial_value = parse_expression(parser); - global->base.type = type; + global->base.type_node = type; return (AstNode *) global; @@ -891,16 +898,6 @@ void* onyx_ast_node_new(bh_allocator alloc, i32 size, AstKind kind) { OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer, OnyxMessages* msgs) { OnyxParser parser; - bh_table_init(bh_heap_allocator(), parser.identifiers, 61); - - TypeInfo* it = &builtin_types[0]; - while (it->kind != 0xffffffff) { - AstTyped* tmp = onyx_ast_node_new(alloc, sizeof(AstTyped), Ast_Kind_Type); - tmp->type = it; - bh_table_put(AstNode*, parser.identifiers, (char *)it->name, tmp); - it++; - } - parser.allocator = alloc; parser.tokenizer = tokenizer; parser.curr_token = tokenizer->tokens; @@ -909,7 +906,6 @@ OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer, Onyx } void onyx_parser_free(OnyxParser* parser) { - bh_table_free(parser->identifiers); } bh_arr(AstNode *) onyx_parse(OnyxParser *parser) { diff --git a/src/onyxsymres.c b/src/onyxsymres.c index e3a19b5d..06e43044 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -2,6 +2,7 @@ #include "onyxsempass.h" static void symbol_introduce(OnyxSemPassState* state, 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); @@ -9,7 +10,7 @@ static void local_group_enter(OnyxSemPassState* state, AstLocalGroup* local_grou 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, AstNode** expr); +static void symres_expression(OnyxSemPassState* state, AstTyped** expr); static void symres_assignment(OnyxSemPassState* state, AstAssign* assign); static void symres_return(OnyxSemPassState* state, AstReturn* ret); static void symres_if(OnyxSemPassState* state, AstIf* ifnode); @@ -18,6 +19,7 @@ static void symres_statement_chain(OnyxSemPassState* state, AstNode* walker, Ast 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); @@ -89,6 +91,13 @@ static void local_group_leave(OnyxSemPassState* state) { state->curr_local_group = state->curr_local_group->prev_group; } +static void symbol_basic_type_introduce(OnyxSemPassState* state, AstBasicType* basic_type) { + SemPassSymbol* sp_sym = bh_alloc_item(state->allocator, SemPassSymbol); + sp_sym->node = (AstNode *) basic_type; + sp_sym->shadowed = NULL; + 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); @@ -113,7 +122,27 @@ static b32 symbol_unique_introduce(OnyxSemPassState* state, AstNode* symbol) { return 1; } +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); + } + + // NOTE: Already resolved + if (type->kind == Ast_Kind_Basic_Type) return type; + + if (type->kind == Ast_Kind_Pointer_Type) { + ((AstPointerType *) type)->elem = symres_type(state, ((AstPointerType *) type)->elem); + return type; + } + + assert(("Bad type node", 0)); + return NULL; +} + static void symres_local(OnyxSemPassState* state, AstLocal** local) { + (*local)->base.type_node = symres_type(state, (*local)->base.type_node); symbol_introduce(state, (AstNode *) *local); } @@ -125,15 +154,23 @@ static void symres_call(OnyxSemPassState* state, AstCall* call) { symres_statement_chain(state, (AstNode *) call->arguments, (AstNode **) &call->arguments); } -static void symres_expression(OnyxSemPassState* state, AstNode** expr) { +static void symres_unaryop(OnyxSemPassState* state, AstUnaryOp** unaryop) { + if ((*unaryop)->operation == Unary_Op_Cast) { + (*unaryop)->base.type_node = symres_type(state, (*unaryop)->base.type_node); + } + + symres_expression(state, &(*unaryop)->expr); +} + +static void symres_expression(OnyxSemPassState* state, AstTyped** expr) { switch ((*expr)->kind) { case Ast_Kind_Binary_Op: - symres_expression(state, (AstNode **) &((AstBinaryOp *)(*expr))->left); - symres_expression(state, (AstNode **) &((AstBinaryOp *)(*expr))->right); + symres_expression(state, &((AstBinaryOp *)(*expr))->left); + symres_expression(state, &((AstBinaryOp *)(*expr))->right); break; case Ast_Kind_Unary_Op: - symres_expression(state, (AstNode **) &((AstUnaryOp *)(*expr))->expr); + symres_unaryop(state, (AstUnaryOp **) expr); break; case Ast_Kind_Call: symres_call(state, (AstCall *) *expr); break; @@ -141,13 +178,15 @@ static void symres_expression(OnyxSemPassState* state, AstNode** expr) { case Ast_Kind_Block: symres_block(state, (AstBlock *) *expr); break; case Ast_Kind_Symbol: - *expr = symbol_resolve(state, *expr); + *expr = (AstTyped *) symbol_resolve(state, (AstNode *) *expr); break; // NOTE: This is a good case, since it means the symbol is already resolved case Ast_Kind_Local: break; - case Ast_Kind_Literal: break; + case Ast_Kind_Literal: + (*expr)->type_node = symres_type(state, (*expr)->type_node); + break; default: DEBUG_HERE; @@ -160,16 +199,16 @@ static void symres_assignment(OnyxSemPassState* state, AstAssign* assign) { if (lval == NULL) return; assign->lval = lval; - symres_expression(state, (AstNode **) &assign->expr); + symres_expression(state, &assign->expr); } static void symres_return(OnyxSemPassState* state, AstReturn* ret) { if (ret->expr) - symres_expression(state, (AstNode **) &ret->expr); + symres_expression(state, &ret->expr); } static void symres_if(OnyxSemPassState* state, AstIf* ifnode) { - symres_expression(state, (AstNode **) &ifnode->cond); + symres_expression(state, &ifnode->cond); if (ifnode->true_block.as_if != NULL) { if (ifnode->true_block.as_if->base.kind == Ast_Kind_Block) symres_block(state, ifnode->true_block.as_block); @@ -192,7 +231,7 @@ static void symres_if(OnyxSemPassState* state, AstIf* ifnode) { } static void symres_while(OnyxSemPassState* state, AstWhile* whilenode) { - symres_expression(state, (AstNode **) &whilenode->cond); + symres_expression(state, &whilenode->cond); symres_block(state, whilenode->body); } @@ -205,7 +244,7 @@ static b32 symres_statement(OnyxSemPassState* state, AstNode* stmt) { case Ast_Kind_If: symres_if(state, (AstIf *) stmt); return 0; case Ast_Kind_While: symres_while(state, (AstWhile *) stmt); return 0; case Ast_Kind_Call: symres_call(state, (AstCall *) stmt); return 0; - case Ast_Kind_Argument: symres_expression(state, (AstNode **) &((AstArgument *)stmt)->value); return 0; + case Ast_Kind_Argument: symres_expression(state, (AstTyped **) &((AstArgument *)stmt)->value); return 0; case Ast_Kind_Block: symres_block(state, (AstBlock *) stmt); return 0; default: return 0; @@ -236,9 +275,17 @@ static void symres_block(OnyxSemPassState* state, AstBlock* block) { 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); } + if (func->base.type_node != NULL) { + if (func->base.type_node->kind == Ast_Kind_Symbol) { + func->base.type_node = symres_type(state, func->base.type_node); + } + } + symres_block(state, func->body); for (AstLocal *param = func->params; param != NULL; param = (AstLocal *) param->base.next) { @@ -248,7 +295,22 @@ static void symres_function(OnyxSemPassState* state, AstFunction* func) { void onyx_resolve_symbols(OnyxSemPassState* state, OnyxProgram* program) { - // NOTE: First, introduce all global symbols + // NOTE: Add types to global scope + symbol_basic_type_introduce(state, &basic_type_void); + symbol_basic_type_introduce(state, &basic_type_bool); + symbol_basic_type_introduce(state, &basic_type_i8); + symbol_basic_type_introduce(state, &basic_type_u8); + symbol_basic_type_introduce(state, &basic_type_i16); + symbol_basic_type_introduce(state, &basic_type_u16); + symbol_basic_type_introduce(state, &basic_type_i32); + symbol_basic_type_introduce(state, &basic_type_u32); + symbol_basic_type_introduce(state, &basic_type_i64); + symbol_basic_type_introduce(state, &basic_type_u64); + symbol_basic_type_introduce(state, &basic_type_f32); + symbol_basic_type_introduce(state, &basic_type_f64); + 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; diff --git a/src/onyxtypes.c b/src/onyxtypes.c index eee00a7d..f70a2710 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -1,5 +1,7 @@ #include "onyxtypes.h" +#include "onyxastnodes.h" +// NOTE: These have to be in the same order as Basiuc Type basic_types[] = { { Type_Kind_Basic, { Basic_Kind_Void, 0, 0, "void" } }, @@ -47,3 +49,26 @@ b32 types_are_compatible(Type* t1, Type* t2) { return 0; } + +Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { + if (type_node == NULL) return NULL; + + switch (type_node->kind) { + case Ast_Kind_Pointer_Type: { + TypePointer* ptr_type = bh_alloc_item(alloc, TypePointer); + + ptr_type->base.flags |= Basic_Flag_Pointer; + ptr_type->base.size = 4; + ptr_type->elem = type_build_from_ast(alloc, ((AstPointerType *) type_node)->elem); + + return (Type *) ptr_type; + } + + case Ast_Kind_Basic_Type: + return ((AstBasicType *) type_node)->type; + + default: + assert(("Node is not a type node", 0)); + return NULL; + } +} diff --git a/src/onyxwasm.c b/src/onyxwasm.c index aaee1bbb..9eb365a0 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -195,15 +195,23 @@ static const char* wi_string(WasmInstructionType wit) { } } -static WasmType onyx_type_to_wasm_type(TypeInfo* type) { - if (type->is_bool) return WASM_TYPE_INT32; - else if (type->is_int) { - if (type->size == 4) return WASM_TYPE_INT32; - if (type->size == 8) return WASM_TYPE_INT64; +static WasmType onyx_type_to_wasm_type(Type* type) { + if (type->kind == Type_Kind_Pointer) { + return WASM_TYPE_INT32; } - else if (type->is_float) { - if (type->size == 4) return WASM_TYPE_FLOAT32; - if (type->size == 8) return WASM_TYPE_FLOAT64; + + if (type->kind == Type_Kind_Basic) { + TypeBasic* basic = &type->Basic; + if (basic->flags & Basic_Flag_Boolean) return WASM_TYPE_INT32; + if (basic->flags & Basic_Flag_Integer) { + if (basic->size <= 4) return WASM_TYPE_INT32; + if (basic->size == 8) return WASM_TYPE_INT64; + } + if (basic->flags & Basic_Flag_Float) { + if (basic->size <= 4) return WASM_TYPE_FLOAT32; + if (basic->size == 8) return WASM_TYPE_FLOAT64;; + } + if (basic->size == 0) return WASM_TYPE_VOID; } return WASM_TYPE_VOID; @@ -457,7 +465,7 @@ static void compile_binop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, A // Unsigned instructions are always right after // the signed equivalent if (is_sign_significant) { - if (binop->left->type->is_unsigned) { + if (binop->left->type->Basic.flags & Basic_Flag_Unsigned) { binop_instr = (WasmInstructionType) ((i32) binop_instr + 1); } } @@ -476,25 +484,29 @@ static void compile_unaryop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, switch (unop->operation) { case Unary_Op_Negate: { - TypeInfoKind type_kind = unop->base.type->kind; + TypeBasic* type = &unop->base.type->Basic; - if (type_kind == TYPE_INFO_KIND_INT32) { + if (type->kind == Basic_Kind_I32 + || type->kind == Basic_Kind_I16 + || type->kind == Basic_Kind_I8) { WID(WI_I32_CONST, 0x00); compile_expression(mod, &code, unop->expr); WI(WI_I32_SUB); - } else if (type_kind == TYPE_INFO_KIND_INT64) { + } + else if (type->kind == Basic_Kind_I64) { WID(WI_I64_CONST, 0x00); compile_expression(mod, &code, unop->expr); WI(WI_I64_SUB); - } else { + } + else { compile_expression(mod, &code, unop->expr); - if (type_kind == TYPE_INFO_KIND_FLOAT32) + if (type->kind == Basic_Kind_F32) WI(WI_F32_NEG); - if (type_kind == TYPE_INFO_KIND_FLOAT64) + if (type->kind == Basic_Kind_F64) WI(WI_F64_NEG); } @@ -687,28 +699,34 @@ static void compile_cast(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, As compile_expression(mod, &code, cast->expr); - TypeInfo* from = cast->expr->type; - TypeInfo* to = cast->base.type; + Type* from = cast->expr->type; + Type* to = cast->base.type; i32 fromidx = 0, toidx = 0; - if (from->is_int) { - if (from->size == 4 && !from->is_unsigned) fromidx = 0; - else if (from->size == 4 && from->is_unsigned) fromidx = 1; - else if (from->size == 8 && !from->is_unsigned) fromidx = 2; - else if (from->size == 8 && from->is_unsigned) fromidx = 3; - } else if (from->is_float) { - if (from->size == 4) fromidx = 4; - else if (from->size == 8) fromidx = 5; + if (from->Basic.flags & Basic_Flag_Numeric) { + b32 unsign = (from->Basic.flags & Basic_Flag_Unsigned) != 0; + + if (from->Basic.size == 4 && !unsign) fromidx = 0; + else if (from->Basic.size == 4 && unsign) fromidx = 1; + else if (from->Basic.size == 8 && !unsign) fromidx = 2; + else if (from->Basic.size == 8 && unsign) fromidx = 3; + } + else if (from->Basic.flags & Basic_Flag_Float) { + if (from->Basic.size == 4) fromidx = 4; + else if (from->Basic.size == 8) fromidx = 5; } - if (to->is_int) { - if (to->size == 4 && !to->is_unsigned) toidx = 0; - else if (to->size == 4 && to->is_unsigned) toidx = 1; - else if (to->size == 8 && !to->is_unsigned) toidx = 2; - else if (to->size == 8 && to->is_unsigned) toidx = 3; - } else if (to->is_float) { - if (to->size == 4) toidx = 4; - else if (to->size == 8) toidx = 5; + if (to->Basic.flags & Basic_Flag_Numeric) { + b32 unsign = (to->Basic.flags & Basic_Flag_Unsigned) != 0; + + if (to->Basic.size == 4 && !unsign) toidx = 0; + else if (to->Basic.size == 4 && unsign) toidx = 1; + else if (to->Basic.size == 8 && !unsign) toidx = 2; + else if (to->Basic.size == 8 && unsign) toidx = 3; + } + else if (to->Basic.flags & Basic_Flag_Float) { + if (to->Basic.size == 4) toidx = 4; + else if (to->Basic.size == 8) toidx = 5; } WasmInstructionType cast_op = cast_map[fromidx][toidx]; -- 2.25.1