// ---------------------------------
// 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 {
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;