From 036706eda3e41b84896b95be30ba771dc44dd0fc Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 24 Dec 2020 14:04:46 -0600 Subject: [PATCH] massive clean up of polymorphic procedure generation --- include/onyxastnodes.h | 21 +++++++- include/onyxsempass.h | 3 -- onyx | Bin 282632 -> 286872 bytes src/onyxsymres.c | 36 +++++++++---- src/onyxutils.c | 112 +++++++++++++++++++++++++++-------------- 5 files changed, 118 insertions(+), 54 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 7b2d5c74..1ecbee00 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -65,6 +65,7 @@ typedef struct AstFunction AstFunction; typedef struct AstOverloadedFunction AstOverloadedFunction; typedef struct AstPolyParam AstPolyParam; +typedef struct AstPolySolution AstPolySolution; typedef struct AstPolyProc AstPolyProc; typedef struct AstPackage AstPackage; @@ -712,7 +713,23 @@ struct AstFunction { }; }; }; -struct AstPolyParam { AstNode* poly_sym; AstType* type_expr; u64 idx; }; +struct AstPolyParam { + // The symbol node that represents the polymorphic variable. + AstNode* poly_sym; + + // The type expression that contains `poly_sym` in it somewhere. + // Matching polymorphic variables does a parallel tree traversal + // to find the pairing of the actual type and polymorphic variable + // symbol. + AstType* type_expr; + + // The parameter index where the polymorphic variable occurs. + u64 idx; +}; +struct AstPolySolution { + AstNode* poly_sym; + Type* type; +}; struct AstPolyProc { AstNode_base; @@ -811,6 +828,7 @@ Entity entity_heap_top(EntityHeap* entities); void entity_heap_change_top(EntityHeap* entities, Entity new_top); void entity_heap_remove_top(EntityHeap* entities); +void entity_bring_to_state(Entity* ent, EntityState state); void symres_entity(Entity* ent); void check_entity(Entity* ent); void emit_entity(Entity* ent); @@ -892,6 +910,7 @@ typedef enum PolyProcLookupMethod { PPLM_By_Function_Type, } PolyProcLookupMethod; AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxFilePos pos); +AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos); AstStructType* polymorphic_struct_lookup(AstPolyStructType* ps_type, bh_arr(Type *) params, OnyxFilePos pos); diff --git a/include/onyxsempass.h b/include/onyxsempass.h index 9293353b..9897a55b 100644 --- a/include/onyxsempass.h +++ b/include/onyxsempass.h @@ -31,11 +31,8 @@ typedef struct SemState { extern SemState semstate; AstType* symres_type(AstType* type); -void symres_function(AstFunction* func); b32 check_expression(AstTyped** expr); -b32 check_function_header(AstFunction* func); -b32 check_function(AstFunction* func); // TODO: This should be moved elsewhere. void onyx_sempass_init(bh_allocator alloc, bh_allocator node_alloc); diff --git a/onyx b/onyx index c8f1d3782fdac06e86a8806b4983b65ab7dc0940..722bd518f0a25854d28a426c17642eea3dac1bbd 100755 GIT binary patch delta 77643 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 delta 76497 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

1m`N5o5x$pb(*=Y4SD1rD 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 == NULL) - // new_scope->parent = semstate.curr_scope; semstate.curr_scope = new_scope; } @@ -642,7 +641,7 @@ static void symres_block(AstBlock* block) { scope_leave(); } -void symres_function(AstFunction* func) { +void symres_function_header(AstFunction* func) { if (func->scope == NULL) func->scope = scope_create(semstate.node_allocator, semstate.curr_scope, func->token->pos); @@ -651,6 +650,13 @@ void symres_function(AstFunction* func) { symres_expression(¶m->default_value); if (onyx_has_errors()) return; + // HACK: It shouldn't be necessary to do this twice, but right now + // if `null` is the default parameter and it hasn't been used anywhere in + // code yet, it doesn't resolve properly. So for now I am just checking symbols twice. + // -brendanfh 2020/12/24 + symres_expression(¶m->default_value); + if (onyx_has_errors()) return; + if (check_expression(¶m->default_value)) return; } } @@ -744,9 +750,11 @@ void symres_function(AstFunction* func) { } } - if (func->type_node != NULL) { - func->type_node = symres_type(func->type_node); - } + scope_leave(); +} + +void symres_function(AstFunction* func) { + scope_enter(func->scope); semstate.curr_function = func; symres_block(func->body); @@ -864,20 +872,24 @@ static void symres_memres(AstMemRes** memres) { } static void symres_polyproc(AstPolyProc* pp) { - pp->poly_scope = scope_create(semstate.node_allocator, semstate.curr_scope, pp->token->pos); + pp->poly_scope = semstate.curr_scope; } void symres_entity(Entity* ent) { - if (ent->package) { + if (ent->package) semstate.curr_package = ent->package; + + Scope* old_scope; + if (ent->scope) { + old_scope = semstate.curr_scope; scope_enter(ent->scope); - semstate.curr_package = ent->package; } EntityState next_state = Entity_State_Check_Types; switch (ent->type) { case Entity_Type_Foreign_Function_Header: - case Entity_Type_Function: symres_function(ent->function); break; + case Entity_Type_Function_Header: symres_function_header(ent->function); break; + case Entity_Type_Function: symres_function(ent->function); break; case Entity_Type_Foreign_Global_Header: case Entity_Type_Global_Header: symres_global(ent->global); break; @@ -900,5 +912,7 @@ void symres_entity(Entity* ent) { ent->state = next_state; - if (ent->package) scope_leave(); + if (ent->scope) { + semstate.curr_scope = old_scope; + } } diff --git a/src/onyxutils.c b/src/onyxutils.c index 85bb259d..86562e25 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -533,10 +533,12 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lo bh_table_init(global_heap_allocator, pp->concrete_funcs, 8); } - scope_clear(pp->poly_scope); + bh_arr(AstPolySolution) slns = NULL; + bh_arr_new(global_heap_allocator, slns, bh_arr_length(pp->poly_params)); bh_arr_each(AstPolyParam, param, pp->poly_params) { Type* actual_type; + if (pp_lookup == PPLM_By_Call) { AstArgument* arg = ((AstCall *) actual)->arguments; if (param->idx >= ((AstCall *) actual)->arg_count) { @@ -570,71 +572,89 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lo return NULL; } - AstTypeRawAlias* raw = onyx_ast_node_new(semstate.node_allocator, sizeof(AstTypeRawAlias), Ast_Kind_Type_Raw_Alias); - raw->to = resolved_type; - - symbol_introduce(pp->poly_scope, param->poly_sym->token, (AstNode *) raw); + bh_arr_push(slns, ((AstPolySolution) { + .poly_sym = param->poly_sym, + .type = resolved_type + })); } - // HACK(Brendan): Maybe each type should be given a unique id upon creation? - // Then that could be used to uniquely identify the type, instead of relying - // on the name being unique. - brendanfh 2020/12/14 + AstFunction* result = polymorphic_proc_solidify(pp, slns, pos); + + bh_arr_free(slns); + return result; +} + +// NOTE: This returns a volatile string. Do not store it without copying it. +static char* build_polyproc_unique_key(bh_arr(AstPolySolution) slns) { static char key_buf[1024]; fori (i, 0, 1024) key_buf[i] = 0; - bh_table_each_start(AstNode *, pp->poly_scope->symbols); - strncat(key_buf, key, 1023); + + 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, type_get_unique_name(((AstTypeRawAlias *) value)->to), 1023); + strncat(key_buf, type_get_unique_name(sln->type), 1023); strncat(key_buf, ";", 1023); - bh_table_each_end; - if (bh_table_has(AstFunction *, pp->concrete_funcs, key_buf)) { - return bh_table_get(AstFunction *, pp->concrete_funcs, key_buf); + token_toggle_end(sln->poly_sym->token); } - Type* old_return_type = semstate.expected_return_type; - Scope* old_scope = semstate.curr_scope; - semstate.curr_scope = pp->poly_scope; + return key_buf; +} - AstFunction* func = (AstFunction *) ast_clone(semstate.node_allocator, pp->base_func); - bh_table_put(AstFunction *, pp->concrete_funcs, key_buf, func); +AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos) { + if (pp->concrete_funcs == NULL) { + bh_table_init(global_heap_allocator, pp->concrete_funcs, 8); + } - symres_function(func); - semstate.curr_scope = old_scope; + // NOTE: Check if a version of this polyproc has already been created. + char* unique_key = build_polyproc_unique_key(slns); + if (bh_table_has(AstFunction *, pp->concrete_funcs, unique_key)) { + return bh_table_get(AstFunction *, pp->concrete_funcs, unique_key); + } - if (onyx_has_errors()) goto has_error; - if (check_function_header(func)) goto has_error; - goto no_errors; + Scope* poly_scope = scope_create(semstate.node_allocator, pp->poly_scope, pos); + bh_arr_each(AstPolySolution, sln, slns) { + AstTypeRawAlias* raw = onyx_ast_node_new(semstate.node_allocator, sizeof(AstTypeRawAlias), Ast_Kind_Type_Raw_Alias); + raw->to = sln->type; -has_error: - onyx_report_error(pos, "Error in polymorphic procedure generated from this call site."); - semstate.expected_return_type = old_return_type; - return NULL; + symbol_introduce(poly_scope, sln->poly_sym->token, (AstNode *) raw); + } -no_errors: - semstate.expected_return_type = old_return_type; + AstFunction* func = (AstFunction *) ast_clone(semstate.node_allocator, pp->base_func); + bh_table_put(AstFunction *, pp->concrete_funcs, unique_key, func); + + func->flags |= Ast_Flag_Function_Used; - entity_heap_insert(&semstate.program->entities, (Entity) { - .state = Entity_State_Code_Gen, + Entity func_header_entity = { + .state = Entity_State_Resolve_Symbols, .type = Entity_Type_Function_Header, .function = func, .package = NULL, - }); + .scope = poly_scope, + }; + + entity_bring_to_state(&func_header_entity, Entity_State_Code_Gen); + if (onyx_has_errors()) { + onyx_report_error(pos, "Error in polymorphic procedure header generated from this call site."); + return NULL; + } - entity_heap_insert(&semstate.program->entities, (Entity) { - .state = Entity_State_Check_Types, + Entity func_entity = { + .state = Entity_State_Resolve_Symbols, .type = Entity_Type_Function, .function = func, .package = NULL, - }); - - func->flags |= Ast_Flag_Function_Used; + .scope = poly_scope, + }; + entity_heap_insert(&semstate.program->entities, func_header_entity); + entity_heap_insert(&semstate.program->entities, func_entity); return func; } - AstStructType* polymorphic_struct_lookup(AstPolyStructType* ps_type, bh_arr(Type *) params, OnyxFilePos pos) { // @Cleanup assert(bh_arr_length(ps_type->poly_params) == bh_arr_length(params)); @@ -887,3 +907,17 @@ char* get_function_name(AstFunction* func) { return ""; } + +void entity_bring_to_state(Entity* ent, EntityState state) { + while (ent->state != state) { + switch (ent->state) { + case Entity_State_Resolve_Symbols: symres_entity(ent); break; + case Entity_State_Check_Types: check_entity(ent); break; + case Entity_State_Code_Gen: emit_entity(ent); break; + + default: return; + } + + if (onyx_has_errors()) return; + } +} -- 2.25.1