From a016c99e66c860849dd19d8edc96f1681e884945 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 11 Apr 2022 22:24:34 -0500 Subject: [PATCH] random bugfixes; added variant of 'array.make' --- core/container/array.onyx | 17 +++++++++++++---- core/runtime/build_opts.onyx | 2 +- src/parser.c | 2 +- tests/complicated_polymorph.onyx | 4 ++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/container/array.onyx b/core/container/array.onyx index 2f13f645..3dd35b6d 100644 --- a/core/container/array.onyx +++ b/core/container/array.onyx @@ -14,10 +14,19 @@ use package core.intrinsics.onyx { __zero_value } // --------------------------------- // Dynamic Arrays // --------------------------------- -make :: ($T: type_expr, capacity := 4, allocator := context.allocator) -> [..] T { - arr : [..] T; - init(^arr, capacity, allocator); - return arr; +make :: #match { + ($T: type_expr, capacity := 4, allocator := context.allocator) -> [..] T { + arr : [..] T; + init(^arr, capacity, allocator); + return arr; + }, + + (base: [] $T, allocator := context.allocator) -> [..] T { + arr: [..] T; + init(^arr, base.count, allocator); + for^ base do arr << *it; + return arr; + } } #match __make_overload macro (_: ^[..] $T, allocator := context.allocator) -> [..] T { diff --git a/core/runtime/build_opts.onyx b/core/runtime/build_opts.onyx index ad0feca2..9d2c577c 100644 --- a/core/runtime/build_opts.onyx +++ b/core/runtime/build_opts.onyx @@ -20,4 +20,4 @@ Arch :: enum { X86_64 :: 1; X86_32 :: 2; AARCH64 :: 3; -} \ No newline at end of file +} diff --git a/src/parser.c b/src/parser.c index 45eb8769..46d38785 100644 --- a/src/parser.c +++ b/src/parser.c @@ -781,7 +781,7 @@ static AstTyped* parse_factor(OnyxParser* parser) { method_call->left = retval; method_call->right = parse_factor(parser); - if (method_call->right->kind == Ast_Kind_Method_Call) { + if (method_call->right && method_call->right->kind == Ast_Kind_Method_Call) { AstBinaryOp *inner_method_call = (AstBinaryOp *) method_call->right; method_call->right = inner_method_call->left; inner_method_call->left = (AstTyped *) method_call; diff --git a/tests/complicated_polymorph.onyx b/tests/complicated_polymorph.onyx index cf08e60e..754edbc4 100644 --- a/tests/complicated_polymorph.onyx +++ b/tests/complicated_polymorph.onyx @@ -30,11 +30,11 @@ main :: (args: [] cstr) { map :: macro (x: $T, f: (T) -> $R) => f(x); 5 |> double() - |> map((x) => x * 3) + |> map(x => x * 3) |> add(2) |> double() |> convert(f32) - |> map((x) => x * 4 + 2) + |> map(x => x * 4 + 2) |> println(); -- 2.25.1