random bugfixes; added variant of 'array.make'
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 12 Apr 2022 03:24:34 +0000 (22:24 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 12 Apr 2022 03:24:34 +0000 (22:24 -0500)
core/container/array.onyx
core/runtime/build_opts.onyx
src/parser.c
tests/complicated_polymorph.onyx

index 2f13f645e0f0502902c6430202f5688eb3e1fa00..3dd35b6d24ee9f25a9bac7c7103c2d41e7f4f586 100644 (file)
@@ -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 {
index ad0feca2d49b7fb760975902c211d2eca459af46..9d2c577c365281ff8a43c0813d4f7b556f8bb447 100644 (file)
@@ -20,4 +20,4 @@ Arch :: enum {
     X86_64      :: 1;
     X86_32      :: 2;
     AARCH64     :: 3;
-}
\ No newline at end of file
+}
index 45eb876948cbb0709146a21c372ab43482c7281d..46d387855c71926a54367122e64e18652b1537cd 100644 (file)
@@ -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;
index cf08e60ef82c65ce3dd217b39a99a761153661f6..754edbc4de17ef3905dcfadeeb8db417aa0e29d9 100644 (file)
@@ -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();