From b4b0bc34a8c084ed0f45d5eee9b90a47c252016c Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 19 Jul 2020 12:51:59 -0500 Subject: [PATCH] Added address of and deference operators --- include/onyxastnodes.h | 6 ++ include/onyxtypes.h | 3 + onyx | Bin 255864 -> 262992 bytes progs/arrays.onyx | 8 +-- progs/print_funcs.onyx | 11 +++ src/onyxchecker.c | 50 +++++++++++-- src/onyxparser.c | 160 ++++++++++++++++++++++------------------- src/onyxsymres.c | 8 +++ src/onyxtypes.c | 20 +++--- src/onyxutils.c | 2 + src/onyxwasm.c | 69 ++++++++++++++++++ 11 files changed, 245 insertions(+), 92 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 8aec4720..72dbe704 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -16,6 +16,8 @@ typedef struct AstLocal AstLocal; typedef struct AstCall AstCall; typedef struct AstIntrinsicCall AstIntrinsicCall; typedef struct AstArgument AstArgument; +typedef struct AstAddressOf AstAddressOf; +typedef struct AstDereference AstDereference; typedef struct AstArrayAccess AstArrayAccess; typedef struct AstAssign AstAssign; @@ -77,6 +79,8 @@ typedef enum AstKind { Ast_Kind_Call, Ast_Kind_Intrinsic_Call, Ast_Kind_Return, + Ast_Kind_Address_Of, + Ast_Kind_Dereference, Ast_Kind_Array_Access, Ast_Kind_If, @@ -201,6 +205,8 @@ struct AstLocal { AstTyped_base; AstLocal *prev_local; }; struct AstCall { AstTyped_base; AstArgument *arguments; u64 arg_count; AstNode *callee; }; struct AstIntrinsicCall { AstTyped_base; AstArgument *arguments; u64 arg_count; OnyxIntrinsic intrinsic; }; struct AstArgument { AstTyped_base; AstTyped *value; }; +struct AstAddressOf { AstTyped_base; AstTyped *expr; }; +struct AstDereference { AstTyped_base; AstTyped *expr; }; struct AstArrayAccess { AstTyped_base; AstTyped *addr; AstTyped *expr; u64 elem_size; }; // Intruction Node diff --git a/include/onyxtypes.h b/include/onyxtypes.h index 99af695c..485a0d48 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -86,6 +86,9 @@ 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); + +Type* type_make_pointer(bh_allocator alloc, Type* to); + const char* type_get_name(Type* type); b32 type_is_pointer(Type* type); diff --git a/onyx b/onyx index c4f9619980dcb2287a0145c8a1c02333f1b33a04..b87f677f797237435b562b046eee5ccb7c096b6a 100755 GIT binary patch delta 105515 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 delta 99823 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 De>qRe diff --git a/progs/arrays.onyx b/progs/arrays.onyx index a36a65f3..f2f61384 100644 --- a/progs/arrays.onyx +++ b/progs/arrays.onyx @@ -44,12 +44,8 @@ other_str :: "I can't believe this \n actually fricken worked!"; str_test :: proc { hello_str :: "Hello World!"; - walker := other_str; - while walker[0] != 0 as u8 { - print(walker[0] as i32); - - walker = (walker as i32 + 1) as ^u8; - } + // Address of and dereference cancel each other out + print(^*hello_str); print("This is a test"[10] as i32); } diff --git a/progs/print_funcs.onyx b/progs/print_funcs.onyx index 5bffff33..3aadfc9d 100644 --- a/progs/print_funcs.onyx +++ b/progs/print_funcs.onyx @@ -36,6 +36,15 @@ print_f64arr :: proc (arr: ^f64, len: i32) { } } +// NOTE: print null-terminated string +print_str :: proc (str: ^u8) { + c := str; + while *c != 0 as u8 { + print((*c) as i32); + c = (c as i32 + 1) as ^u8; + } +} + print :: proc #overloaded { print_bool, print_i32, @@ -47,4 +56,6 @@ print :: proc #overloaded { print_i64arr, print_f32arr, print_f64arr, + + print_str, } diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 759b677f..05b17017 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -13,6 +13,8 @@ CHECK(while, AstWhile* whilenode); CHECK(call, AstCall* call); CHECK(binaryop, AstBinaryOp* binop); CHECK(expression, AstTyped* expr); +CHECK(address_of, AstAddressOf* aof); +CHECK(dereference, AstDereference* deref); CHECK(array_access, AstArrayAccess* expr); CHECK(global, AstGlobal* global); CHECK(function, AstFunction* func); @@ -338,9 +340,47 @@ CHECK(binaryop, AstBinaryOp* binop) { return 0; } +CHECK(address_of, AstAddressOf* aof) { + if (check_expression(aof->expr)) return 1; + + if (aof->expr->kind != Ast_Kind_Array_Access + && aof->expr->kind != Ast_Kind_Dereference) { + onyx_message_add(Msg_Type_Literal, + aof->token->pos, + "cannot take the address of this"); + return 1; + } + + aof->type = type_make_pointer(semstate.allocator, aof->expr->type); + + return 0; +} + +CHECK(dereference, AstDereference* deref) { + if (check_expression(deref->expr)) return 1; + + if (!type_is_pointer(deref->expr->type)) { + onyx_message_add(Msg_Type_Literal, + deref->token->pos, + "cannot dereference non-pointer"); + return 1; + } + + if (deref->expr->type == basic_type_rawptr.type) { + onyx_message_add(Msg_Type_Literal, + deref->token->pos, + "cannot dereference rawptr"); + return 1; + } + + deref->type = deref->expr->type->Pointer.elem; + + return 0; +} + CHECK(array_access, AstArrayAccess* aa) { - check_expression(aa->addr); - check_expression(aa->expr); + if (check_expression(aa->addr)) return 1; + if (check_expression(aa->expr)) return 1; if (!type_is_pointer(aa->addr->type)) { onyx_message_add(Msg_Type_Literal, @@ -406,9 +446,9 @@ CHECK(expression, AstTyped* expr) { case Ast_Kind_Local: break; - case Ast_Kind_Array_Access: - retval = check_array_access((AstArrayAccess *) expr); - break; + case Ast_Kind_Address_Of: retval = check_address_of((AstAddressOf *) expr); break; + case Ast_Kind_Dereference: retval = check_dereference((AstDereference *) expr); break; + case Ast_Kind_Array_Access: retval = check_array_access((AstArrayAccess *) expr); break; case Ast_Kind_Global: if (expr->type == NULL) { diff --git a/src/onyxparser.c b/src/onyxparser.c index cb3c9d9f..0bee666a 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -133,96 +133,110 @@ static AstTyped* parse_factor(OnyxParser* parser) { AstTyped* retval = NULL; switch ((u16) parser->curr->type) { - case '(': - { - consume_token(parser); - AstTyped* expr = parse_expression(parser); - expect_token(parser, ')'); - retval = expr; - break; - } + case '(': { + consume_token(parser); + AstTyped* expr = parse_expression(parser); + expect_token(parser, ')'); + retval = expr; + break; + } - case '-': - { - consume_token(parser); - AstTyped* factor = parse_factor(parser); + case '-': { + consume_token(parser); + AstTyped* factor = parse_factor(parser); - AstUnaryOp* negate_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op); - negate_node->operation = Unary_Op_Negate; - negate_node->expr = factor; + AstUnaryOp* negate_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op); + negate_node->operation = Unary_Op_Negate; + negate_node->expr = factor; - if ((factor->flags & Ast_Flag_Comptime) != 0) { - negate_node->flags |= Ast_Flag_Comptime; - } + if ((factor->flags & Ast_Flag_Comptime) != 0) { + negate_node->flags |= Ast_Flag_Comptime; + } - retval = (AstTyped *) negate_node; - break; + retval = (AstTyped *) negate_node; + break; + } + + case '!': { + AstUnaryOp* not_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op); + not_node->operation = Unary_Op_Not; + not_node->token = expect_token(parser, '!'); + not_node->expr = parse_factor(parser); + + if ((not_node->expr->flags & Ast_Flag_Comptime) != 0) { + not_node->flags |= Ast_Flag_Comptime; } - case '!': - { - AstUnaryOp* not_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op); - not_node->operation = Unary_Op_Not; - not_node->token = expect_token(parser, '!'); - not_node->expr = parse_factor(parser); + retval = (AstTyped *) not_node; + break; + } - if ((not_node->expr->flags & Ast_Flag_Comptime) != 0) { - not_node->flags |= Ast_Flag_Comptime; - } + case '*': { + AstDereference* deref_node = make_node(AstDereference, Ast_Kind_Dereference); + deref_node->token = expect_token(parser, '*'); + deref_node->expr = parse_factor(parser); - retval = (AstTyped *) not_node; + retval = (AstTyped *) deref_node; + break; + } + + case '^': { + AstAddressOf* aof_node = make_node(AstAddressOf, Ast_Kind_Address_Of); + aof_node->token = expect_token(parser, '^'); + aof_node->expr = parse_factor(parser); + + retval = (AstTyped *) aof_node; + break; + } + + case Token_Type_Symbol: { + OnyxToken* sym_token = expect_token(parser, Token_Type_Symbol); + AstTyped* sym_node = make_node(AstTyped, Ast_Kind_Symbol); + sym_node->token = sym_token; + + if (parser->curr->type != '(') { + retval = sym_node; break; } - case Token_Type_Symbol: - { - OnyxToken* sym_token = expect_token(parser, Token_Type_Symbol); - AstTyped* sym_node = make_node(AstTyped, Ast_Kind_Symbol); - sym_node->token = sym_token; + // NOTE: Function call + AstCall* call_node = make_node(AstCall, Ast_Kind_Call); + call_node->token = expect_token(parser, '('); + call_node->callee = (AstNode *) sym_node; + call_node->arg_count = 0; - if (parser->curr->type != '(') { - retval = sym_node; - break; + AstArgument** prev = &call_node->arguments; + AstArgument* curr = NULL; + while (parser->curr->type != ')') { + curr = make_node(AstArgument, Ast_Kind_Argument); + curr->token = parser->curr; + curr->value = parse_expression(parser); + + if (curr != NULL && curr->kind != Ast_Kind_Error) { + *prev = curr; + prev = (AstArgument **) &curr->next; + + call_node->arg_count++; } - // NOTE: Function call - AstCall* call_node = make_node(AstCall, Ast_Kind_Call); - call_node->token = expect_token(parser, '('); - call_node->callee = (AstNode *) sym_node; - call_node->arg_count = 0; - - AstArgument** prev = &call_node->arguments; - AstArgument* curr = NULL; - while (parser->curr->type != ')') { - curr = make_node(AstArgument, Ast_Kind_Argument); - curr->token = parser->curr; - curr->value = parse_expression(parser); - - if (curr != NULL && curr->kind != Ast_Kind_Error) { - *prev = curr; - prev = (AstArgument **) &curr->next; - - call_node->arg_count++; - } - - if (parser->curr->type == ')') - break; - - if (parser->curr->type != ',') { - onyx_message_add(Msg_Type_Expected_Token, - parser->curr->pos, - token_name(','), - token_name(parser->curr->type)); - return (AstTyped *) &error_node; - } - - consume_token(parser); + if (parser->curr->type == ')') + break; + + if (parser->curr->type != ',') { + onyx_message_add(Msg_Type_Expected_Token, + parser->curr->pos, + token_name(','), + token_name(parser->curr->type)); + return (AstTyped *) &error_node; } - consume_token(parser); - retval = (AstTyped *) call_node; - break; + consume_token(parser); } + consume_token(parser); + + retval = (AstTyped *) call_node; + break; + } case Token_Type_Literal_Numeric: retval = (AstTyped *) parse_numeric_literal(parser); diff --git a/src/onyxsymres.c b/src/onyxsymres.c index e7245746..00b81658 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -172,6 +172,14 @@ static void symres_expression(AstTyped** expr) { (*expr)->type_node = symres_type((*expr)->type_node); break; + case Ast_Kind_Address_Of: + symres_expression(&((AstAddressOf *)(*expr))->expr); + break; + + case Ast_Kind_Dereference: + symres_expression(&((AstDereference *)(*expr))->expr); + break; + case Ast_Kind_Array_Access: symres_expression(&((AstArrayAccess *)(*expr))->addr); symres_expression(&((AstArrayAccess *)(*expr))->expr); diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 44605492..118651e6 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -56,14 +56,7 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { switch (type_node->kind) { case Ast_Kind_Pointer_Type: { - Type* ptr_type = bh_alloc_item(alloc, Type); - - ptr_type->kind = Type_Kind_Pointer; - ptr_type->Pointer.base.flags |= Basic_Flag_Pointer; - ptr_type->Pointer.base.size = 4; - ptr_type->Pointer.elem = type_build_from_ast(alloc, ((AstPointerType *) type_node)->elem); - - return (Type *) ptr_type; + return type_make_pointer(alloc, type_build_from_ast(alloc, ((AstPointerType *) type_node)->elem)); } case Ast_Kind_Function_Type: { @@ -93,6 +86,17 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { } } +Type* type_make_pointer(bh_allocator alloc, Type* to) { + Type* ptr_type = bh_alloc_item(alloc, Type); + + ptr_type->kind = Type_Kind_Pointer; + ptr_type->Pointer.base.flags |= Basic_Flag_Pointer; + ptr_type->Pointer.base.size = 4; + ptr_type->Pointer.elem = to; + + return ptr_type; +} + const char* type_get_name(Type* type) { if (type == NULL) return "unknown"; diff --git a/src/onyxutils.c b/src/onyxutils.c index 1138f7cc..06ed78a5 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -38,6 +38,8 @@ static const char* ast_node_names[] = { "ARGUMENT", "CALL", "RETURN", + "ADDRESS OF", + "DEREFERENCE", "ARRAY_ACCESS", "IF", diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 3a9d81f2..536a0c8a 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -192,6 +192,11 @@ static const char* wi_string(WasmInstructionType wit) { case WI_I64_REINTERPRET_F64: return "WI_I64_REINTERPRET_F64"; case WI_F32_REINTERPRET_I32: return "WI_F32_REINTERPRET_I32"; case WI_F64_REINTERPRET_I64: return "WI_F64_REINTERPRET_I64"; + case WI_I32_EXTEND_8_S: return "WI_I32_EXTEND_8_S"; + case WI_I32_EXTEND_16_S: return "WI_I32_EXTEND_16_S"; + case WI_I64_EXTEND_8_S: return "WI_I64_EXTEND_8_S"; + case WI_I64_EXTEND_16_S: return "WI_I64_EXTEND_16_S"; + case WI_I64_EXTEND_32_S: return "WI_I64_EXTEND_32_S"; } } @@ -683,6 +688,70 @@ COMPILE_FUNC(expression, AstTyped* expr) { case Ast_Kind_Binary_Op: compile_binop(mod, &code, (AstBinaryOp *) expr); break; case Ast_Kind_Unary_Op: compile_unaryop(mod, &code, (AstUnaryOp *) expr); break; + case Ast_Kind_Address_Of: { + AstAddressOf* aof = (AstAddressOf *) expr; + + switch (aof->expr->kind) { + case Ast_Kind_Dereference: { + compile_expression(mod, &code, ((AstDereference *) aof->expr)->expr); + break; + } + + case Ast_Kind_Array_Access: { + AstArrayAccess* aa = (AstArrayAccess *) aof->expr; + + compile_expression(mod, &code, aa->expr); + if (aa->elem_size != 1) { + WID(WI_I32_CONST, aa->elem_size); + WI(WI_I32_MUL); + } + compile_expression(mod, &code, aa->addr); + WI(WI_I32_ADD); + break; + } + + default: + onyx_message_add(Msg_Type_Literal, + aof->token->pos, + "unsupported address of"); + } + + break; + } + + case Ast_Kind_Dereference: { + AstDereference* deref = (AstDereference *) expr; + compile_expression(mod, &code, deref->expr); + + i32 load_size = deref->type->Basic.size; + i32 is_integer = (deref->type->Basic.flags & Basic_Flag_Integer) + || (deref->type->Basic.flags & Basic_Flag_Pointer); + i32 is_unsigned = deref->type->Basic.flags & Basic_Flag_Unsigned; + + WasmInstructionType instr = WI_NOP; + i32 alignment = log2_dumb(load_size); + + if (is_integer) { + if (load_size == 1) instr = WI_I32_LOAD_8_S; + else if (load_size == 2) instr = WI_I32_LOAD_16_S; + else if (load_size == 4) instr = WI_I32_LOAD; + else if (load_size == 8) instr = WI_I64_LOAD; + + if (alignment < 4 && is_unsigned) instr += 1; + } else { + if (load_size == 4) instr = WI_F32_LOAD; + else if (load_size == 8) instr = WI_F64_LOAD; + } + + if (instr != WI_NOP) { + WID(instr, ((WasmInstructionData) { alignment, 0 })); + } else { + DEBUG_HERE; + } + + break; + } + case Ast_Kind_Array_Access: { AstArrayAccess* aa = (AstArrayAccess *) expr; compile_expression(mod, &code, aa->expr); -- 2.25.1