From d364f80da9a0c8858263e12002bf07fe090be017 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 16 Dec 2020 22:40:41 -0600 Subject: [PATCH] array literals are now allowed in expressions; testing will be needed --- include/onyxastnodes.h | 10 +++- onyx | Bin 510348 -> 516732 bytes progs/odin_example.onyx | 33 ++++++++++++ src/onyxclone.c | 8 +-- src/onyxparser.c | 4 +- src/onyxsymres.c | 7 ++- src/onyxtypes.c | 4 +- src/onyxutils.c | 11 ++++ src/onyxwasm.c | 116 +++++++++++++++++++++++++++++++++------- tests/general1 | 14 ++--- 10 files changed, 169 insertions(+), 38 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index f46e4e89..496890e0 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -496,7 +496,13 @@ struct AstJump { AstNode_base; JumpType jump; u32 count; }; struct AstUse { AstNode_base; AstTyped* expr; }; // Structure Nodes -struct AstBlock { AstNode_base; AstNode *body; Scope *scope; bh_arr(AstLocal *) locals; }; +struct AstBlock { + AstNode_base; + AstNode *body; + Scope *scope; + + bh_arr(AstTyped *) allocate_exprs; +}; struct AstDefer { AstNode_base; AstNode *stmt; }; struct AstFor { AstNode_base; @@ -663,7 +669,7 @@ struct AstFunction { AstType* return_type; AstBlock *body; - bh_arr(AstLocal *) locals; + bh_arr(AstTyped *) allocate_exprs; // NOTE: used by the #add_overload directive. Initially set to a symbol, // then resolved to an overloaded function. diff --git a/onyx b/onyx index f393e5818bf72656635ede78b98fd7bf9177b703..adabd591f2cd54e4de49bf3bd92029a5c46ff051 100755 GIT binary patch delta 82381 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 delta 79104 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 diff --git a/progs/odin_example.onyx b/progs/odin_example.onyx index dcf5583a..3f89c1c6 100644 --- a/progs/odin_example.onyx +++ b/progs/odin_example.onyx @@ -56,7 +56,40 @@ make_bar :: proc () -> Bar { return bar; } +f :: proc () -> [5] [2] u32 #export "IAMTHEFUNCTION" { + mem := cast(^u32) calloc(sizeof [5] [2] u32); + for i: 0 .. 10 do mem[i] = 1234 + i; + return ~~mem; + + + // This is safe ONLY when the value is used without calling another function. + // mem : [5] u32; + // for ^m: mem do *m = 4567; + // return mem; +} + +compress :: proc (arr: [5] $T, f : proc (T, T) -> T) -> T { + val := arr[0]; + for i: 1 .. 5 do val = f(val, arr[i]); + return val; +} + main :: proc (args: [] cstr) { + { + foo : [5] [2] u32; + foo = f(); + + printf("%p == %p\n", cast(^u32) foo, ^foo); + for ^thing: foo do for t: *thing do printf("%p %i\n", thing, t); + + // This needs to be optimized + bar := u32.[ 1, 2, 3, 4, 5 ]; + bar[2] = 1234; + for b: bar do printf("b: %i\n", b); + + println(compress(f32.[ 1, 2, 3, 4, 5 ], proc (a: $T, b: T) -> T { return a + b; })); + } + use package test { foo as foo_pkg } use package test as test use test.foo.SomeEnum diff --git a/src/onyxclone.c b/src/onyxclone.c index e7ebfe2d..3cb73c20 100644 --- a/src/onyxclone.c +++ b/src/onyxclone.c @@ -200,8 +200,8 @@ AstNode* ast_clone(bh_allocator a, void* n) { case Ast_Kind_Block: ((AstBlock *) nn)->body = ast_clone_list(a, ((AstBlock *) node)->body); - ((AstBlock *) nn)->locals = NULL; - bh_arr_new(global_heap_allocator, ((AstBlock *) nn)->locals, 4); + ((AstBlock *) nn)->allocate_exprs = NULL; + bh_arr_new(global_heap_allocator, ((AstBlock *) nn)->allocate_exprs, 4); break; case Ast_Kind_Defer: @@ -334,8 +334,8 @@ AstNode* ast_clone(bh_allocator a, void* n) { df->return_type = (AstType *) ast_clone(a, sf->return_type); df->body = (AstBlock *) ast_clone(a, sf->body); - df->locals = NULL; - bh_arr_new(global_heap_allocator, df->locals, 4); + df->allocate_exprs = NULL; + bh_arr_new(global_heap_allocator, df->allocate_exprs, 4); df->params = NULL; bh_arr_new(global_heap_allocator, df->params, bh_arr_length(sf->params)); diff --git a/src/onyxparser.c b/src/onyxparser.c index 47052f15..3edac59a 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -1282,7 +1282,7 @@ static AstNode* parse_statement(OnyxParser* parser) { // '{' '}' static AstBlock* parse_block(OnyxParser* parser) { AstBlock* block = make_node(AstBlock, Ast_Kind_Block); - bh_arr_new(global_heap_allocator, block->locals, 4); + bh_arr_new(global_heap_allocator, block->allocate_exprs, 4); // NOTE: --- is for an empty block if (parser->curr->type == Token_Type_Empty_Block) { @@ -1729,7 +1729,7 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { AstFunction* func_def = make_node(AstFunction, Ast_Kind_Function); func_def->token = proc_token; - bh_arr_new(global_heap_allocator, func_def->locals, 4); + bh_arr_new(global_heap_allocator, func_def->allocate_exprs, 4); bh_arr_new(global_heap_allocator, func_def->params, 4); bh_arr(AstPolyParam) polymorphic_vars = NULL; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 0624f8b7..5a885f82 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -203,9 +203,9 @@ static void symres_local(AstLocal** local, b32 add_to_block_locals) { // of unique WASM locals and stack space needed. // - brendanfh 2020/12/16 if (add_to_block_locals) - bh_arr_push(bh_arr_last(semstate.block_stack)->locals, *local); + bh_arr_push(bh_arr_last(semstate.block_stack)->allocate_exprs, (AstTyped *) *local); - bh_arr_push(semstate.curr_function->locals, *local); + bh_arr_push(semstate.curr_function->allocate_exprs, (AstTyped *) *local); if ((*local)->token != NULL) symbol_introduce(semstate.curr_scope, (*local)->token, (AstNode *) *local); @@ -378,6 +378,9 @@ static void symres_array_literal(AstArrayLiteral* al) { bh_arr_each(AstTyped *, expr, al->values) symres_expression(expr); + + bh_arr_push(bh_arr_last(semstate.block_stack)->allocate_exprs, (AstTyped *) al); + bh_arr_push(semstate.curr_function->allocate_exprs, (AstTyped *) al); } static void symres_expression(AstTyped** expr) { diff --git a/src/onyxtypes.c b/src/onyxtypes.c index dfe7a91c..01d59c54 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -735,8 +735,7 @@ b32 type_struct_is_simple(Type* type) { } b32 type_is_pointer(Type* type) { - return (type->kind == Type_Kind_Pointer) - || (type->kind == Type_Kind_Array); + return type->kind == Type_Kind_Pointer; } b32 type_is_rawptr(Type* type) { @@ -798,6 +797,7 @@ b32 type_results_in_void(Type* type) { b32 type_is_array_accessible(Type* type) { if (type_is_pointer(type)) return 1; + if (type->kind == Type_Kind_Array) return 1; if (type->kind == Type_Kind_Slice) return 1; if (type->kind == Type_Kind_DynArray) return 1; if (type->kind == Type_Kind_VarArgs) return 1; diff --git a/src/onyxutils.c b/src/onyxutils.c index fa62fc9f..b1b3c51b 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -439,6 +439,17 @@ static Type* solve_poly_type(AstNode* target, AstType* type_expr, Type* actual) break; } + case Ast_Kind_Array_Type: { + // TODO: Add check for same size array + if (elem.actual->kind != Type_Kind_Array) break; + + bh_arr_push(elem_queue, ((PolySolveElem) { + .type_expr = ((AstArrayType *) elem.type_expr)->elem, + .actual = elem.actual->Array.elem, + })); + break; + } + case Ast_Kind_Slice_Type: { if (elem.actual->kind != Type_Kind_Slice) break; diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 55c8f59a..676926c0 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -256,8 +256,8 @@ static i32 get_element_idx(OnyxWasmModule* mod, AstFunction* func); #define LOCAL_F64 0x700000000 #define LOCAL_V128 0xf00000000 -static b32 local_is_wasm_local(AstLocal* local) { - if (local->flags & Ast_Flag_Address_Taken) return 0; +static b32 local_is_wasm_local(AstTyped* local) { + if (local->kind == Ast_Kind_Local && local->flags & Ast_Flag_Address_Taken) return 0; if (local->type->kind == Type_Kind_Basic) return 1; if (local->type->kind == Type_Kind_Enum && local->type->Enum.backing->kind == Type_Kind_Basic) return 1; if (local->type->kind == Type_Kind_Pointer) return 1; @@ -303,7 +303,7 @@ static void local_raw_free(LocalAllocator* la, WasmType wt) { la->freed[idx]++; } -static u64 local_allocate(LocalAllocator* la, AstLocal* local) { +static u64 local_allocate(LocalAllocator* la, AstTyped* local) { if (local_is_wasm_local(local)) { WasmType wt = onyx_type_to_wasm_type(local->type); return local_raw_allocate(la, wt); @@ -332,7 +332,7 @@ static u64 local_allocate(LocalAllocator* la, AstLocal* local) { } } -static void local_free(LocalAllocator* la, AstLocal* local) { +static void local_free(LocalAllocator* la, AstTyped* local) { if (local_is_wasm_local(local)) { WasmType wt = onyx_type_to_wasm_type(local->type); local_raw_free(la, wt); @@ -390,6 +390,7 @@ EMIT_FUNC(struct_load, Type* type, u64 offset); 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(expression, AstTyped* expr); EMIT_FUNC(cast, AstUnaryOp* cast); EMIT_FUNC(return, AstReturn* ret); @@ -410,8 +411,8 @@ EMIT_FUNC(block, AstBlock* block, b32 generate_block_headers) { WID(WI_BLOCK_START, 0x40); } - bh_arr_each(AstLocal *, local, block->locals) - bh_imap_put(&mod->local_map, (u64) *local, local_allocate(mod->local_alloc, *local)); + bh_arr_each(AstTyped *, expr, block->allocate_exprs) + bh_imap_put(&mod->local_map, (u64) *expr, local_allocate(mod->local_alloc, *expr)); forll (AstNode, stmt, block->body, next) { emit_statement(mod, &code, stmt); @@ -419,8 +420,8 @@ EMIT_FUNC(block, AstBlock* block, b32 generate_block_headers) { emit_deferred_stmts(mod, &code, (AstNode *) block); - bh_arr_each(AstLocal *, local, block->locals) - local_free(mod->local_alloc, *local); + bh_arr_each(AstTyped *, expr, block->allocate_exprs) + local_free(mod->local_alloc, *expr); if (generate_block_headers) { WI(WI_BLOCK_END); @@ -493,6 +494,51 @@ EMIT_FUNC(assignment, AstBinaryOp* assign) { return; } + if (assign->right->type->kind == Type_Kind_Array) { + Type* rtype = assign->right->type; + + Type* elem_type = rtype; + u32 elem_count = 1; + while (elem_type->kind == Type_Kind_Array) { + elem_count *= elem_type->Array.count; + elem_type = elem_type->Array.elem; + } + u32 elem_size = type_size_of(elem_type); + + u64 lptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); + u64 rptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); + + emit_location(mod, &code, assign->left); + WIL(WI_LOCAL_SET, lptr_local); + + emit_expression(mod, &code, assign->right); + WIL(WI_LOCAL_SET, rptr_local); + + fori (i, 0, elem_count) { + if (!type_is_structlike(rtype)) + WIL(WI_LOCAL_GET, lptr_local); + + if (bh_arr_last(code).type == WI_LOCAL_SET && bh_arr_last(code).data.l == rptr_local) + bh_arr_last(code).type = WI_LOCAL_TEE; + else + WIL(WI_LOCAL_GET, rptr_local); + emit_load_instruction(mod, &code, elem_type, i * elem_size); + + if (!type_is_structlike(rtype)) { + emit_store_instruction(mod, &code, elem_type, i * elem_size); + } else { + WIL(WI_LOCAL_GET, lptr_local); + emit_store_instruction(mod, &code, elem_type, i * elem_size); + } + } + + local_raw_free(mod->local_alloc, WASM_TYPE_INT32); + local_raw_free(mod->local_alloc, WASM_TYPE_INT32); + + *pcode = code; + return; + } + AstTyped* lval = assign->left; if (lval->kind == Ast_Kind_Local) { @@ -670,7 +716,7 @@ EMIT_FUNC(if, AstIfWhile* if_node) { bh_arr(WasmInstruction) code = *pcode; if (if_node->assignment != NULL) { - bh_imap_put(&mod->local_map, (u64) if_node->local, local_allocate(mod->local_alloc, if_node->local)); + bh_imap_put(&mod->local_map, (u64) if_node->local, local_allocate(mod->local_alloc, (AstTyped *) if_node->local)); emit_assignment(mod, &code, if_node->assignment); } @@ -694,7 +740,7 @@ EMIT_FUNC(if, AstIfWhile* if_node) { bh_arr_pop(mod->structured_jump_target); if (if_node->assignment != NULL) { - local_free(mod->local_alloc, if_node->local); + local_free(mod->local_alloc, (AstTyped *) if_node->local); } WI(WI_IF_END); @@ -706,7 +752,7 @@ EMIT_FUNC(while, AstIfWhile* while_node) { bh_arr(WasmInstruction) code = *pcode; if (while_node->assignment != NULL) { - bh_imap_put(&mod->local_map, (u64) while_node->local, local_allocate(mod->local_alloc, while_node->local)); + bh_imap_put(&mod->local_map, (u64) while_node->local, local_allocate(mod->local_alloc, (AstTyped *) while_node->local)); emit_assignment(mod, &code, while_node->assignment); } @@ -755,7 +801,7 @@ EMIT_FUNC(while, AstIfWhile* while_node) { } if (while_node->assignment != NULL) - local_free(mod->local_alloc, while_node->local); + local_free(mod->local_alloc, (AstTyped *) while_node->local); *pcode = code; } @@ -1048,7 +1094,7 @@ EMIT_FUNC(for, AstFor* for_node) { bh_arr(WasmInstruction) code = *pcode; AstLocal* var = for_node->var; - u64 iter_local = local_allocate(mod->local_alloc, var); + u64 iter_local = local_allocate(mod->local_alloc, (AstTyped *) var); bh_imap_put(&mod->local_map, (u64) var, iter_local); emit_expression(mod, &code, for_node->iter); @@ -1069,7 +1115,7 @@ EMIT_FUNC(for, AstFor* for_node) { onyx_report_error(for_node->token->pos, "Invalid for loop type. You should probably not be seeing this..."); } - local_free(mod->local_alloc, var); + local_free(mod->local_alloc, (AstTyped *) var); *pcode = code; } @@ -1081,7 +1127,7 @@ EMIT_FUNC(switch, AstSwitch* switch_node) { bh_imap_init(&block_map, global_heap_allocator, bh_arr_length(switch_node->cases)); if (switch_node->assignment != NULL) { - bh_imap_put(&mod->local_map, (u64) switch_node->local, local_allocate(mod->local_alloc, switch_node->local)); + bh_imap_put(&mod->local_map, (u64) switch_node->local, local_allocate(mod->local_alloc, (AstTyped *) switch_node->local)); emit_assignment(mod, &code, switch_node->assignment); } @@ -1143,7 +1189,7 @@ EMIT_FUNC(switch, AstSwitch* switch_node) { bh_arr_pop(mod->structured_jump_target); if (switch_node->assignment != NULL) - local_free(mod->local_alloc, switch_node->local); + local_free(mod->local_alloc, (AstTyped *) switch_node->local); bh_imap_free(&block_map); *pcode = code; @@ -2049,6 +2095,37 @@ EMIT_FUNC(struct_literal, AstStructLiteral* sl) { *pcode = code; } +EMIT_FUNC(array_literal, AstArrayLiteral* al) { + bh_arr(WasmInstruction) code = *pcode; + + u64 local_offset = (u64) bh_imap_get(&mod->local_map, (u64) al); + assert((local_offset & LOCAL_IS_WASM) == 0); + + assert(al->type->kind == Type_Kind_Array); + + u32 elem_size = type_size_of(al->type->Array.elem); + + fori (i, 0, al->type->Array.count) { + if (!type_is_structlike(al->type->Array.elem)) + WIL(WI_LOCAL_GET, mod->stack_base_idx); + + emit_expression(mod, &code, al->values[i]); + + if (!type_is_structlike(al->type->Array.elem)) { + emit_store_instruction(mod, &code, al->type->Array.elem, local_offset + i * elem_size); + } else { + WIL(WI_LOCAL_GET, mod->stack_base_idx); + emit_store_instruction(mod, &code, al->type->Array.elem, local_offset + i * elem_size); + } + } + + WIL(WI_LOCAL_GET, mod->stack_base_idx); + WIL(WI_I32_CONST, local_offset); + WI(WI_I32_ADD); + + *pcode = code; +} + EMIT_FUNC(location, AstTyped* expr) { bh_arr(WasmInstruction) code = *pcode; @@ -2206,7 +2283,8 @@ EMIT_FUNC(expression, AstTyped* expr) { } case Ast_Kind_Array_Literal: { - assert(("Array literals are not allowed as expressions currently. This will be added in a future update.", 0)); + // assert(("Array literals are not allowed as expressions currently. This will be added in a future update.", 0)); + emit_array_literal(mod, &code, (AstArrayLiteral *) expr); break; } @@ -2724,8 +2802,8 @@ static void emit_function(OnyxWasmModule* mod, AstFunction* fd) { assert(mod->curr_cc != CC_Undefined); mod->has_stack_locals = (mod->curr_cc == CC_Return_Stack); - bh_arr_each(AstLocal *, local, fd->locals) - mod->has_stack_locals |= !local_is_wasm_local(*local); + bh_arr_each(AstTyped *, expr, fd->allocate_exprs) + mod->has_stack_locals |= !local_is_wasm_local(*expr); if (mod->has_stack_locals) { // NOTE: '5' needs to match the number of instructions it takes diff --git a/tests/general1 b/tests/general1 index 0c5e1cd1..c96ebb44 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: 0x10A48 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: 0x10A68 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 +0x11CF8 0x11D04 0x11D10 0x11D1C 0x11D28 0x11D34 0x11D40 0x11D4C 0x11D58 0x11D64 0x11D70 0x11D7C 0x11D88 0x11D94 0x11DA0 0x11DAC 0x11DB8 0x11DC4 0x11DD0 0x11DDC 0x11DE8 0x11DF4 0x11E00 0x11E0C 0x11E18 0x11E24 0x11E30 0x11E3C 0x11E48 0x11E54 0x11E60 0x11E6C 0x11E78 0x11E84 0x11E90 0x11E9C 0x11EA8 0x11EB4 0x11EC0 0x11ECC 0x11ED8 0x11EE4 0x11EF0 0x11EFC 0x11F08 0x11F14 0x11F20 0x11F2C 0x11F38 0x11F44 0x11F50 0x11F5C 0x11F68 0x11F74 0x11F80 0x11F8C 0x11F98 0x11FA4 0x11FB0 0x11FBC 0x11FC8 0x11FD4 0x11FE0 0x11FEC 0x11FF8 0x12004 0x12010 0x1201C 0x12028 0x12034 0x12040 0x1204C 0x12058 0x12064 0x12070 0x1207C 0x12088 0x12094 0x120A0 0x120AC 0x120B8 0x120C4 0x120D0 0x120DC 0x120E8 0x120F4 0x12100 0x1210C 0x12118 0x12124 0x12130 0x1213C 0x12148 0x12154 0x12160 0x1216C 0x12178 0x12184 0x12190 0x1219C +1870 1874 1878 1882 1886 1890 1894 1898 1902 1906 1910 1914 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: 0x116D8 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: 0x118E8 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]: 0x11A78 == 0x11A78 Deleteing ^a[20] Has ^a[20]? false Clearing SOA... -- 2.25.1