From 924f5c295c5f76da73a9260b5aa5a1b70463b4b2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 18 Jan 2021 17:44:17 -0600 Subject: [PATCH] code cleanup and documenting polymorphism --- bin/onyx | Bin 335704 -> 335800 bytes misc/onyx.vim | 4 +- onyx.exe | Bin 424960 -> 424960 bytes src/onyxutils.c | 518 +++++++++++++++++++++--------------- tests/baked_parameters | 1 + tests/baked_parameters.onyx | 1 + 6 files changed, 308 insertions(+), 216 deletions(-) diff --git a/bin/onyx b/bin/onyx index 8a7d4aeb047bea85e25a9c81483663c6481ad4e6..29b9c4413aa156a76f3886aa368ebf75eb988394 100755 GIT binary patch delta 94569 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 o+7#^iK*7Hpm9L1?`28(=e>V`VX7ESiJ^WkP# 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 diff --git a/misc/onyx.vim b/misc/onyx.vim index bc459e55..119dbf8d 100644 --- a/misc/onyx.vim +++ b/misc/onyx.vim @@ -20,11 +20,11 @@ syn keyword onyxType i8 u8 syn keyword onyxType i16 u16 syn keyword onyxType i32 u32 syn keyword onyxType i64 u64 -syn keyword onyxType f32 -syn keyword onyxType f64 +syn keyword onyxType f32 f64 syn keyword onyxType rawptr syn keyword onyxType str cstr syn keyword onyxType i8x16 i16x8 i32x4 i64x2 f32x4 f64x2 v128 +syn keyword onyxType type_expr syn keyword onyxConstant true false null null_proc diff --git a/onyx.exe b/onyx.exe index d764d5af338c02426c4ccd6f0e3357a94a0020f4..f188c723d4724f39f4fcbe9ebf23f962c4224f6a 100644 GIT binary patch delta 32851 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 I(znuo0mN@4v;Y7A delta 32730 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 diff --git a/src/onyxutils.c b/src/onyxutils.c index a791013f..c6cccd4e 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -14,6 +14,9 @@ bh_allocator global_scratch_allocator; bh_managed_heap global_heap; bh_allocator global_heap_allocator; +// +// Program info and packages +// void program_info_init(ProgramInfo* prog, bh_allocator alloc) { prog->global_scope = scope_create(alloc, NULL, (OnyxFilePos) { 0 }); @@ -51,6 +54,10 @@ Package* program_info_package_lookup_or_create(ProgramInfo* prog, char* package_ } } + +// +// Scoping +// Scope* scope_create(bh_allocator a, Scope* parent, OnyxFilePos created_at) { Scope* scope = bh_alloc_item(a, Scope); scope->parent = parent; @@ -148,6 +155,10 @@ void scope_clear(Scope* scope) { bh_table_clear(scope->symbols); } + +// +// Polymorphic things +// static void ensure_polyproc_cache_is_created(AstPolyProc* pp) { if (pp->concrete_funcs == NULL) { bh_table_init(global_heap_allocator, pp->concrete_funcs, 16); @@ -176,6 +187,151 @@ static void insert_poly_slns_into_scope(Scope* scope, bh_arr(AstPolySolution) sl } } +// NOTE: This might return a volatile string. Do not store it without copying it. +static char* build_poly_solution_key(AstPolySolution* sln) { + static char buffer[128]; + + if (sln->kind == PSK_Type) { + return (char *) type_get_unique_name(sln->type); + } + + else if (sln->kind == PSK_Value) { + fori (i, 0, 128) buffer[i] = 0; + + if (sln->value->kind == Ast_Kind_NumLit) { + strncat(buffer, "NUMLIT:", 127); + strncat(buffer, bh_bprintf("%l", ((AstNumLit *) sln->value)->value.l), 127); + + } else { + // HACK: For now, the value pointer is just used. This means that + // sometimes, even through the solution is the same, it won't be + // stored the same. + bh_snprintf(buffer, 128, "%p", sln->value); + } + + return buffer; + } + + return NULL; +} + +// NOTE: This returns a volatile string. Do not store it without copying it. +static char* build_poly_slns_unique_key(bh_arr(AstPolySolution) slns) { + static char key_buf[1024]; + fori (i, 0, 1024) key_buf[i] = 0; + + bh_arr_each(AstPolySolution, sln, slns) { + token_toggle_end(sln->poly_sym->token); + + strncat(key_buf, sln->poly_sym->token->text, 1023); + strncat(key_buf, "=", 1023); + strncat(key_buf, build_poly_solution_key(sln), 1023); + strncat(key_buf, ";", 1023); + + token_toggle_end(sln->poly_sym->token); + } + + return key_buf; +} + +// NOTE: This function adds a solidified function to the entity heap for it to be processed +// later. It optionally can start the function header entity at the code generation state if +// the header has already been processed. +static b32 add_solidified_function_entities(AstSolidifiedFunction solidified_func, b32 header_already_processed) { + solidified_func.func->flags |= Ast_Flag_Function_Used; + solidified_func.func->flags |= Ast_Flag_From_Polymorphism; + + EntityState header_start_state = Entity_State_Resolve_Symbols; + if (header_already_processed) header_start_state = Entity_State_Code_Gen; + + Entity func_header_entity = { + .state = header_start_state, + .type = Entity_Type_Function_Header, + .function = solidified_func.func, + .package = NULL, + .scope = solidified_func.poly_scope, + }; + + entity_bring_to_state(&func_header_entity, Entity_State_Code_Gen); + if (onyx_has_errors()) return 0; + + Entity func_entity = { + .state = Entity_State_Resolve_Symbols, + .type = Entity_Type_Function, + .function = solidified_func.func, + .package = NULL, + .scope = solidified_func.poly_scope, + }; + + entity_heap_insert(&semstate.program->entities, func_header_entity); + entity_heap_insert(&semstate.program->entities, func_entity); + + return 1; +} + +// NOTE: This function is responsible for taking all of the information about generating +// a new polymorphic variant, and producing a solidified function. It optionally can only +// generate the header of the function, which is useful for cases such as checking if a +// set of arguments works for a polymorphic overload option. +static AstSolidifiedFunction generate_solidified_function( + AstPolyProc* pp, + bh_arr(AstPolySolution) slns, + OnyxToken* tkn, + b32 header_only) { + + AstSolidifiedFunction solidified_func; + + // NOTE: Use the position of token if one was provided, otherwise just use NULL. + OnyxFilePos poly_scope_pos = { 0 }; + if (tkn) poly_scope_pos = tkn->pos; + + solidified_func.poly_scope = scope_create(semstate.node_allocator, pp->poly_scope, poly_scope_pos); + insert_poly_slns_into_scope(solidified_func.poly_scope, slns); + + if (header_only) { + solidified_func.func = (AstFunction *) clone_function_header(semstate.node_allocator, pp->base_func); + solidified_func.func->flags |= Ast_Flag_Incomplete_Body; + + } else { + solidified_func.func = (AstFunction *) ast_clone(semstate.node_allocator, pp->base_func); + } + + solidified_func.func->flags |= Ast_Flag_From_Polymorphism; + solidified_func.func->generated_from = tkn; + + // HACK: Remove the baked parameters from the function defintion so they can be + // resolved in the poly scope above the function. This does feel kinda of gross + // and I would love an alternative to tell it to just "skip" the parameter, but + // that is liable to breaking because it is one more thing to remember. + // - brendanfh 2021/01/18 + u32 removed_params = 0; + bh_arr_each(AstPolyParam, param, pp->poly_params) { + if (param->kind != PPK_Baked_Value) continue; + + bh_arr_deleten(solidified_func.func->params, param->idx - removed_params, 1); + removed_params++; + } + + return solidified_func; +} + +static void ensure_solidified_function_has_body(AstPolyProc* pp, AstSolidifiedFunction solidified_func) { + if (solidified_func.func->flags & Ast_Flag_Incomplete_Body) { + clone_function_body(semstate.node_allocator, solidified_func.func, pp->base_func); + + // HACK: I'm asserting that this function should return without an error, because + // the only case where it can return an error is if there was a problem with the + // header. This should never be the case in this situation, since the header would + // have to have successfully passed type checking before it would become a solidified + // procedure. + assert(add_solidified_function_entities(solidified_func, 1)); + + solidified_func.func->flags &= ~Ast_Flag_Incomplete_Body; + } +} + +// NOTE: These are temporary data structures used to represent the pattern matching system +// of polymoprhic type resolution. typedef struct PolySolveResult { PolySolutionKind kind; union { @@ -194,6 +350,15 @@ typedef struct PolySolveElem { }; } PolySolveElem; +// NOTE: The job of this function is to solve for the type/value that belongs in a +// polymoprhic variable. This function takes in three arguments: +// * The symbol node of the polymorphic parameter being searched for +// * The type expression that should contain the symbol node it is some where +// * The actual type to pattern match against +// +// This function utilizes a basic breadth-first search of the type_expr and actual type +// trees, always moving along them in parallel, so when the target is reached (if it is +// ever reached), the "actual" is the matched type/value. static PolySolveResult solve_poly_type(AstNode* target, AstType* type_expr, Type* actual) { bh_arr(PolySolveElem) elem_queue = NULL; bh_arr_new(global_heap_allocator, elem_queue, 4); @@ -354,10 +519,16 @@ static PolySolveResult solve_poly_type(AstNode* target, AstType* type_expr, Type return result; } +// NOTE: The job of this function is to take a polymorphic parameter and a set of arguments +// and solve for the argument that matches the parameter. This is needed because polymorphic +// procedure resolution has to happen before the named arguments are placed in their correct +// positions. static AstTyped* lookup_param_in_arguments(AstPolyProc* pp, AstPolyParam* param, Arguments* args, char** err_msg) { bh_arr(AstTyped *) arg_arr = args->values; bh_arr(AstNamedValue *) named_values = args->named_values; + // NOTE: This check is safe because currently the arguments given without a name + // always map to the beginning indidies of the argument array. if (param->idx >= (u64) bh_arr_length(arg_arr)) { OnyxToken* param_name = pp->base_func->params[param->idx].local->token; @@ -377,127 +548,145 @@ static AstTyped* lookup_param_in_arguments(AstPolyProc* pp, AstPolyParam* param, return NULL; } -static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, char** err_msg) { - bh_arr(AstPolySolution) slns = NULL; - bh_arr_new(global_heap_allocator, slns, bh_arr_length(pp->poly_params)); - - bh_arr_each(AstPolySolution, known_sln, pp->known_slns) bh_arr_push(slns, *known_sln); - - bh_arr_each(AstPolyParam, param, pp->poly_params) { - b32 already_solved = 0; - bh_arr_each(AstPolySolution, known_sln, pp->known_slns) { - if (token_equals(param->poly_sym->token, known_sln->poly_sym->token)) { - already_solved = 1; - break; - } - } - if (already_solved) continue; +// NOTE: The job of this function is to solve for type of AstPolySolution using the provided +// information. It is asssumed that the "param" is of kind PPK_Poly_Type. This function uses +// either the arguments provided, or a function type to compare against to pattern match for +// the type that the parameter but be. +static void solve_for_polymorphic_param_type(PolySolveResult* resolved, AstPolyProc* pp, AstPolyParam* param, PolyProcLookupMethod pp_lookup, ptr actual, char** err_msg) { + Type* actual_type = NULL; - // CLEANUP CLEANUP CLEANUP - PolySolveResult resolved = { 0 }; + switch (pp_lookup) { + case PPLM_By_Arguments: { + Arguments* args = (Arguments *) actual; - if (param->kind == PPK_Poly_Type) { - Type* actual_type = NULL; + AstTyped* typed_param = lookup_param_in_arguments(pp, param, args, err_msg); + if (typed_param == NULL) return; - if (pp_lookup == PPLM_By_Arguments) { - Arguments* args = (Arguments *) actual; + actual_type = resolve_expression_type(typed_param); + if (actual_type == NULL) return; - AstTyped* typed_param = lookup_param_in_arguments(pp, param, args, err_msg); - if (typed_param == NULL) goto sln_not_found; + break; + } - actual_type = resolve_expression_type(typed_param); - if (actual_type == NULL) goto sln_not_found; + case PPLM_By_Function_Type: { + Type* ft = (Type *) actual; + if (param->idx >= ft->Function.param_count) { + if (err_msg) *err_msg = "Incompatible polymorphic argument to function parameter."; + return; } - else if (pp_lookup == PPLM_By_Function_Type) { - Type* ft = (Type*) actual; - if (param->idx >= ft->Function.param_count) { - if (err_msg) *err_msg = "Incompatible polymorphic argument to function parameter."; - goto sln_not_found; - } + actual_type = ft->Function.params[param->idx]; + break; + } - actual_type = ft->Function.params[param->idx]; - } + default: return; + } - else { - if (err_msg) *err_msg = "Cannot resolve polymorphic function type."; - goto sln_not_found; - } + *resolved = solve_poly_type(param->poly_sym, param->type_expr, actual_type); +} - resolved = solve_poly_type(param->poly_sym, param->type_expr, actual_type); +// NOTE: The job of this function is to look through the arguments provided and find a matching +// value that is to be baked into the polymorphic procedures poly-scope. It expected that param +// will be of kind PPK_Baked_Value. +// CLEANUP: This function is kind of gross at the moment, because it handles different cases for +// the argument kind. When type expressions (type_expr) become first-class types in the type +// system, this code should be able to be a lot cleaner. +static void solve_for_polymorphic_param_value(PolySolveResult* resolved, AstPolyProc* pp, AstPolyParam* param, PolyProcLookupMethod pp_lookup, ptr actual, char** err_msg) { + if (pp_lookup != PPLM_By_Arguments) { + *err_msg = "Function type cannot be used to solved for baked parameter value."; + return; + } - } else if (param->kind == PPK_Baked_Value) { - AstTyped* value = NULL; + Arguments* args = (Arguments *) actual; + AstTyped* value = lookup_param_in_arguments(pp, param, args, err_msg); + if (value == NULL) return; - if (pp_lookup == PPLM_By_Arguments) { - Arguments* args = (Arguments *) actual; + // HACK: Storing the original value because if this was an AstArgument, we need to flag + // it as baked if it is determined that the argument is of the correct kind and type. + AstTyped* orig_value = value; + if (value->kind == Ast_Kind_Argument) value = ((AstArgument *) value)->value; - value = lookup_param_in_arguments(pp, param, args, err_msg); - if (value == NULL) goto sln_not_found; - } + if (param->type_expr == (AstType *) &type_expr_symbol) { + if (!node_is_type((AstNode *) value)) { + *err_msg = "Expected type expression."; + return; + } - else if (pp_lookup == PPLM_By_Function_Type) { - *err_msg = "Function type cannot be used to solved for baked parameter value."; - goto sln_not_found; - } + Type* resolved_type = type_build_from_ast(semstate.node_allocator, (AstType *) value); + *resolved = ((PolySolveResult) { PSK_Type, .actual = resolved_type }); - else { - if (err_msg) *err_msg = "Cannot resolve polymorphic function type."; - goto sln_not_found; - } + } else { + if ((value->flags & Ast_Flag_Comptime) == 0) { + *err_msg = "Expected compile-time known argument."; + return; + } - AstTyped* orig_value = value; - if (value->kind == Ast_Kind_Argument) { - value = ((AstArgument *) value)->value; - } + if (param->type == NULL) + param->type = type_build_from_ast(semstate.node_allocator, param->type_expr); + + if (!type_check_or_auto_cast(&value, param->type)) { + *err_msg = bh_aprintf(global_scratch_allocator, + "The procedure '%s' expects a value of type '%s' for %d%s parameter, got '%s'.", + get_function_name(pp->base_func), + type_get_name(param->type), + param->idx + 1, + bh_num_suffix(param->idx + 1), + node_get_type_name(value)); + return; + } - if (param->type_expr == (AstType *) &type_expr_symbol) { - if (!node_is_type((AstNode *) value)) { - *err_msg = "Expected type expression."; - goto sln_not_found; - } + *resolved = ((PolySolveResult) { PSK_Value, value }); + } - resolved = ((PolySolveResult) { - .kind = PSK_Type, - .actual = type_build_from_ast(semstate.node_allocator, (AstType *) value), - }); - - } else { - // CLEANUP - if ((value->flags & Ast_Flag_Comptime) == 0) { - *err_msg = "Expected compile-time known argument."; - goto sln_not_found; - } + if (orig_value->kind == Ast_Kind_Argument) { + ((AstArgument *) orig_value)->is_baked = 1; + } +} - if (param->type == NULL) - param->type = type_build_from_ast(semstate.node_allocator, param->type_expr); +// NOTE: The job of this function is to take a polymorphic procedure, as well as a method of +// solving for the polymorphic variables, in order to return an array of the solutions for all +// of the polymorphic variables. +static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, char** err_msg) { + bh_arr(AstPolySolution) slns = NULL; + bh_arr_new(global_heap_allocator, slns, bh_arr_length(pp->poly_params)); - if (!type_check_or_auto_cast(&value, param->type)) { - *err_msg = bh_aprintf(global_scratch_allocator, - "The procedure '%s' expects a value of type '%s' for %d%s parameter, got '%s'.", - get_function_name(pp->base_func), - type_get_name(param->type), - param->idx + 1, - bh_num_suffix(param->idx + 1), - node_get_type_name(value)); - goto sln_not_found; - } + // NOTE: "known solutions" are given through a '#solidify' directive. If this polymorphic + // procedure is the result of a partially applied solidification, this array will be non- + // empty and these solutions will be used. + bh_arr_each(AstPolySolution, known_sln, pp->known_slns) bh_arr_push(slns, *known_sln); - resolved = ((PolySolveResult) { PSK_Value, value }); - } + bh_arr_each(AstPolyParam, param, pp->poly_params) { - if (orig_value->kind == Ast_Kind_Argument) { - ((AstArgument *) orig_value)->is_baked = 1; + // NOTE: First check to see if this polymorphic variable was already specified in the + // known solutions. + b32 already_solved = 0; + bh_arr_each(AstPolySolution, known_sln, pp->known_slns) { + if (token_equals(param->poly_sym->token, known_sln->poly_sym->token)) { + already_solved = 1; + break; } } + if (already_solved) continue; + + // NOTE: Solve for the polymoprhic parameter's value + PolySolveResult resolved = { PSK_Undefined }; + switch (param->kind) { + case PPK_Poly_Type: solve_for_polymorphic_param_type (&resolved, pp, param, pp_lookup, actual, err_msg); break; + case PPK_Baked_Value: solve_for_polymorphic_param_value(&resolved, pp, param, pp_lookup, actual, err_msg); break; + default: if (err_msg) *err_msg = "Invalid polymorphic parameter kind. This is a compiler bug."; + } + switch (resolved.kind) { case PSK_Undefined: - if (err_msg) *err_msg = bh_aprintf(global_heap_allocator, - "Unable to solve for polymoprhic variable '%b'.", - param->poly_sym->token->text, - param->poly_sym->token->length); - // type_get_name(actual_type)); + // NOTE: If no error message has been assigned to why this polymorphic parameter + // resolution was unsuccessful, provide a basic dummy one. + if (err_msg && *err_msg == NULL) + *err_msg = bh_aprintf(global_scratch_allocator, + "Unable to solve for polymoprhic variable '%b'.", + param->poly_sym->token->text, + param->poly_sym->token->length); + goto sln_not_found; case PSK_Type: @@ -520,11 +709,14 @@ static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLo return slns; -sln_not_found: + sln_not_found: bh_arr_free(slns); return NULL; } +// NOTE: The job of this function is to be a wrapper to other functions, providing an error +// message if a solution could not be found. This can't be merged with polymoprhic_proc_solidify +// because polymoprhic_proc_try_solidify uses the aforementioned function. AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxToken* tkn) { ensure_polyproc_cache_is_created(pp); @@ -543,85 +735,6 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lo return result; } -// NOTE: This might return a volatile string. Do not store it without copying it. -static char* build_poly_solution_key(AstPolySolution* sln) { - static char buffer[128]; - - if (sln->kind == PSK_Type) { - return (char *) type_get_unique_name(sln->type); - } - - else if (sln->kind == PSK_Value) { - fori (i, 0, 128) buffer[i] = 0; - - if (sln->value->kind == Ast_Kind_NumLit) { - strncat(buffer, "NUMLIT:", 127); - strncat(buffer, bh_bprintf("%l", ((AstNumLit *) sln->value)->value.l), 127); - - } else { - // HACK: For now, the value pointer is just used. This means that - // sometimes, even through the solution is the same, it won't be - // stored the same. - bh_snprintf(buffer, 128, "%p", sln->value); - } - - return buffer; - } - - return NULL; -} - -// NOTE: This returns a volatile string. Do not store it without copying it. -static char* build_poly_slns_unique_key(bh_arr(AstPolySolution) slns) { - static char key_buf[1024]; - fori (i, 0, 1024) key_buf[i] = 0; - - bh_arr_each(AstPolySolution, sln, slns) { - token_toggle_end(sln->poly_sym->token); - - strncat(key_buf, sln->poly_sym->token->text, 1023); - strncat(key_buf, "=", 1023); - strncat(key_buf, build_poly_solution_key(sln), 1023); - strncat(key_buf, ";", 1023); - - token_toggle_end(sln->poly_sym->token); - } - - return key_buf; -} - -static b32 add_solidified_function_entities(AstSolidifiedFunction solidified_func, b32 header_already_processed) { - solidified_func.func->flags |= Ast_Flag_Function_Used; - solidified_func.func->flags |= Ast_Flag_From_Polymorphism; - - EntityState header_start_state = Entity_State_Resolve_Symbols; - if (header_already_processed) header_start_state = Entity_State_Code_Gen; - - Entity func_header_entity = { - .state = header_start_state, - .type = Entity_Type_Function_Header, - .function = solidified_func.func, - .package = NULL, - .scope = solidified_func.poly_scope, - }; - - entity_bring_to_state(&func_header_entity, Entity_State_Code_Gen); - if (onyx_has_errors()) return 0; - - Entity func_entity = { - .state = Entity_State_Resolve_Symbols, - .type = Entity_Type_Function, - .function = solidified_func.func, - .package = NULL, - .scope = solidified_func.poly_scope, - }; - - entity_heap_insert(&semstate.program->entities, func_header_entity); - entity_heap_insert(&semstate.program->entities, func_entity); - - return 1; -} - AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxToken* tkn) { ensure_polyproc_cache_is_created(pp); @@ -630,38 +743,25 @@ AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) if (bh_table_has(AstSolidifiedFunction, pp->concrete_funcs, unique_key)) { AstSolidifiedFunction solidified_func = bh_table_get(AstSolidifiedFunction, pp->concrete_funcs, unique_key); - if (solidified_func.func->flags & Ast_Flag_Incomplete_Body) { - clone_function_body(semstate.node_allocator, solidified_func.func, pp->base_func); + // NOTE: If this solution was originally created from a "build_only_header" call, then the body + // will not have been or type checked, or anything. This ensures that the body is copied, the + // entities are created and entered into the pipeline. + ensure_solidified_function_has_body(pp, solidified_func); - if (!add_solidified_function_entities(solidified_func, 1)) { - onyx_report_error(tkn->pos, "Error in polymorphic procedure header generated from this call site."); - return NULL; - } - - solidified_func.func->flags &= ~Ast_Flag_Incomplete_Body; - } + // NOTE: Again, if this came from a "build_only_header" call, then there was no known token and + // the "generated_from" member will be null. It is best to set it here so errors reported in that + // function can report where the polymorphic instantiation occurred. + if (solidified_func.func->generated_from == NULL) + solidified_func.func->generated_from = tkn; return solidified_func.func; } - AstSolidifiedFunction solidified_func; - solidified_func.poly_scope = scope_create(semstate.node_allocator, pp->poly_scope, tkn->pos); - insert_poly_slns_into_scope(solidified_func.poly_scope, slns); + AstSolidifiedFunction solidified_func = generate_solidified_function(pp, slns, tkn, 0); - solidified_func.func = (AstFunction *) ast_clone(semstate.node_allocator, pp->base_func); + // NOTE: Cache the function for later use, reducing duplicate functions. bh_table_put(AstSolidifiedFunction, pp->concrete_funcs, unique_key, solidified_func); - solidified_func.func->generated_from = tkn; - - // HACK HACK HACK - u32 removed_params = 0; - bh_arr_each(AstPolyParam, param, pp->poly_params) { - if (param->kind != PPK_Baked_Value) continue; - - bh_arr_deleten(solidified_func.func->params, param->idx - removed_params, 1); - removed_params++; - } - if (!add_solidified_function_entities(solidified_func, 0)) { onyx_report_error(tkn->pos, "Error in polymorphic procedure header generated from this call site."); return NULL; @@ -737,22 +837,7 @@ AstFunction* polymorphic_proc_build_only_header(AstPolyProc* pp, PolyProcLookupM // NOTE: This function is only going to have the header of it correctly created. // Nothing should happen to this function's body or else the original will be corrupted. // - brendanfh 2021/01/10 - AstSolidifiedFunction solidified_func; - solidified_func.poly_scope = scope_create(semstate.node_allocator, pp->poly_scope, (OnyxFilePos) { 0 }); - insert_poly_slns_into_scope(solidified_func.poly_scope, slns); - - solidified_func.func = clone_function_header(semstate.node_allocator, pp->base_func); - solidified_func.func->flags |= Ast_Flag_Incomplete_Body; - solidified_func.func->flags |= Ast_Flag_From_Polymorphism; - - // HACK HACK HACK - u32 removed_params = 0; - bh_arr_each(AstPolyParam, param, pp->poly_params) { - if (param->kind != PPK_Baked_Value) continue; - - bh_arr_deleten(solidified_func.func->params, param->idx - removed_params, 1); - removed_params++; - } + AstSolidifiedFunction solidified_func = generate_solidified_function(pp, slns, NULL, 1); Entity func_header_entity = { .state = Entity_State_Resolve_Symbols, @@ -768,7 +853,9 @@ AstFunction* polymorphic_proc_build_only_header(AstPolyProc* pp, PolyProcLookupM return NULL; } + // NOTE: Cache the function for later use, only if it didn't have errors in its header. bh_table_put(AstSolidifiedFunction, pp->concrete_funcs, unique_key, solidified_func); + return solidified_func.func; } @@ -928,6 +1015,9 @@ void entity_bring_to_state(Entity* ent, EntityState state) { } +// +// Arguments resolving +// static i32 lookup_idx_by_name(AstNode* provider, char* name) { switch (provider->kind) { case Ast_Kind_Struct_Literal: { diff --git a/tests/baked_parameters b/tests/baked_parameters index 4b3ac720..5b8e6972 100644 --- a/tests/baked_parameters +++ b/tests/baked_parameters @@ -1,5 +1,6 @@ 0 1 2 3 4 0 1 2 3 4 5 6 7 8 9 +0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1234 diff --git a/tests/baked_parameters.onyx b/tests/baked_parameters.onyx index 18e51ab1..7e707c5c 100644 --- a/tests/baked_parameters.onyx +++ b/tests/baked_parameters.onyx @@ -17,6 +17,7 @@ count_to_30 :: #solidify count_to { N = #value 30 }; main :: proc (args: [] cstr) { count_to(5); count_to(10); + count_to(10); count_to_30(); // This counts as a compile-time known value. -- 2.25.1