From bc35e7af1b5ad93f5276d21540a020bd9930a626 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 7 Dec 2020 17:55:24 -0600 Subject: [PATCH] MAJOR CHANGE: numeric literals are nice now This may break a lot of things. Still need to do extensive testing. --- .vimspector.json | 4 +- core/file.onyx | 6 +- core/random.onyx | 4 +- core/stdio.onyx | 20 +++--- core/string.onyx | 14 ++-- include/onyxastnodes.h | 6 ++ include/onyxtypes.h | 2 + onyx | Bin 496756 -> 500028 bytes progs/poly_test.onyx | 6 +- progs/wasi_test.onyx | 28 ++++---- src/onyxbuiltins.c | 4 ++ src/onyxchecker.c | 114 ++++++++++---------------------- src/onyxparser.c | 11 +--- src/onyxsymres.c | 21 +++--- src/onyxtypes.c | 13 ++-- src/onyxutils.c | 146 ++++++++++++++++++++++++++++++++++++++++- src/onyxwasm.c | 2 +- tests/general1 | 14 ++-- tests/general1.onyx | 6 +- 19 files changed, 264 insertions(+), 157 deletions(-) diff --git a/.vimspector.json b/.vimspector.json index 61caceea..66190527 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -6,9 +6,9 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/onyx", - "args": ["-verbose", "progs/vararg_test.onyx"], + "args": ["-verbose", "tests/i32map.onyx"], "stopAtEntry": true, - "cwd": "~/dev/onyx", + "cwd": "~/dev/c/onyx", "environment": [], "externalConsole": false, "MIMode": "gdb", diff --git a/core/file.onyx b/core/file.onyx index b08065e7..7ec1d47b 100644 --- a/core/file.onyx +++ b/core/file.onyx @@ -76,7 +76,7 @@ close :: proc (file: File) -> bool { get_size :: proc (file: File) -> u64 { fs: FileStat; - if fd_filestat_get(file.fd, ^fs) != Errno.Success do return 0l; + if fd_filestat_get(file.fd, ^fs) != Errno.Success do return 0; return fs.size; } @@ -90,11 +90,11 @@ get_contents_from_file :: proc (file: File) -> string { fd_tell(file.fd, ^prev_loc); dummy: i64; - fd_seek(file.fd, 0l, Whence.Set, ^dummy); + fd_seek(file.fd, 0, Whence.Set, ^dummy); dummy2: u32; buf := IOVec.{ data, size }; - fd_pread(file.fd, IOVecArray.{ ^buf, 1 }, 0l, ^dummy2); + fd_pread(file.fd, IOVecArray.{ ^buf, 1 }, 0, ^dummy2); fd_seek(file.fd, prev_loc, Whence.Set, ^dummy); diff --git a/core/random.onyx b/core/random.onyx index f781c21d..4ad3b58f 100644 --- a/core/random.onyx +++ b/core/random.onyx @@ -1,6 +1,6 @@ package core.random -#private_file seed := 8675309 +#private_file seed : i32 = 8675309 #private_file RANDOM_MULTIPLIER :: 1664525 #private_file RANDOM_INCREMENT :: 1013904223 @@ -9,7 +9,7 @@ package core.random set_seed :: proc (s: u32) do seed = s; int :: proc (s := ^seed) -> u32 { - *s = *s * RANDOM_MULTIPLIER + RANDOM_INCREMENT; + *s = *s * RANDOM_MULTIPLIER + RANDOM_INCREMENT; return *s; } diff --git a/core/stdio.onyx b/core/stdio.onyx index 6299da1f..bf11b7c8 100644 --- a/core/stdio.onyx +++ b/core/stdio.onyx @@ -15,13 +15,13 @@ print_string :: proc (s: string) { if s.data[s.count - 1] == #char "\n" do print_buffer_flush(); } -print_cstring :: proc (s: cstring) do str.builder_append(^print_buffer, s); -print_i64 :: proc (n: i64, base := 10l) do str.builder_append(^print_buffer, n, base); -print_i32 :: proc (n: i32, base := 10) do str.builder_append(^print_buffer, cast(i64) n, cast(u64) base); -print_f64 :: proc (n: f64) do str.builder_append(^print_buffer, n); -print_f32 :: proc (n: f32) do str.builder_append(^print_buffer, cast(f64) n); -print_bool :: proc (b: bool) do str.builder_append(^print_buffer, b); -print_ptr :: proc (p: ^void) do str.builder_append(^print_buffer, cast(i64) p, 16l); +print_cstring :: proc (s: cstring) do str.builder_append(^print_buffer, s); +print_i64 :: proc (n: i64, base: u64 = 10) do str.builder_append(^print_buffer, n, base); +print_i32 :: proc (n: i32, base: u32 = 10) do str.builder_append(^print_buffer, cast(i64) n, cast(u64) base); +print_f64 :: proc (n: f64) do str.builder_append(^print_buffer, n); +print_f32 :: proc (n: f32) do str.builder_append(^print_buffer, cast(f64) n); +print_bool :: proc (b: bool) do str.builder_append(^print_buffer, b); +print_ptr :: proc (p: ^void) do str.builder_append(^print_buffer, cast(i64) p, cast(u64) 16); print_range :: proc (r: range, sep := " ") { for i: r { @@ -67,7 +67,7 @@ printf :: proc (format: string, va: ...) { if !vararg_get(va, ^n) do return; ibuf : [128] u8; - istr := str.i64_to_string(~~n, 10l, Buffer.{ ~~ibuf, 128 }); + istr := str.i64_to_string(~~n, 10, Buffer.{ ~~ibuf, 128 }); for a: istr { buffer[len] = a; @@ -80,7 +80,7 @@ printf :: proc (format: string, va: ...) { if !vararg_get(va, ^n) do return; ibuf : [128] u8; - istr := str.i64_to_string(n, 10l, Buffer.{ ~~ibuf, 128 }); + istr := str.i64_to_string(n, 10, Buffer.{ ~~ibuf, 128 }); for a: istr { buffer[len] = a; @@ -129,7 +129,7 @@ printf :: proc (format: string, va: ...) { if !vararg_get(va, ^n) do return; ibuf : [128] u8; - istr := str.i64_to_string(~~n, 16l, Buffer.{ ~~ibuf, 128 }); + istr := str.i64_to_string(~~n, 16, Buffer.{ ~~ibuf, 128 }); for a: istr { buffer[len] = a; diff --git a/core/string.onyx b/core/string.onyx index 5872dab3..66f3b2a2 100644 --- a/core/string.onyx +++ b/core/string.onyx @@ -202,7 +202,7 @@ i64_to_string :: proc (n_: i64, base: u64, buf: Buffer) -> string { n := cast(u64) n_; is_neg := false; - if n_ < 0l && base == 10l { + if n_ < 0 && base == 10 { is_neg = true; n = cast(u64) -n_; } @@ -212,7 +212,7 @@ i64_to_string :: proc (n_: i64, base: u64, buf: Buffer) -> string { s :: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; - while n > 0l { + while n > 0 { m :: n % base; *c = s[cast(u32) m]; @@ -227,7 +227,7 @@ i64_to_string :: proc (n_: i64, base: u64, buf: Buffer) -> string { c -= 1; } - if base == 16l { + if base == 16 { *c = #char "x"; len += 1; c -= 1; @@ -236,7 +236,7 @@ i64_to_string :: proc (n_: i64, base: u64, buf: Buffer) -> string { c -= 1; } - if base == 2l { + if base == 2 { *c = #char "b"; len += 1; c -= 1; @@ -263,20 +263,20 @@ f64_to_string :: proc (f: f64, buf: [] u8) -> string { b := Buffer.{ cast(^void) buf.data, buf.count }; len := 0; - s1 := i64_to_string(v / 10000l, 10l, b); + s1 := i64_to_string(v / 10000, 10, b); for i: 0 .. s1.count do buf.data[i] = s1.data[i]; buf.data[s1.count] = #char "."; len = s1.count + 1; if v < ~~0 do v = -v; - s2 := i64_to_string(v % 10000l, 10l, b); + s2 := i64_to_string(v % 10000, 10, b); for i: 0 .. s2.count do buf.data[s1.count + 1 + i] = s2.data[i]; len += s2.count; return string.{ buf.data, len }; } -builder_add_i64 :: proc (use sb: ^StringBuilder, n: i64, base := 10l) -> ^StringBuilder { +builder_add_i64 :: proc (use sb: ^StringBuilder, n: i64, base: u64 = 10) -> ^StringBuilder { buf : [256] u8; s := i64_to_string(n, base, Buffer.{ cast(^void) buf, 256 }); return builder_add_string(sb, s); diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index c9ee9716..34fd7623 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -803,6 +803,9 @@ extern AstBasicType basic_type_f32; extern AstBasicType basic_type_f64; extern AstBasicType basic_type_rawptr; +extern AstBasicType basic_type_int_unsized; +extern AstBasicType basic_type_float_unsized; + extern AstNode builtin_package_node; extern AstNumLit builtin_heap_start; extern AstGlobal builtin_stack_top; @@ -834,6 +837,9 @@ void initialize_builtins(bh_allocator a, ProgramInfo* prog); AstTyped* ast_reduce(bh_allocator a, AstTyped* node); AstNode* ast_clone(bh_allocator a, void* n); void promote_numlit_to_larger(AstNumLit* num); +b32 convert_numlit_to_type(AstNumLit* num, Type* type); +b32 type_check_or_auto_cast(AstTyped* node, Type* type); +Type* resolve_expression_type(AstTyped* node); typedef enum PolyProcLookupMethod { PPLM_By_Call, diff --git a/include/onyxtypes.h b/include/onyxtypes.h index b6ff8a27..e96279ab 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -8,6 +8,7 @@ enum BasicKind { Basic_Kind_Bool, + Basic_Kind_Int_Unsized, Basic_Kind_I8, Basic_Kind_U8, Basic_Kind_I16, @@ -17,6 +18,7 @@ enum BasicKind { Basic_Kind_I64, Basic_Kind_U64, + Basic_Kind_Float_Unsized, Basic_Kind_F32, Basic_Kind_F64, diff --git a/onyx b/onyx index 385ee6b372512e145bdf74dbc572825153daea7e..74a264f42710764c445963fee8d90a5bf12f3441 100755 GIT binary patch delta 94151 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 diff --git a/progs/poly_test.onyx b/progs/poly_test.onyx index eed3495d..a6d7c8aa 100644 --- a/progs/poly_test.onyx +++ b/progs/poly_test.onyx @@ -164,7 +164,7 @@ main :: proc (args: [] cstring) { multi_max(4, 2, 76, 3, 1203, 2, 4) |> print(); print("\n"); - multi_max(4l, 2l, 76l, 3l, 1203l, 2l, 4l) |> print(); + multi_max(cast(u64) 4, cast(u64) 2, cast(u64) 76, cast(u64) 3, cast(u64) 1203, cast(u64) 2, cast(u64) 4) |> print(); print("\n"); weird_sum(4, 1) |> print(); @@ -204,7 +204,7 @@ main :: proc (args: [] cstring) { for i: 0 .. 100 { array_push(^s.a, (5 * i) % 21); - array_push(^s.b, 3l * cast(i64) i); + array_push(^s.b, 3 * cast(i64) i); array_push(^s.c, V2.{ i, i * i }); } @@ -333,7 +333,7 @@ main2 :: proc (args: [] cstring) { print("\n"); print("Does the array contain 2637? "); - print(array_contains(^barr, 2637l)); + print(array_contains(^barr, 2637)); print("\n"); diff --git a/progs/wasi_test.onyx b/progs/wasi_test.onyx index 3f3783a7..7a6eb65d 100644 --- a/progs/wasi_test.onyx +++ b/progs/wasi_test.onyx @@ -46,7 +46,7 @@ use package wasi readline :: proc (buf: ^u8, bufsize: u32) -> u32 { iov := IOVec.{ buf, bufsize }; nread : Size; - fd_pread(0, IOVecArray.{ ^iov, 1 }, 0l, ^nread); + fd_pread(0, IOVecArray.{ ^iov, 1 }, 0, ^nread); return nread; } @@ -66,10 +66,10 @@ readdir :: proc (fd: FileDescriptor) { print("\n"); print("\td_namlen: "); - print_i64(cast(u64) dirent.d_namlen, 16l); + print_i64(cast(u64) dirent.d_namlen, 16); print("\n"); print("\td_type: "); - print_i64(cast(u64) dirent.d_type, 16l); + print_i64(cast(u64) dirent.d_type, 16); print("\n"); bufused -= sizeof DirEnt + dirent.d_namlen; @@ -88,7 +88,7 @@ timer_start :: proc () -> Timestamp { timer_end :: proc (start_time: Timestamp) -> Timestamp { curr_time: Timestamp; clock_time_get(ClockID.Realtime, cast(Timestamp) 1, ^curr_time); - return (curr_time - start_time) / 1000000l; + return (curr_time - start_time) / 1000000; } is_prime :: proc (n := 0) -> bool { @@ -149,7 +149,7 @@ main :: proc (args: []cstring) { defer { ^sb |> string_builder_clear() |> sba("\nTime taken: ") - |> sba(cast(u64) timer_end(timer), 10l) + |> sba(cast(u64) timer_end(timer), 10) |> sba("ms\n") |> string_builder_to_string() |> print(); @@ -168,7 +168,7 @@ main :: proc (args: []cstring) { defer cfree(cont.data); print(cont); - sum := 0l; + sum: u64 = 0; for i: 0 .. 20000 do if is_prime(i) do sum += cast(u64) i; print("Sum of primes less than 20000 is: "); print_i64(sum); @@ -200,7 +200,7 @@ main :: proc (args: []cstring) { case #default { print("Unexpected token: "); - print_i64(cast(u64) tokens[i][0], 16l); + print_i64(cast(u64) tokens[i][0], 16); print("\n"); // This breaks out of the for loop @@ -265,10 +265,10 @@ main :: proc (args: []cstring) { print_i64(cast(u64) fib(20)); print("\n"); - print(add(20l, 5l)); - print(add(20l, 5l)); - print(add(20l, 5l)); - print(add(20l, 5l)); + print(add(cast(u64) 20, cast(u64) 5)); + print(add(cast(u64) 20, cast(u64) 5)); + print(add(cast(u64) 20, cast(u64) 5)); + print(add(cast(u64) 20, cast(u64) 5)); print("\n"); print(cast(u64) add(20.0f, 5.0f)); print("\n"); @@ -279,7 +279,7 @@ main :: proc (args: []cstring) { print(cast(u64) get_slice_length(^slice)); print("\n"); - print(multi_poly(5.4f, 10l)); + print(multi_poly(5.4f, 10)); print("\n"); dynarr : [..] Vec3; @@ -297,10 +297,10 @@ main :: proc (args: []cstring) { print(dynarr.count, 10); } -foobar :: proc (a: i32, b := 1, c := 5l) { +foobar :: proc (a: i32, b := 1, c: i64 = 5) { print_i64(cast(u64) a); print("\n"); - print_i64(cast(u64) b, 16l); + print_i64(cast(u64) b, 16); print("\n"); print_i64(c); print("\n"); diff --git a/src/onyxbuiltins.c b/src/onyxbuiltins.c index 965a7c77..8fb50795 100644 --- a/src/onyxbuiltins.c +++ b/src/onyxbuiltins.c @@ -17,6 +17,10 @@ AstBasicType basic_type_f32 = { Ast_Kind_Basic_Type, 0, NULL, "f32" , &basi AstBasicType basic_type_f64 = { Ast_Kind_Basic_Type, 0, NULL, "f64" , &basic_types[Basic_Kind_F64] }; AstBasicType basic_type_rawptr = { Ast_Kind_Basic_Type, 0, NULL, "rawptr", &basic_types[Basic_Kind_Rawptr] }; +// NOTE: Types used for numeric literals +AstBasicType basic_type_int_unsized = { Ast_Kind_Basic_Type, 0, NULL, "unsized_int", &basic_types[Basic_Kind_Int_Unsized] }; +AstBasicType basic_type_float_unsized = { Ast_Kind_Basic_Type, 0, NULL, "unsized_float", &basic_types[Basic_Kind_Float_Unsized] }; + static OnyxToken simd_token = { Token_Type_Symbol, 0, "", { 0 } }; AstBasicType basic_type_i8x16 = { Ast_Kind_Basic_Type, 0, &simd_token, "i8x16", &basic_types[Basic_Kind_I8X16] }; AstBasicType basic_type_i16x8 = { Ast_Kind_Basic_Type, 0, &simd_token, "i16x8", &basic_types[Basic_Kind_I16X8] }; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 1fcd0e5d..6b8648de 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -34,80 +34,16 @@ CHECK(memres, AstMemRes* memres); static inline void fill_in_type(AstTyped* node) { if (node->type_node && node->type_node->kind == Ast_Kind_Array_Type) { - if (((AstArrayType *) node->type_node)->count_expr) check_expression(&((AstArrayType *) node->type_node)->count_expr); + if (((AstArrayType *) node->type_node)->count_expr) { + check_expression(&((AstArrayType *) node->type_node)->count_expr); + resolve_expression_type(((AstArrayType *) node->type_node)->count_expr); + } } if (node->type == NULL) node->type = type_build_from_ast(semstate.allocator, node->type_node); } -/* -// NOTE: Returns 1 if the conversion was successful. -static b32 convert_numlit_to_type(AstNumLit* num, Type* type) { - fill_in_type((AstTyped *) num); - assert(num->type); - - if (types_are_compatible(num->type, type)) return 1; - - if (!type_is_numeric(type)) return 0; - - if (num->type->Basic.flags & Basic_Flag_Integer) { - - // - // Integer literal auto cast rules: - // - Up in size always works - // - Down in size only works if value is in range of smaller type. - // - Cast to float only works if value is less than the maximum precise value for float size. - // - - if (type->Basic.flags & Basic_Flag_Integer) { - if (num->type->Basic.size < type->Basic.size) { - num->value.l = (i64) num->value.i; - num->type = type; - return 1; - } - } - - if (type->Basic.flags & Basic_Flag_Float) { - - } - - } - else if (num->type->Basic.flags & Basic_Flag_Float) { - // NOTE: Floats don't cast to integers implicitly. - if ((type->Basic.flags & Basic_Flag_Float) == 0) return 0; - - if (num->type->Basic.kind == Basic_Kind_F32 && type->Basic.kind == Basic_Kind_F64) num->value.d = (f64) num->value.f; - else return 0; - - num->type = type; - - return 1; - } - - return 0; -} */ - -// NOTE: Returns 0 if it was not possible to make the types compatible. -static b32 type_check_or_auto_cast(AstTyped* node, Type* type) { - assert(type != NULL); - assert(node != NULL); - - if (types_are_compatible(node->type, type)) return 1; - if (node_is_auto_cast((AstNode *) node)) { - // If the node is an auto cast, we convert it to a cast node which will reports errors if - // the cast is illegal in the code generation. - ((AstUnaryOp *) node)->type = type; - ((AstUnaryOp *) node)->operation = Unary_Op_Cast; - return 1; - } - else if (node->kind == Ast_Kind_NumLit) { - // if (convert_numlit_to_type((AstNumLit *) node, type)) return 1; - } - - return 0; -} - b32 check_return(AstReturn* retnode) { if (retnode->expr) { if (check_expression(&retnode->expr)) return 1; @@ -265,6 +201,7 @@ b32 check_switch(AstSwitch* switchnode) { return 1; } + resolve_expression_type(sc->value); promote_numlit_to_larger((AstNumLit *) sc->value); u64 value = ((AstNumLit *) sc->value)->value.l; @@ -538,6 +475,8 @@ b32 check_call(AstCall* call) { call->va_kind = VA_Kind_Untyped; if (arg_pos >= bh_arr_length(arg_arr)) goto type_checking_done; + + resolve_expression_type(arg_arr[arg_pos]->value); arg_arr[arg_pos]->va_kind = VA_Kind_Untyped; break; } @@ -599,7 +538,7 @@ b32 check_binop_assignment(AstBinaryOp* binop, b32 assignment_is_ok) { // NOTE: This is the 'type inference' system. Very stupid, but very easy. // If a left operand has an unknown type, fill it in with the type of // the right hand side. - if (binop->left->type == NULL) binop->left->type = binop->right->type; + if (binop->left->type == NULL) binop->left->type = resolve_expression_type(binop->right); } else { // NOTE: +=, -=, ... @@ -680,6 +619,7 @@ b32 check_binaryop_compare(AstBinaryOp** pbinop) { if (ltype->kind == Type_Kind_Pointer) ltype = &basic_types[Basic_Kind_Rawptr]; if (rtype->kind == Type_Kind_Pointer) rtype = &basic_types[Basic_Kind_Rawptr]; + if (!types_are_compatible(ltype, rtype)) { b32 left_ac = node_is_auto_cast((AstNode *) binop->left); b32 right_ac = node_is_auto_cast((AstNode *) binop->right); @@ -688,8 +628,8 @@ b32 check_binaryop_compare(AstBinaryOp** pbinop) { onyx_report_error(binop->token->pos, "Cannot have auto cast on both sides of binary operator."); return 1; } - else if (left_ac && type_check_or_auto_cast(binop->left, rtype)); - else if (right_ac && type_check_or_auto_cast(binop->right, ltype)); + else if (type_check_or_auto_cast(binop->left, rtype)); + else if (type_check_or_auto_cast(binop->right, ltype)); else { onyx_report_error(binop->token->pos, "Cannot compare '%s' to '%s'.", @@ -744,6 +684,8 @@ b32 check_binaryop(AstBinaryOp** pbinop, b32 assignment_is_ok) { if (check_expression(&binop->left)) return 1; if (check_expression(&binop->right)) return 1; + // resolve_expression_type(binop->left); + // resolve_expression_type(binop->right); if ((binop->left->flags & Ast_Flag_Comptime) && (binop->right->flags & Ast_Flag_Comptime)) { binop->flags |= Ast_Flag_Comptime; @@ -756,14 +698,14 @@ b32 check_binaryop(AstBinaryOp** pbinop, b32 assignment_is_ok) { return check_binaryop_bool(pbinop); if (binop->left->type == NULL) { - onyx_report_error(binop->token->pos, + onyx_report_error(binop->left->token->pos, "Unable to resolve type for symbol '%b'.", binop->left->token->text, binop->left->token->length); return 1; } if (binop->right->type == NULL) { - onyx_report_error(binop->token->pos, + onyx_report_error(binop->right->token->pos, "Unable to resolve type for symbol '%b'.", binop->right->token->text, binop->right->token->length); return 1; @@ -802,6 +744,7 @@ b32 check_binaryop(AstBinaryOp** pbinop, b32 assignment_is_ok) { } if (lptr) { + resolve_expression_type(binop->right); if (!type_is_integer(binop->right->type)) { onyx_report_error(binop->right->token->pos, "Expected integer type."); return 1; @@ -866,6 +809,7 @@ b32 check_unaryop(AstUnaryOp** punop) { AstUnaryOp* unaryop = *punop; if (check_expression(&unaryop->expr)) return 1; + resolve_expression_type(unaryop->expr); if (unaryop->operation != Unary_Op_Cast) { unaryop->type = unaryop->expr->type; @@ -1007,6 +951,7 @@ b32 check_array_access(AstArrayAccess* aa) { return 0; } + resolve_expression_type(aa->expr); if (aa->expr->type->kind != Type_Kind_Basic || (aa->expr->type->Basic.kind != Basic_Kind_I32 && aa->expr->type->Basic.kind != Basic_Kind_U32)) { onyx_report_error(aa->token->pos, "Expected type u32 or i32 for index."); @@ -1433,6 +1378,7 @@ b32 check_memres(AstMemRes* memres) { if (memres->initial_value != NULL) { fill_in_type(memres->initial_value); + resolve_expression_type(memres->initial_value); check_expression(&memres->initial_value); if ((memres->initial_value->flags & Ast_Flag_Comptime) == 0) { @@ -1440,14 +1386,19 @@ b32 check_memres(AstMemRes* memres) { return 1; } - Type* memres_type = memres->type; + if (memres->type != NULL) { + Type* memres_type = memres->type; + if (!type_check_or_auto_cast(memres->initial_value, memres_type)) { + onyx_report_error(memres->token->pos, + "Cannot assign value of type '%s' to a '%s'.", + type_get_name(memres_type), + type_get_name(memres->initial_value->type)); + return 1; + } - if (!type_check_or_auto_cast(memres->initial_value, memres_type)) { - onyx_report_error(memres->token->pos, - "Cannot assign value of type '%s' to a '%s'.", - type_get_name(memres_type), - type_get_name(memres->initial_value->type)); - return 1; + } else { + memres->type = memres->initial_value->type; + bh_printf("Memres type: %s\n", type_get_name(memres->type)); } } @@ -1493,6 +1444,7 @@ void check_entity(Entity* ent) { case Entity_Type_Expression: if (check_expression(&ent->expr)) return; + resolve_expression_type(ent->expr); break; case Entity_Type_Type_Alias: @@ -1508,4 +1460,4 @@ void check_entity(Entity* ent) { } ent->state = Entity_State_Code_Gen; -} \ No newline at end of file +} diff --git a/src/onyxparser.c b/src/onyxparser.c index b19fc5fc..4b5b1119 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -143,17 +143,13 @@ static AstNumLit* parse_int_literal(OnyxParser* parser) { int_node->flags |= Ast_Flag_Comptime; int_node->value.l = 0ll; - AstType* type = (AstType *) &basic_type_i32; token_toggle_end(int_node->token); char* first_invalid = NULL; i64 value = strtoll(int_node->token->text, &first_invalid, 0); - if (bh_abs(value) > ((u64) 1 << 32) || *first_invalid == 'l') { - type = (AstType *) &basic_type_i64; - } int_node->value.l = value; - int_node->type_node = type; + int_node->type_node = (AstType *) &basic_type_int_unsized; token_toggle_end(int_node->token); return int_node; @@ -165,14 +161,13 @@ static AstNumLit* parse_float_literal(OnyxParser* parser) { float_node->flags |= Ast_Flag_Comptime; float_node->value.d = 0.0; - AstType* type = (AstType *) &basic_type_f64; + AstType* type = (AstType *) &basic_type_float_unsized; token_toggle_end(float_node->token); if (float_node->token->text[float_node->token->length - 1] == 'f') { type = (AstType *) &basic_type_f32; float_node->value.f = strtof(float_node->token->text, NULL); } else { - type = (AstType *) &basic_type_f64; float_node->value.d = strtod(float_node->token->text, NULL); } @@ -2067,7 +2062,7 @@ static AstPackage* parse_package_name(OnyxParser* parser) { pnode->token = symbol; pnode->package = newpackage; - symbol_introduce(package->scope, symbol, pnode); + symbol_introduce(package->scope, symbol, (AstNode *) pnode); } package = newpackage; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index d75a4aae..7d83a1d6 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -2,7 +2,7 @@ #include "onyxsempass.h" #include "onyxparser.h" #include "onyxutils.h" - +#include "onyxastnodes.h" static void scope_enter(Scope* new_scope); @@ -593,7 +593,7 @@ void symres_function(AstFunction* func) { param->local->type = type_build_from_ast(semstate.node_allocator, param->local->type_node); if (param->default_value != NULL) { - if (!types_are_compatible(param->local->type, param->default_value->type)) { + if (!type_check_or_auto_cast(param->default_value, param->local->type)) { onyx_report_error(param->local->token->pos, "Expected default value of type '%s', was of type '%s'.", type_get_name(param->local->type), @@ -603,7 +603,7 @@ void symres_function(AstFunction* func) { } } else if (param->default_value != NULL) { - param->local->type = param->default_value->type; + param->local->type = resolve_expression_type(param->default_value); } else if (param->vararg_kind == VA_Kind_Untyped) { // HACK @@ -730,9 +730,10 @@ static void symres_enum(AstEnumType* enum_node) { if ((*value)->value != NULL) { // HACK - if ((*value)->value->type_node == (AstType *) &basic_type_i32) { + resolve_expression_type((AstTyped *) (*value)->value); + if (type_is_small_integer((*value)->value->type)) { next_assign_value = (*value)->value->value.i; - } else if ((*value)->value->type_node == (AstType *) &basic_type_i64) { + } else if (type_is_integer((*value)->value->type)) { next_assign_value = (*value)->value->value.l; } else { onyx_report_error((*value)->token->pos, "expected numeric integer literal for enum initialization"); @@ -759,14 +760,12 @@ static void symres_enum(AstEnumType* enum_node) { static void symres_memres(AstMemRes** memres) { (*memres)->type_node = symres_type((*memres)->type_node); + if ((*memres)->initial_value != NULL) { symres_expression(&(*memres)->initial_value); - if ((*memres)->type_node == NULL) - (*memres)->type_node = (*memres)->initial_value->type_node; - - } else { - if ((*memres)->type_node == NULL) return; + // if ((*memres)->type_node == NULL) + // (*memres)->type_node = (*memres)->initial_value->type_node; } } @@ -800,4 +799,4 @@ void symres_entity(Entity* ent) { ent->state = Entity_State_Check_Types; if (ent->package) scope_leave(); -} \ No newline at end of file +} diff --git a/src/onyxtypes.c b/src/onyxtypes.c index fa7e90f9..bc0a48a8 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -10,6 +10,7 @@ Type basic_types[] = { { Type_Kind_Basic, 0, { Basic_Kind_Bool, Basic_Flag_Boolean, 1, 1, "bool" } }, + { Type_Kind_Basic, 0, { Basic_Kind_Int_Unsized, Basic_Flag_Integer, 0, 0, "unsized int" } }, { Type_Kind_Basic, 0, { Basic_Kind_I8, Basic_Flag_Integer, 1, 1, "i8" } }, { Type_Kind_Basic, 0, { Basic_Kind_U8, Basic_Flag_Integer | Basic_Flag_Unsigned, 1, 1, "u8" } }, { Type_Kind_Basic, 0, { Basic_Kind_I16, Basic_Flag_Integer, 2, 2, "i16" } }, @@ -19,6 +20,7 @@ Type basic_types[] = { { Type_Kind_Basic, 0, { Basic_Kind_I64, Basic_Flag_Integer, 8, 8, "i64" } }, { Type_Kind_Basic, 0, { Basic_Kind_U64, Basic_Flag_Integer | Basic_Flag_Unsigned, 8, 8, "u64" } }, + { Type_Kind_Basic, 0, { Basic_Kind_Float_Unsized, Basic_Flag_Float, 0, 0, "unsized float" } }, { Type_Kind_Basic, 0, { Basic_Kind_F32, Basic_Flag_Float, 4, 4, "f32" } }, { Type_Kind_Basic, 0, { Basic_Kind_F64, Basic_Flag_Float, 8, 4, "f64" } }, @@ -296,7 +298,8 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { u32 count = 0; if (a_node->count_expr) { - a_node->count_expr->type = type_build_from_ast(alloc, a_node->count_expr->type_node); + if (a_node->count_expr->type == NULL) + a_node->count_expr->type = type_build_from_ast(alloc, a_node->count_expr->type_node); if (node_is_auto_cast((AstNode *) a_node->count_expr)) { a_node->count_expr = ((AstUnaryOp *) a_node)->expr; @@ -441,8 +444,10 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { case Ast_Kind_Poly_Call_Type: { AstPolyCallType* pc_type = (AstPolyCallType *) type_node; - // @Cleanup: make this a proper error message. -brendanfh 2020/09/14 - assert(pc_type->callee && pc_type->callee->kind == Ast_Kind_Poly_Struct_Type); + if (!(pc_type->callee && pc_type->callee->kind == Ast_Kind_Poly_Struct_Type)) { + onyx_report_error(pc_type->token->pos, "Cannot instantiate a concrete type off of a non-polymorphic type."); + return NULL; + } AstPolyStructType* ps_type = (AstPolyStructType *) pc_type->callee; @@ -757,7 +762,7 @@ b32 type_is_numeric(Type* type) { if (type->kind == Type_Kind_Enum) return 1; if (type->kind != Type_Kind_Basic) return 0; - return type->Basic.kind >= Basic_Kind_I8 && type->Basic.kind <= Basic_Kind_F64; + return type->Basic.kind >= Basic_Kind_Int_Unsized && type->Basic.kind <= Basic_Kind_F64; } b32 type_is_compound(Type* type) { diff --git a/src/onyxutils.c b/src/onyxutils.c index 99c904c0..566314c2 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -379,10 +379,12 @@ void promote_numlit_to_larger(AstNumLit* num) { // NOTE: Int32, Int16, Int8 i64 val = (i64) num->value.i; num->value.l = val; + num->type = &basic_types[Basic_Kind_I64]; } else if (num->type->Basic.size <= 4) { // NOTE: Float32 f64 val = (f64) num->value.f; num->value.d = val; + num->type = &basic_types[Basic_Kind_F64]; } } @@ -512,7 +514,7 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lo } fori (i, 0, param->idx) arg = (AstArgument *) arg->next; - actual_type = arg->value->type; + actual_type = resolve_expression_type(arg->value); } else if (pp_lookup == PPLM_By_Function_Type) { @@ -673,3 +675,145 @@ no_errors: return concrete_struct; } + +// NOTE: Returns 1 if the conversion was successful. +b32 convert_numlit_to_type(AstNumLit* num, Type* type) { + if (num->type == NULL) + num->type = type_build_from_ast(semstate.allocator, num->type_node); + assert(num->type); + + if (types_are_compatible(num->type, type)) return 1; + if (!type_is_numeric(type)) return 0; + + if (num->type->Basic.kind == Basic_Kind_Int_Unsized) { + + // + // Integer literal auto cast rules: + // - Up in size always works + // - Down in size only works if value is in range of smaller type. + // - Cast to float only works if value is less than the maximum precise value for float size. + // + + if (type->Basic.flags & Basic_Flag_Integer) { + if (type->Basic.flags & Basic_Flag_Unsigned) { + u64 value = (u64) num->value.l; + if (type->Basic.size == 8) { + num->type = type; + return 1; + } + if (value <= ((u64) 1 << (type->Basic.size * 8)) - 1) { + num->type = type; + return 1; + } + + } else { + i64 value = (i64) num->value.l; + switch (type->Basic.size) { + case 1: if (-128 <= value && value <= 127) { + num->value.i = (i8) value; + num->type = type; + return 1; + } + case 2: if (-32768 <= value && value <= 32767) { + num->value.i = (i16) value; + num->type = type; + return 1; + } + case 4: if (-247483648 <= value && value <= 2147483647) { + num->value.i = (i32) value; + num->type = type; + return 1; + } + case 8: { num->type = type; + return 1; + } + } + } + } + + else if (type->Basic.flags & Basic_Flag_Float) { + if (type->Basic.size == 4) { + // TODO(Brendan): Check these boundary conditions + if (bh_abs(num->value.l) >= (1 << 23)) { + onyx_report_error(num->token->pos, "Integer '%l' does not fit in 32-bit float exactly.", num->value.l); + return 0; + } + + num->type = type; + num->value.f = (f32) num->value.l; + return 1; + } + if (type->Basic.size == 8) { + // TODO(Brendan): Check these boundary conditions + if (bh_abs(num->value.l) >= (1ull << 52)) { + onyx_report_error(num->token->pos, "Integer '%l' does not fit in 32-bit float exactly.", num->value.l); + return 0; + } + + num->type = type; + num->value.d = (f64) num->value.l; + return 1; + } + } + } + else if (num->type->Basic.kind == Basic_Kind_Float_Unsized) { + // NOTE: Floats don't cast to integers implicitly. + if ((type->Basic.flags & Basic_Flag_Float) == 0) return 0; + + if (type->Basic.kind == Basic_Kind_F32) { + num->value.f = (f32) num->value.d; + } + + num->type = type; + return 1; + } + else if (num->type->Basic.kind == Basic_Kind_F32) { + // NOTE: Floats don't cast to integers implicitly. + if ((type->Basic.flags & Basic_Flag_Float) == 0) return 0; + + if (type->Basic.kind == Basic_Kind_F64) { + num->value.d = (f64) num->value.f; + num->type = type; + return 1; + } + } + + return 0; +} + +// NOTE: Returns 0 if it was not possible to make the types compatible. +b32 type_check_or_auto_cast(AstTyped* node, Type* type) { + assert(type != NULL); + assert(node != NULL); + + if (types_are_compatible(node->type, type)) return 1; + if (node_is_auto_cast((AstNode *) node)) { + // If the node is an auto cast, we convert it to a cast node which will reports errors if + // the cast is illegal in the code generation. + ((AstUnaryOp *) node)->type = type; + ((AstUnaryOp *) node)->operation = Unary_Op_Cast; + return 1; + } + else if (node->kind == Ast_Kind_NumLit) { + if (convert_numlit_to_type((AstNumLit *) node, type)) return 1; + } + + return 0; +} + +Type* resolve_expression_type(AstTyped* node) { + if (node->type == NULL) + node->type = type_build_from_ast(semstate.allocator, node->type_node); + + if (node->kind == Ast_Kind_NumLit) { + if (node->type->Basic.kind == Basic_Kind_Int_Unsized) { + convert_numlit_to_type((AstNumLit *) node, &basic_types[Basic_Kind_I32]); + } + else if (node->type->Basic.kind == Basic_Kind_Float_Unsized) { + convert_numlit_to_type((AstNumLit *) node, &basic_types[Basic_Kind_F32]); + } + } + + return node->type; +} + diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 5d3c809e..baea9823 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -1328,7 +1328,7 @@ EMIT_FUNC(call, AstCall* call) { u32 vararg_count = 0; u32 vararg_offset = -1; - u64 stack_top_store_local;; + u64 stack_top_store_local; bh_arr_each(AstArgument *, parg, call->arg_arr) { AstArgument* arg = *parg; diff --git a/tests/general1 b/tests/general1 index 0c5e1cd1..23a35a45 100644 --- a/tests/general1 +++ b/tests/general1 @@ -21,7 +21,7 @@ Evens from 6 to 34: Array details: Size: 0 Capacity: 4 - Data ptr: 0x10A28 + Data ptr: 0x10A38 Size of elements: 4 Alignment of elements: 4 @@ -29,7 +29,7 @@ Array details: Array details: Size: 0 Capacity: 4 - Data ptr: 0x10A48 + Data ptr: 0x10A58 Size of elements: 8 Alignment of elements: 8 @@ -37,8 +37,8 @@ Array details: 0 5 10 15 20 4 9 14 19 3 8 13 18 2 7 12 17 1 6 11 16 0 5 10 15 20 4 9 14 19 3 8 13 18 2 7 12 17 1 6 11 16 0 5 10 15 20 4 9 14 19 3 8 13 18 2 7 12 17 1 6 11 16 0 5 10 15 20 4 9 14 19 3 8 13 18 2 7 12 17 1 6 11 16 0 5 10 15 20 4 9 14 19 3 8 13 18 2 7 12 A has 22? false Vec3(0, 0, 0) Vec3(1, 1, 1) Vec3(2, 4, 8) Vec3(3, 9, 27) Vec3(4, 16, 64) Vec3(5, 25, 125) Vec3(6, 36, 216) Vec3(7, 49, 343) Vec3(8, 64, 512) Vec3(9, 81, 729) Vec3(10, 100, 1000) Vec3(11, 121, 1331) Vec3(12, 144, 1728) Vec3(13, 169, 2197) Vec3(14, 196, 2744) Vec3(15, 225, 3375) Vec3(16, 256, 4096) Vec3(17, 289, 4913) Vec3(18, 324, 5832) Vec3(19, 361, 6859) Vec3(20, 400, 8000) Vec3(21, 441, 9261) Vec3(22, 484, 10648) Vec3(23, 529, 12167) Vec3(24, 576, 13824) Vec3(25, 625, 15625) Vec3(26, 676, 17576) Vec3(27, 729, 19683) Vec3(28, 784, 21952) Vec3(29, 841, 24389) Vec3(30, 900, 27000) Vec3(31, 961, 29791) Vec3(32, 1024, 32768) Vec3(33, 1089, 35937) Vec3(34, 1156, 39304) Vec3(35, 1225, 42875) Vec3(36, 1296, 46656) Vec3(37, 1369, 50653) Vec3(38, 1444, 54872) Vec3(39, 1521, 59319) Vec3(40, 1600, 64000) Vec3(41, 1681, 68921) Vec3(42, 1764, 74088) Vec3(43, 1849, 79507) Vec3(44, 1936, 85184) Vec3(45, 2025, 91125) Vec3(46, 2116, 97336) Vec3(47, 2209, 103823) Vec3(48, 2304, 110592) Vec3(49, 2401, 117649) Vec3(50, 2500, 125000) Vec3(51, 2601, 132651) Vec3(52, 2704, 140608) Vec3(53, 2809, 148877) Vec3(54, 2916, 157464) Vec3(55, 3025, 166375) Vec3(56, 3136, 175616) Vec3(57, 3249, 185193) Vec3(58, 3364, 195112) Vec3(59, 3481, 205379) Vec3(60, 3600, 216000) Vec3(61, 3721, 226981) Vec3(62, 3844, 238328) Vec3(63, 3969, 250047) Vec3(64, 4096, 262144) Vec3(65, 4225, 274625) Vec3(66, 4356, 287496) Vec3(67, 4489, 300763) Vec3(68, 4624, 314432) Vec3(69, 4761, 328509) Vec3(70, 4900, 343000) Vec3(71, 5041, 357911) Vec3(72, 5184, 373248) Vec3(73, 5329, 389017) Vec3(74, 5476, 405224) Vec3(75, 5625, 421875) Vec3(76, 5776, 438976) Vec3(77, 5929, 456533) Vec3(78, 6084, 474552) Vec3(79, 6241, 493039) Vec3(80, 6400, 512000) Vec3(81, 6561, 531441) Vec3(82, 6724, 551368) Vec3(83, 6889, 571787) Vec3(84, 7056, 592704) Vec3(85, 7225, 614125) Vec3(86, 7396, 636056) Vec3(87, 7569, 658503) Vec3(88, 7744, 681472) Vec3(89, 7921, 704969) Vec3(90, 8100, 729000) Vec3(91, 8281, 753571) Vec3(92, 8464, 778688) Vec3(93, 8649, 804357) Vec3(94, 8836, 830584) Vec3(95, 9025, 857375) Vec3(96, 9216, 884736) Vec3(97, 9409, 912673) Vec3(98, 9604, 941192) Vec3(99, 9801, 970299) -0x11CD8 0x11CE4 0x11CF0 0x11CFC 0x11D08 0x11D14 0x11D20 0x11D2C 0x11D38 0x11D44 0x11D50 0x11D5C 0x11D68 0x11D74 0x11D80 0x11D8C 0x11D98 0x11DA4 0x11DB0 0x11DBC 0x11DC8 0x11DD4 0x11DE0 0x11DEC 0x11DF8 0x11E04 0x11E10 0x11E1C 0x11E28 0x11E34 0x11E40 0x11E4C 0x11E58 0x11E64 0x11E70 0x11E7C 0x11E88 0x11E94 0x11EA0 0x11EAC 0x11EB8 0x11EC4 0x11ED0 0x11EDC 0x11EE8 0x11EF4 0x11F00 0x11F0C 0x11F18 0x11F24 0x11F30 0x11F3C 0x11F48 0x11F54 0x11F60 0x11F6C 0x11F78 0x11F84 0x11F90 0x11F9C 0x11FA8 0x11FB4 0x11FC0 0x11FCC 0x11FD8 0x11FE4 0x11FF0 0x11FFC 0x12008 0x12014 0x12020 0x1202C 0x12038 0x12044 0x12050 0x1205C 0x12068 0x12074 0x12080 0x1208C 0x12098 0x120A4 0x120B0 0x120BC 0x120C8 0x120D4 0x120E0 0x120EC 0x120F8 0x12104 0x12110 0x1211C 0x12128 0x12134 0x12140 0x1214C 0x12158 0x12164 0x12170 0x1217C -1838 1842 1846 1850 1854 1858 1862 1866 1870 1874 1878 1882 +0x11CE8 0x11CF4 0x11D00 0x11D0C 0x11D18 0x11D24 0x11D30 0x11D3C 0x11D48 0x11D54 0x11D60 0x11D6C 0x11D78 0x11D84 0x11D90 0x11D9C 0x11DA8 0x11DB4 0x11DC0 0x11DCC 0x11DD8 0x11DE4 0x11DF0 0x11DFC 0x11E08 0x11E14 0x11E20 0x11E2C 0x11E38 0x11E44 0x11E50 0x11E5C 0x11E68 0x11E74 0x11E80 0x11E8C 0x11E98 0x11EA4 0x11EB0 0x11EBC 0x11EC8 0x11ED4 0x11EE0 0x11EEC 0x11EF8 0x11F04 0x11F10 0x11F1C 0x11F28 0x11F34 0x11F40 0x11F4C 0x11F58 0x11F64 0x11F70 0x11F7C 0x11F88 0x11F94 0x11FA0 0x11FAC 0x11FB8 0x11FC4 0x11FD0 0x11FDC 0x11FE8 0x11FF4 0x12000 0x1200C 0x12018 0x12024 0x12030 0x1203C 0x12048 0x12054 0x12060 0x1206C 0x12078 0x12084 0x12090 0x1209C 0x120A8 0x120B4 0x120C0 0x120CC 0x120D8 0x120E4 0x120F0 0x120FC 0x12108 0x12114 0x12120 0x1212C 0x12138 0x12144 0x12150 0x1215C 0x12168 0x12174 0x12180 0x1218C +1854 1858 1862 1866 1870 1874 1878 1882 1886 1890 1894 1898 20 20 20 20 20 19 19 19 19 19 18 18 18 18 18 17 17 17 17 16 16 16 16 15 15 15 15 15 14 14 14 14 14 13 13 13 13 13 12 12 12 12 12 11 11 11 11 10 10 10 10 10 9 9 9 9 9 8 8 8 8 8 7 7 7 7 7 6 6 6 6 5 5 5 5 5 4 4 4 4 4 3 3 3 3 3 2 2 2 2 2 1 1 1 1 0 0 0 0 0 297 294 291 288 285 282 279 276 273 270 267 264 261 258 255 252 249 246 243 240 237 234 231 228 225 222 219 216 213 210 207 204 201 198 195 192 189 186 183 180 177 174 171 168 165 162 159 156 153 150 147 144 141 138 135 132 129 126 123 120 117 114 111 108 105 102 99 96 93 90 87 84 81 78 75 72 69 66 63 60 57 54 51 48 45 42 39 36 33 30 27 24 21 18 15 12 9 6 3 0 After adding... @@ -46,7 +46,7 @@ After adding... Array details: Size: 100 Capacity: 128 - Data ptr: 0x116B8 + Data ptr: 0x116C8 Size of elements: 4 Alignment of elements: 4 @@ -54,7 +54,7 @@ Array details: Array details: Size: 100 Capacity: 128 - Data ptr: 0x118C8 + Data ptr: 0x118D8 Size of elements: 8 Alignment of elements: 8 @@ -62,7 +62,7 @@ Array A sum: 999 Has ^a[20]? true Has null? false -Value at ^a[50]: 0x11A58 == 0x11A58 +Value at ^a[50]: 0x11A68 == 0x11A68 Deleteing ^a[20] Has ^a[20]? false Clearing SOA... diff --git a/tests/general1.onyx b/tests/general1.onyx index 9b4e7803..2e80330d 100644 --- a/tests/general1.onyx +++ b/tests/general1.onyx @@ -147,8 +147,8 @@ main :: proc (args: [] cstring) { vararg_test("Here are some numbers:\n", 1, 2, 3, 4, 5); print("\n\n"); - multi_max(4, 2, 76, 3, 1203, 2, 4) |> println(); - multi_max(4l, 2l, 76l, 3l, 1203l, 2l, 4l) |> println(); + multi_max(4, 2, 76, 3, 1203, 2, 4) |> println(); + multi_max(4, 2, 76, 3, 1203, 2, 4) |> println(); weird_sum(4, 1) |> println(); @@ -185,7 +185,7 @@ main :: proc (args: [] cstring) { for i: 0 .. 100 { array.push(^s.a, (5 * i) % 21); - array.push(^s.b, 3l * cast(i64) i); + array.push(^s.b, 3 * cast(i64) i); array.push(^s.c, Vec3.{ i, i * i, i * i * i }); } -- 2.25.1