From b737da03e40b19471a06bcd12cee8bcb02dca23e Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 18 Sep 2020 11:43:28 -0500 Subject: [PATCH] added ability to pass complicated structs by value --- CHANGELOG | 13 +++++ include/onyxastnodes.h | 12 +++- onyx | Bin 478148 -> 479964 bytes progs/poly_struct.onyx | 13 ++--- src/onyxchecker.c | 24 +++++--- src/onyxwasm.c | 127 ++++++++++++++++++++++++++++------------- tests/i32map.onyx | 13 ++--- 7 files changed, 138 insertions(+), 64 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8567f3d0..1b18ec8e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,16 @@ +Release v0.0.4 +-------------- +Additions: +* Ability to pass complicated structs by value. Very useful in polymorphic data types. + +Removals: + +Changes: + +Bug fixes: + + + Release v0.0.3 -------------- Additions: diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index b5307cea..02646b6b 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -392,6 +392,13 @@ typedef enum ForLoopType { For_Loop_DynArr, } ForLoopType; +typedef enum ParamPassType { + Param_Pass_Invalid, + Param_Pass_By_Value, + Param_Pass_By_VarArg, + Param_Pass_By_Implicit_Pointer, +} ParamPassType; + // Base Nodes #define AstNode_base \ AstKind kind; \ @@ -422,7 +429,7 @@ struct AstBinOp { AstTyped_base; BinaryOp operation; AstTyped *left, *ri struct AstUnaryOp { AstTyped_base; UnaryOp operation; AstTyped *expr; }; struct AstNumLit { AstTyped_base; union { i32 i; i64 l; f32 f; f64 d; } value; }; struct AstStrLit { AstTyped_base; u64 addr; u64 length; }; -struct AstLocal { AstTyped_base; AstLocal *prev_local; }; +struct AstLocal { AstTyped_base; ParamPassType ppt; }; struct AstCall { AstTyped_base; AstArgument *arguments; u64 arg_count; AstTyped *callee; }; struct AstIntrinsicCall { AstTyped_base; AstArgument *arguments; u64 arg_count; OnyxIntrinsic intrinsic; }; struct AstArgument { AstTyped_base; AstTyped *value; }; @@ -597,6 +604,9 @@ struct AstGlobal { }; }; struct AstParam { + // HACK CLEANUP: This does not need to have a local buried inside of it. + // Convert this to be AstTyped_base and pull the ParamPassType from AstLocal + // to here. - brendanfh 2020/09/18 AstLocal *local; AstTyped *default_value; diff --git a/onyx b/onyx index f722c77d53b61302b198b899800ee610197177dd..f93ebfa0ee1d072eff795630ebba246a78d2290b 100755 GIT binary patch delta 81106 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 Pu8((TgW~Ew-ckPtf3etA delta 78579 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 { - if (!type_structlike_is_simple(actual->value->type)) { - onyx_report_error(actual->token->pos, - "Can only pass simple structs as parameters (no nested structures). passing by pointer is the only way for now."); - return 1; - } - } + // NOTE: This restricts you to only passing simple structures as parameters. + // At one point in time it was okay, but there are some necessary complexities. + // if (type_is_structlike_strict(actual->value->type)) { + // if (!type_structlike_is_simple(actual->value->type)) { + // onyx_report_error(actual->token->pos, + // "Can only pass simple structs as parameters (no nested structures). passing by pointer is the only way for now."); + // return 1; + // } + // } if (actual->value->kind == Ast_Kind_Polymorphic_Proc) has_polymorphic_args = 1; @@ -1266,6 +1268,14 @@ b32 check_function_header(AstFunction* func) { return 1; } + local->ppt = Param_Pass_By_Value; + + if (type_is_structlike_strict(local->type) + && !type_structlike_is_simple(local->type)) { + // local->type = type_make_pointer(semstate.node_allocator, local->type); + local->ppt = Param_Pass_By_Implicit_Pointer; + } + if (param->is_vararg) has_had_varargs = 1; if (local->type->kind != Type_Kind_Array diff --git a/src/onyxwasm.c b/src/onyxwasm.c index f75a143a..f3cdc524 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -922,8 +922,10 @@ EMIT_FUNC(for_array, AstFor* for_node, u64 iter_local) { WI(WI_BLOCK_END); WIL(WI_LOCAL_GET, ptr_local); - WIL(WI_I32_CONST, elem_size); - WI(WI_I32_ADD); + if (elem_size != 1) { + WIL(WI_I32_CONST, elem_size); + WI(WI_I32_ADD); + } WIL(WI_LOCAL_SET, ptr_local); bh_arr_pop(mod->structured_jump_target); @@ -1018,8 +1020,10 @@ EMIT_FUNC(for_slice, AstFor* for_node, u64 iter_local) { WI(WI_BLOCK_END); WIL(WI_LOCAL_GET, ptr_local); - WIL(WI_I32_CONST, elem_size); - WI(WI_I32_ADD); + if (elem_size != 1) { + WIL(WI_I32_CONST, elem_size); + WI(WI_I32_ADD); + } WIL(WI_LOCAL_SET, ptr_local); bh_arr_pop(mod->structured_jump_target); @@ -1316,6 +1320,18 @@ EMIT_FUNC(call, AstCall* call) { stack_grow_amm += type_size_of(arg->type); vararg_count += 1; } + + // CLEANUP structs-by-value + else if (type_is_structlike_strict(arg->type) && !type_structlike_is_simple(arg->type)) { + WID(WI_GLOBAL_GET, stack_top_idx); + emit_store_instruction(mod, &code, arg->type, stack_grow_amm); + + WID(WI_GLOBAL_GET, stack_top_idx); + WID(WI_I32_CONST, stack_grow_amm); + WI(WI_I32_ADD); + + stack_grow_amm += type_size_of(arg->type); + } } if (vararg_count > 0) { @@ -1333,7 +1349,7 @@ EMIT_FUNC(call, AstCall* call) { stack_grow_amm += return_size; - b32 needs_stack = (cc == CC_Return_Stack) || (vararg_count > 0); + b32 needs_stack = (cc == CC_Return_Stack) || (stack_grow_amm > 0); if (needs_stack) { WID(WI_GLOBAL_GET, stack_top_idx); @@ -1791,14 +1807,17 @@ EMIT_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { u64 o2 = 0; emit_array_access_location(mod, &code, (AstArrayAccess *) source_expr, &o2); offset += o2; + } else if ((source_expr->kind == Ast_Kind_Local || source_expr->kind == Ast_Kind_Param) && source_expr->type->kind != Type_Kind_Pointer) { u64 o2 = 0; emit_local_location(mod, &code, (AstLocal *) source_expr, &o2); offset += o2; + } else if (source_expr->kind == Ast_Kind_Memres && source_expr->type->kind != Type_Kind_Pointer) { emit_memory_reservation_location(mod, &code, (AstMemRes *) source_expr); + } else { emit_expression(mod, &code, source_expr); } @@ -1822,10 +1841,9 @@ EMIT_FUNC(local_location, AstLocal* local, u64* offset_return) { u64 local_offset = (u64) bh_imap_get(&mod->local_map, (u64) local); if (local_offset & LOCAL_IS_WASM) { - // HACK: This case doesn't feel quite right. I think the - // only way to end up here is if you are taking the slice - // off a pointer that is a local. But this still feels - // like the wrong long term solution. + // CLEANUP structs-by-value + // This is a weird condition but it is relied on in a couple places including + // passing non-simple structs by value. -brendanfh 2020/09/18 WIL(WI_LOCAL_GET, local_offset); } else { @@ -1990,13 +2008,6 @@ EMIT_FUNC(location, AstTyped* expr) { case Ast_Kind_Field_Access: { AstFieldAccess* field = (AstFieldAccess *) expr; - if (field->expr->kind == Ast_Kind_Param && type_is_structlike_strict(field->expr->type)) { - u64 localidx = bh_imap_get(&mod->local_map, (u64) field->expr) + field->idx; - - WIL(WI_LOCAL_GET, localidx); - break; - } - u64 offset = 0; emit_field_access_location(mod, &code, field, &offset); if (offset != 0) { @@ -2026,17 +2037,28 @@ EMIT_FUNC(expression, AstTyped* expr) { switch (expr->kind) { case Ast_Kind_Param: { - u64 localidx = bh_imap_get(&mod->local_map, (u64) expr); - - if (type_is_structlike_strict(expr->type)) { - u32 mem_count = type_structlike_mem_count(expr->type); + AstLocal* param = (AstLocal *) expr; + u64 localidx = bh_imap_get(&mod->local_map, (u64) param); + + switch (param->ppt) { + case Param_Pass_By_Value: { + if (type_is_structlike_strict(expr->type)) { + u32 mem_count = type_structlike_mem_count(expr->type); + fori (idx, 0, mem_count) WIL(WI_LOCAL_GET, localidx + idx); + + } else { + WIL(WI_LOCAL_GET, localidx); + } + break; + } - fori (idx, 0, mem_count) { - WIL(WI_LOCAL_GET, localidx + idx); + case Param_Pass_By_Implicit_Pointer: { + WIL(WI_LOCAL_GET, localidx); + emit_load_instruction(mod, &code, expr->type, 0); + break; } - } else { - WIL(WI_LOCAL_GET, localidx); + default: assert(0); } break; @@ -2144,14 +2166,20 @@ EMIT_FUNC(expression, AstTyped* expr) { case Ast_Kind_Field_Access: { AstFieldAccess* field = (AstFieldAccess* ) expr; - if (field->expr->kind == Ast_Kind_Param && type_is_structlike_strict(field->expr->type)) { - u64 localidx = bh_imap_get(&mod->local_map, (u64) field->expr) + field->idx; + // CLEANUP structs-by-value + if (field->expr->kind == Ast_Kind_Param) { + AstLocal* param = (AstLocal *) field->expr; - WIL(WI_LOCAL_GET, localidx); - break; + if (param->ppt == Param_Pass_By_Value && !type_is_pointer(param->type)) { + u64 localidx = bh_imap_get(&mod->local_map, (u64) field->expr) + field->idx; + WIL(WI_LOCAL_GET, localidx); + break; + } } - if (field->expr->kind == Ast_Kind_StrLit) { + + // HACK + else if (field->expr->kind == Ast_Kind_StrLit) { StructMember smem; token_toggle_end(field->token); @@ -2462,15 +2490,23 @@ static i32 generate_type_idx(OnyxWasmModule* mod, Type* ft) { i32 params_left = param_count; while (params_left-- > 0) { if (type_is_structlike_strict(*param_type)) { - u32 mem_count = type_structlike_mem_count(*param_type); - StructMember smem; + if (!type_structlike_is_simple(*param_type)) { + // HACK!! + // CLEANUP structs-by-value + *(t++) = WASM_TYPE_INT32; - fori (i, 0, mem_count) { - type_lookup_member_by_idx(*param_type, i, &smem); - *(t++) = (char) onyx_type_to_wasm_type(smem.type); + } else { + u32 mem_count = type_structlike_mem_count(*param_type); + StructMember smem; + + fori (i, 0, mem_count) { + type_lookup_member_by_idx(*param_type, i, &smem); + *(t++) = (char) onyx_type_to_wasm_type(smem.type); + } + + param_count += mem_count - 1; } - param_count += mem_count - 1; } else { *(t++) = (char) onyx_type_to_wasm_type(*param_type); } @@ -2582,12 +2618,23 @@ static void emit_function(OnyxWasmModule* mod, AstFunction* fd) { // NOTE: Generate the local map u64 localidx = 0; bh_arr_each(AstParam, param, fd->params) { - if (type_is_structlike_strict(param->local->type)) { - bh_imap_put(&mod->local_map, (u64) param->local, localidx | LOCAL_IS_WASM); - localidx += type_structlike_mem_count(param->local->type); + switch (param->local->ppt) { + case Param_Pass_By_Value: { + if (type_is_structlike_strict(param->local->type)) { + bh_imap_put(&mod->local_map, (u64) param->local, localidx | LOCAL_IS_WASM); + localidx += type_structlike_mem_count(param->local->type); + + break; + } + // fallthrough + } - } else { - bh_imap_put(&mod->local_map, (u64) param->local, localidx++ | LOCAL_IS_WASM); + case Param_Pass_By_Implicit_Pointer: { + bh_imap_put(&mod->local_map, (u64) param->local, localidx++ | LOCAL_IS_WASM); + break; + } + + default: assert(0); } } diff --git a/tests/i32map.onyx b/tests/i32map.onyx index 7425a97c..92385c87 100644 --- a/tests/i32map.onyx +++ b/tests/i32map.onyx @@ -5,24 +5,21 @@ package main use package core main :: proc (args: [] cstring) { - imap : I32Map(^string); + imap : I32Map(string); i32map_init(^imap); defer { print("Freeing map\n"); i32map_free(^imap); } - hello := "Hello "; - world := "World!"; - - i32map_put(^imap, 50, ^hello); - i32map_put(^imap, 1234, ^world); + i32map_put(^imap, 50, "Hello "); + i32map_put(^imap, 1234, "World!"); println(i32map_has(^imap, 50)); println(i32map_has(^imap, 51)); - print(*i32map_get(^imap, 50)); - println(*i32map_get(^imap, 1234)); + print(i32map_get(^imap, 50, "")); + println(i32map_get(^imap, 1234, "")); i32map_delete(^imap, 50); println(i32map_has(^imap, 50)); -- 2.25.1