From 6e196da16cec6ba1ac3c0e57365da58085c5599d Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 23 Dec 2020 15:48:31 -0600 Subject: [PATCH] made range literals not turn into struct literals --- include/onyxastnodes.h | 23 ++++++++-- onyx | Bin 282608 -> 282608 bytes src/onyxchecker.c | 97 +++++++++++++++++------------------------ src/onyxclone.c | 24 +++++++++- src/onyxparser.c | 2 +- src/onyxsymres.c | 6 +-- src/onyxwasm.c | 16 +++++++ 7 files changed, 102 insertions(+), 66 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 35d32a21..fd081398 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -7,7 +7,7 @@ typedef struct AstNode AstNode; typedef struct AstTyped AstTyped; -typedef struct AstBinOp AstBinaryOp; +typedef struct AstBinaryOp AstBinaryOp; typedef struct AstUnaryOp AstUnaryOp; typedef struct AstNumLit AstNumLit; typedef struct AstStrLit AstStrLit; @@ -24,6 +24,7 @@ typedef struct AstAlignOf AstAlignOf; typedef struct AstFileContents AstFileContents; typedef struct AstStructLiteral AstStructLiteral; typedef struct AstArrayLiteral AstArrayLiteral; +typedef struct AstRangeLiteral AstRangeLiteral; typedef struct AstReturn AstReturn; typedef struct AstJump AstJump; @@ -134,7 +135,7 @@ typedef enum AstKind { Ast_Kind_Slice, Ast_Kind_Field_Access, Ast_Kind_Pipe, - Ast_Kind_Range, + Ast_Kind_Range_Literal, Ast_Kind_Size_Of, Ast_Kind_Align_Of, Ast_Kind_File_Contents, @@ -438,7 +439,7 @@ struct AstNode { AstNode_base }; struct AstTyped { AstTyped_base }; // Expression Nodes -struct AstBinOp { AstTyped_base; BinaryOp operation; AstTyped *left, *right; }; +struct AstBinaryOp { AstTyped_base; BinaryOp operation; AstTyped *left, *right; }; struct AstUnaryOp { AstTyped_base; UnaryOp operation; AstTyped *expr; }; struct AstNumLit { AstTyped_base; union { i32 i; i64 l; f32 f; f64 d; } value; }; struct AstStrLit { AstTyped_base; u64 addr; u64 length; }; @@ -466,6 +467,22 @@ struct AstArrayLiteral { bh_arr(AstTyped *) values; }; +struct AstRangeLiteral { + AstTyped_base; + + // HACK: Currently, range literals are parsed as binary operators, which means + // the first sizeof(AstBinaryOp) bytes of this structure must match that of + // AstBinaryOp, which means I need this dummy field here. + // - brendanfh 2020/12/23 + BinaryOp __unused_operation; + AstTyped *low, *high; + + // Currently, there is no way to specify this in the grammar, but it is set + // to be the initial value of the `step` member of the range structure in + // core/builtin.onyx. + // - brendanfh 2020/12/23 + AstTyped *step; +}; struct AstCall { AstTyped_base; diff --git a/onyx b/onyx index a7f14b603b89bee19da1d0169673447dcc0ef583..dc37f1cd2da1ce2881ccb6d4faa19df9c91cc5e0 100755 GIT binary patch delta 65888 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 U_KB6`7H>LcTx2~RZ>lH#9|3(F1^@s6 delta 66354 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 diff --git a/src/onyxchecker.c b/src/onyxchecker.c index e6598289..dfbc9df3 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -18,12 +18,12 @@ CHECK(binaryop, AstBinaryOp** pbinop, b32 assignment_is_ok); CHECK(unaryop, AstUnaryOp** punop); CHECK(struct_literal, AstStructLiteral* sl); CHECK(array_literal, AstArrayLiteral* al); +CHECK(range_literal, AstRangeLiteral** range); CHECK(expression, AstTyped** expr); CHECK(address_of, AstAddressOf* aof); CHECK(dereference, AstDereference* deref); CHECK(array_access, AstArrayAccess* expr); CHECK(field_access, AstFieldAccess** pfield); -CHECK(range_literal, AstBinaryOp** range); CHECK(size_of, AstSizeOf* so); CHECK(align_of, AstAlignOf* ao); CHECK(global, AstGlobal* global); @@ -961,6 +961,38 @@ b32 check_array_literal(AstArrayLiteral* al) { return 0; } +b32 check_range_literal(AstRangeLiteral** prange) { + AstRangeLiteral* range = *prange; + if (check_expression(&range->low)) return 1; + if (check_expression(&range->high)) return 1; + + Type* expected_range_type = builtin_range_type_type; + StructMember smem; + + type_lookup_member(expected_range_type, "low", &smem); + if (!type_check_or_auto_cast(&range->low, smem.type)) { + onyx_report_error(range->token->pos, "Expected left side of range to be a 32-bit integer."); + return 1; + } + + type_lookup_member(expected_range_type, "high", &smem); + if (!type_check_or_auto_cast(&range->high, smem.type)) { + onyx_report_error(range->token->pos, "Expected right side of range to be a 32-bit integer."); + return 1; + } + + if (range->step == NULL) { + // HACK: This relies on the third member of the 'range' struct to exist, be the step, + // and have an initial_value. + AstStructMember* step_member = ((AstStructType *) builtin_range_type)->members[2]; + if (check_expression(&step_member->initial_value)) return 1; + + range->step = step_member->initial_value; + } + + return 0; +} + b32 check_address_of(AstAddressOf* aof) { if (check_expression(&aof->expr)) return 1; @@ -1116,55 +1148,6 @@ b32 check_field_access(AstFieldAccess** pfield) { return 0; } -b32 check_range_literal(AstBinaryOp** prange) { - AstBinaryOp* range = *prange; - if (check_expression(&range->left)) return 1; - if (check_expression(&range->right)) return 1; - - Type* expected_range_type = builtin_range_type_type; - StructMember smem; - - type_lookup_member(expected_range_type, "low", &smem); - if (!type_check_or_auto_cast(&range->left, smem.type)) { - onyx_report_error(range->token->pos, "Expected left side of range to be a 32-bit integer."); - return 1; - } - - type_lookup_member(expected_range_type, "high", &smem); - if (!type_check_or_auto_cast(&range->right, smem.type)) { - onyx_report_error(range->token->pos, "Expected right side of range to be a 32-bit integer."); - return 1; - } - - // NOTE: Implicitly converting this to a struct literal because that makes the - // WASM generation easier and more robust for return a range from a procedure - // and the like. This could be improved as struct literals are made more throughout - // the code base. - // - brendanfh, 2020/09/03 - AstStructLiteral* rsl = onyx_ast_node_new(semstate.node_allocator, sizeof(AstStructLiteral), Ast_Kind_Struct_Literal); - bh_arr_new(global_heap_allocator, rsl->values, 3); - - bh_arr_insert_end(rsl->values, 2); - type_lookup_member(expected_range_type, "low", &smem); - rsl->values[smem.idx] = range->left; - type_lookup_member(expected_range_type, "high", &smem); - rsl->values[smem.idx] = range->right; - - // HACK: This relies on the third member of the 'range' struct to exist, be the step, - // and have an intial_value. - AstStructMember* step_member = ((AstStructType *) builtin_range_type)->members[2]; - if (check_expression(&step_member->initial_value)) return 1; - bh_arr_push(rsl->values, step_member->initial_value); - - rsl->token = range->token; - rsl->type = expected_range_type; - - // NOTE: Not a binary op - *prange = (AstBinaryOp *) rsl; - - return 0; -} - b32 check_size_of(AstSizeOf* so) { fill_in_array_count(so->so_ast_type); @@ -1224,14 +1207,14 @@ b32 check_expression(AstTyped** pexpr) { case Ast_Kind_Local: 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_Address_Of: retval = check_address_of((AstAddressOf *) expr); break; + case Ast_Kind_Dereference: retval = check_dereference((AstDereference *) expr); break; case Ast_Kind_Slice: - case Ast_Kind_Array_Access: retval = check_array_access((AstArrayAccess *) expr); break; - case Ast_Kind_Field_Access: retval = check_field_access((AstFieldAccess **) pexpr); break; - case Ast_Kind_Size_Of: retval = check_size_of((AstSizeOf *) expr); break; - case Ast_Kind_Align_Of: retval = check_align_of((AstAlignOf *) expr); break; - case Ast_Kind_Range: retval = check_range_literal((AstBinaryOp **) pexpr); break; + case Ast_Kind_Array_Access: retval = check_array_access((AstArrayAccess *) expr); break; + case Ast_Kind_Field_Access: retval = check_field_access((AstFieldAccess **) pexpr); break; + case Ast_Kind_Size_Of: retval = check_size_of((AstSizeOf *) expr); break; + case Ast_Kind_Align_Of: retval = check_align_of((AstAlignOf *) expr); break; + case Ast_Kind_Range_Literal: retval = check_range_literal((AstRangeLiteral **) pexpr); break; case Ast_Kind_Global: if (expr->type == NULL) { diff --git a/src/onyxclone.c b/src/onyxclone.c index 31cd7e75..6d4bf71c 100644 --- a/src/onyxclone.c +++ b/src/onyxclone.c @@ -74,11 +74,12 @@ static inline i32 ast_kind_to_size(AstNode* node) { case Ast_Kind_Slice: return sizeof(AstArrayAccess); case Ast_Kind_Field_Access: return sizeof(AstFieldAccess); case Ast_Kind_Pipe: return sizeof(AstBinaryOp); - case Ast_Kind_Range: return sizeof(AstBinaryOp); + case Ast_Kind_Range_Literal: return sizeof(AstRangeLiteral); case Ast_Kind_Size_Of: return sizeof(AstSizeOf); case Ast_Kind_Align_Of: return sizeof(AstAlignOf); case Ast_Kind_File_Contents: return sizeof(AstFileContents); case Ast_Kind_Struct_Literal: return sizeof(AstStructLiteral); + case Ast_Kind_Array_Literal: return sizeof(AstArrayLiteral); case Ast_Kind_If: return sizeof(AstIfWhile); case Ast_Kind_For: return sizeof(AstFor); case Ast_Kind_While: return sizeof(AstIfWhile); @@ -124,7 +125,6 @@ AstNode* ast_clone(bh_allocator a, void* n) { switch ((u16) node->kind) { case Ast_Kind_Binary_Op: - case Ast_Kind_Range: ((AstBinaryOp *) nn)->left = (AstTyped *) ast_clone(a, ((AstBinaryOp *) node)->left); ((AstBinaryOp *) nn)->right = (AstTyped *) ast_clone(a, ((AstBinaryOp *) node)->right); break; @@ -193,6 +193,26 @@ AstNode* ast_clone(bh_allocator a, void* n) { break; } + case Ast_Kind_Array_Literal: { + AstArrayLiteral* st = (AstArrayLiteral *) node; + AstArrayLiteral* dt = (AstArrayLiteral *) nn; + + dt->atnode = (AstTyped *) ast_clone(a, st->atnode); + + dt->values = NULL; + bh_arr_new(global_heap_allocator, dt->values, bh_arr_length(st->values)); + bh_arr_each(AstTyped *, val, st->values) + bh_arr_push(dt->values, (AstTyped *) ast_clone(a, *val)); + + break; + } + + case Ast_Kind_Range_Literal: + ((AstRangeLiteral *) nn)->low = (AstTyped *) ast_clone(a, ((AstRangeLiteral *) node)->low); + ((AstRangeLiteral *) nn)->high = (AstTyped *) ast_clone(a, ((AstRangeLiteral *) node)->high); + ((AstRangeLiteral *) nn)->step = (AstTyped *) ast_clone(a, ((AstRangeLiteral *) node)->step); + break; + case Ast_Kind_Return: ((AstReturn *) nn)->expr = (AstTyped *) ast_clone(a, ((AstReturn *) node)->expr); break; diff --git a/src/onyxparser.c b/src/onyxparser.c index 2f7e7a5b..d393cea7 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -749,7 +749,7 @@ static AstTyped* parse_expression(OnyxParser* parser) { bin_op = make_node(AstBinaryOp, Ast_Kind_Pipe); } else if (bin_op_kind == Binary_Op_Range) { - bin_op = make_node(AstBinaryOp, Ast_Kind_Range); + bin_op = (AstBinaryOp *) make_node(AstRangeLiteral, Ast_Kind_Range_Literal); } else { bin_op = make_node(AstBinaryOp, Ast_Kind_Binary_Op); diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 0e7fe68c..fba688fa 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -435,9 +435,9 @@ static void symres_expression(AstTyped** expr) { case Ast_Kind_Size_Of: symres_size_of((AstSizeOf *)*expr); break; case Ast_Kind_Align_Of: symres_align_of((AstAlignOf *)*expr); break; - case Ast_Kind_Range: - symres_expression(&((AstBinaryOp *)(*expr))->left); - symres_expression(&((AstBinaryOp *)(*expr))->right); + case Ast_Kind_Range_Literal: + symres_expression(&((AstRangeLiteral *)(*expr))->low); + symres_expression(&((AstRangeLiteral *)(*expr))->high); (*expr)->type_node = symres_type(builtin_range_type); diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 3ae39b74..9374d372 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -391,6 +391,7 @@ EMIT_FUNC(struct_lval, AstTyped* lval); EMIT_FUNC(struct_store, Type* type, u64 offset); EMIT_FUNC(struct_literal, AstStructLiteral* sl); EMIT_FUNC(array_literal, AstArrayLiteral* al); +EMIT_FUNC(range_literal, AstRangeLiteral* range); EMIT_FUNC(expression, AstTyped* expr); EMIT_FUNC(cast, AstUnaryOp* cast); EMIT_FUNC(return, AstReturn* ret); @@ -2130,6 +2131,16 @@ EMIT_FUNC(array_literal, AstArrayLiteral* al) { *pcode = code; } +EMIT_FUNC(range_literal, AstRangeLiteral* range) { + bh_arr(WasmInstruction) code = *pcode; + + emit_expression(mod, &code, range->low); + emit_expression(mod, &code, range->high); + emit_expression(mod, &code, range->step); + + *pcode = code; +} + EMIT_FUNC(location, AstTyped* expr) { bh_arr(WasmInstruction) code = *pcode; @@ -2292,6 +2303,11 @@ EMIT_FUNC(expression, AstTyped* expr) { break; } + case Ast_Kind_Range_Literal: { + emit_range_literal(mod, &code, (AstRangeLiteral *) expr); + break; + } + case Ast_Kind_Function: { i32 elemidx = get_element_idx(mod, (AstFunction *) expr); WID(WI_I32_CONST, elemidx); -- 2.25.1