From 922d57f44fb6d24583daa4d43d3cf3e65772c73a Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 25 Dec 2020 13:39:21 -0600 Subject: [PATCH] started work on `#solidify` --- .vimspector.json | 2 +- docs/todo | 2 ++ include/onyxastnodes.h | 20 +++++++++++++ include/onyxlex.h | 2 ++ onyx | Bin 286872 -> 286968 bytes progs/poly_solidify.onyx | 18 ++++++++++++ src/onyxchecker.c | 4 +++ src/onyxlex.c | 7 +++++ src/onyxparser.c | 33 +++++++++++++++++++++ src/onyxsymres.c | 31 +++++++++++++++++++- src/onyxutils.c | 60 +++++++++++++++++++++++++++++++++++++++ 11 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 progs/poly_solidify.onyx diff --git a/.vimspector.json b/.vimspector.json index b1d77d0a..d9aef1fd 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -6,7 +6,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/onyx", - "args": ["--verbose", "progs/odin_example.onyx"], + "args": ["--verbose", "progs/poly_solidify.onyx"], "stopAtEntry": true, "cwd": "~/dev/c/onyx", "environment": [], diff --git a/docs/todo b/docs/todo index d9924b44..7a6faf3b 100644 --- a/docs/todo +++ b/docs/todo @@ -112,6 +112,8 @@ Language Cohesion: [ ] Add macros. + [ ] #solidify polymoprhic procedures. + API Expansion: There are many different places where the standard API for WASI and JS backends could be improved. Here are some of the target areas. diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 1ecbee00..82a7e3f2 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -26,6 +26,8 @@ typedef struct AstStructLiteral AstStructLiteral; typedef struct AstArrayLiteral AstArrayLiteral; typedef struct AstRangeLiteral AstRangeLiteral; +typedef struct AstDirectiveSolidify AstDirectiveSolidify; + typedef struct AstReturn AstReturn; typedef struct AstJump AstJump; typedef struct AstUse AstUse; @@ -152,6 +154,8 @@ typedef enum AstKind { Ast_Kind_Switch, Ast_Kind_Switch_Case, + Ast_Kind_Directive_Solidify, + Ast_Kind_Count } AstKind; @@ -508,6 +512,15 @@ struct AstIntrinsicCall { VarArgKind va_kind; }; +struct AstDirectiveSolidify { + AstTyped_base; + + AstPolyProc* poly_proc; + bh_arr(AstPolySolution) known_polyvars; + + AstNode* resolved_proc; +}; + // Intruction Node struct AstReturn { AstNode_base; AstTyped* expr; }; struct AstJump { AstNode_base; JumpType jump; u32 count; }; @@ -729,6 +742,9 @@ struct AstPolyParam { struct AstPolySolution { AstNode* poly_sym; Type* type; + + // If `type` is null, it is filled in with this type. + AstType* ast_type; }; struct AstPolyProc { AstNode_base; @@ -736,6 +752,8 @@ struct AstPolyProc { Scope *poly_scope; bh_arr(AstPolyParam) poly_params; + bh_arr(AstPolySolution) known_slns; + AstFunction* base_func; bh_table(AstFunction *) concrete_funcs; }; @@ -911,6 +929,8 @@ typedef enum PolyProcLookupMethod { } 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); +AstNode* polymorphic_proc_try_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/onyxlex.h b/include/onyxlex.h index 3e4cf559..645a5c93 100644 --- a/include/onyxlex.h +++ b/include/onyxlex.h @@ -111,4 +111,6 @@ OnyxTokenizer onyx_tokenizer_create(bh_allocator allocator, bh_file_contents *fc void onyx_tokenizer_free(OnyxTokenizer* tokenizer); void onyx_lex_tokens(OnyxTokenizer* tokenizer); +b32 token_equals(OnyxToken* tkn1, OnyxToken* tkn2); + #endif diff --git a/onyx b/onyx index 722bd518f0a25854d28a426c17642eea3dac1bbd..4777151a3e66e23a4bff5fdb082f623d16365f80 100755 GIT binary patch delta 68767 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 $B, g: proc (B) -> $C) -> C do return g(f(a)); + +specific_compose :: #solidify compose { A = f32, B = f32, C = u32 }; + +main :: proc (args: [] cstr) { + printf("max(1, 2) = %i\n", math.max(1, 2)); + printf("max_f32(1.0, 2.0) = %f\n", max_f32(1, 2)); + + // printf("max_f32(1, 2) = %i\n", max_f32(cast(u32) 1, cast(u32) 2)); + + +} \ No newline at end of file diff --git a/src/onyxchecker.c b/src/onyxchecker.c index cfdef2e8..8a2610ed 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -1283,6 +1283,10 @@ b32 check_expression(AstTyped** pexpr) { expr->flags |= Ast_Flag_Function_Used; break; + case Ast_Kind_Directive_Solidify: + *pexpr = (AstTyped *) ((AstDirectiveSolidify *) expr)->resolved_proc; + break; + case Ast_Kind_StrLit: break; case Ast_Kind_File_Contents: break; case Ast_Kind_Overloaded_Function: break; diff --git a/src/onyxlex.c b/src/onyxlex.c index 9a678ad9..18f020d5 100644 --- a/src/onyxlex.c +++ b/src/onyxlex.c @@ -437,3 +437,10 @@ void onyx_lex_tokens(OnyxTokenizer* tokenizer) { lexer_lines_processed += tokenizer->line_number - 1; lexer_tokens_processed += bh_arr_length(tokenizer->tokens); } + +b32 token_equals(OnyxToken* tkn1, OnyxToken* tkn2) { + if (tkn1->length != tkn2->length) return 0; + fori (i, 0, tkn1->length) + if (tkn1->text[i] != tkn2->text[i]) return 0; + return 1; +} diff --git a/src/onyxparser.c b/src/onyxparser.c index 3066b560..1b034777 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -531,6 +531,39 @@ static AstTyped* parse_factor(OnyxParser* parser) { retval = (AstTyped *) alias; break; } + else if (parse_possible_directive(parser, "solidify")) { + AstDirectiveSolidify* solid = make_node(AstDirectiveSolidify, Ast_Kind_Directive_Solidify); + solid->token = parser->curr - 1; + + solid->poly_proc = (AstPolyProc *) parse_factor(parser); + + solid->known_polyvars = NULL; + bh_arr_new(global_heap_allocator, solid->known_polyvars, 2); + + expect_token(parser, '{'); + while (parser->curr->type != '}') { + if (parser->hit_unexpected_token) break; + + AstNode* poly_var = make_node(AstNode, Ast_Kind_Symbol); + poly_var->token = expect_token(parser, Token_Type_Symbol); + + expect_token(parser, '='); + AstType* poly_type = parse_type(parser); + + bh_arr_push(solid->known_polyvars, ((AstPolySolution) { + .poly_sym = poly_var, + .ast_type = poly_type, + .type = NULL + })); + + if (parser->curr->type != '}') + expect_token(parser, ','); + } + expect_token(parser, '}'); + + retval = (AstTyped *) solid; + break; + } onyx_report_error(parser->curr->pos, "invalid directive in expression."); return NULL; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 185480c7..e145dab6 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -3,7 +3,7 @@ #include "onyxparser.h" #include "onyxutils.h" #include "onyxastnodes.h" - +#include "onyxerrors.h" static void scope_enter(Scope* new_scope); static void scope_leave(); @@ -21,6 +21,7 @@ static void symres_while(AstIfWhile* whilenode); static void symres_for(AstFor* fornode); static void symres_switch(AstSwitch* switchnode); static void symres_use(AstUse* use); +static void symres_directive_solidify(AstDirectiveSolidify** psolid); static void symres_statement_chain(AstNode** walker); static b32 symres_statement(AstNode** stmt); static void symres_block(AstBlock* block); @@ -468,6 +469,10 @@ static void symres_expression(AstTyped** expr) { symres_array_literal((AstArrayLiteral *)(*expr)); break; + case Ast_Kind_Directive_Solidify: + symres_directive_solidify((AstDirectiveSolidify **) expr); + break; + default: break; } } @@ -593,6 +598,30 @@ cannot_use: onyx_report_error(use->token->pos, "Cannot use this."); } +static void symres_directive_solidify(AstDirectiveSolidify** psolid) { + AstDirectiveSolidify* solid = *psolid; + if (solid->resolved_proc != NULL) + *psolid = (AstDirectiveSolidify *) solid->resolved_proc; + + symres_expression((AstTyped **) &solid->poly_proc); + if (!solid->poly_proc || solid->poly_proc->kind != Ast_Kind_Polymorphic_Proc) { + onyx_report_error(solid->token->pos, "Expected polymorphic procedure in #solidify directive."); + return; + } + + bh_arr_each(AstPolySolution, sln, solid->known_polyvars) { + sln->ast_type = symres_type(sln->ast_type); + sln->type = type_build_from_ast(semstate.node_allocator, sln->ast_type); + if (onyx_has_errors()) return; + } + + solid->resolved_proc = polymorphic_proc_try_solidify(solid->poly_proc, solid->known_polyvars, solid->token->pos); + + // NOTE: Not a DirectiveSolidify. + *psolid = (AstDirectiveSolidify *) solid->resolved_proc; + return; +} + // NOTE: Returns 1 if the statment should be removed static b32 symres_statement(AstNode** stmt) { switch ((*stmt)->kind) { diff --git a/src/onyxutils.c b/src/onyxutils.c index 86562e25..a43d497d 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -536,7 +536,18 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lo 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; + Type* actual_type; if (pp_lookup == PPLM_By_Call) { @@ -654,6 +665,55 @@ AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) return func; } +// NOTE: This can return either a AstFunction or an AstPolyProc, depending if enough parameters were +// supplied to remove all the polymorphic variables from the function. +AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos) { + i32 valid_argument_count = 0; + + bh_arr_each(AstPolySolution, sln, slns) { + b32 found_match = 0; + + bh_arr_each(AstPolyParam, param, pp->poly_params) { + if (token_equals(sln->poly_sym->token, param->poly_sym->token)) { + found_match = 1; + break; + } + } + + if (found_match) { + valid_argument_count++; + } else { + onyx_report_error(pos, "'%b' is not a type variable of '%b'.", + sln->poly_sym->token->text, sln->poly_sym->token->length, + pp->token->text, pp->token->length); + return (AstNode *) pp; + } + } + + if (valid_argument_count == bh_arr_length(pp->poly_params)) { + return (AstNode *) polymorphic_proc_solidify(pp, slns, pos); + + } else { + // HACK: Some of these initializations assume that the entity for this polyproc has + // made it through the symbol resolution phase. + // - brendanfh 2020/12/25 + AstPolyProc* new_pp = onyx_ast_node_new(semstate.node_allocator, sizeof(AstPolyProc), Ast_Kind_Polymorphic_Proc); + new_pp->token = pp->token; // TODO: Change this to be the solidify->token + new_pp->base_func = pp->base_func; + new_pp->poly_scope = new_pp->poly_scope; + new_pp->flags = pp->flags; + new_pp->poly_params = pp->poly_params; + + new_pp->known_slns = NULL; + bh_arr_new(global_heap_allocator, new_pp->known_slns, bh_arr_length(pp->known_slns) + bh_arr_length(slns)); + + bh_arr_each(AstPolySolution, sln, pp->known_slns) bh_arr_push(new_pp->known_slns, *sln); + bh_arr_each(AstPolySolution, sln, slns) bh_arr_push(new_pp->known_slns, *sln); + + return (AstNode *) new_pp; + } +} + AstStructType* polymorphic_struct_lookup(AstPolyStructType* ps_type, bh_arr(Type *) params, OnyxFilePos pos) { // @Cleanup -- 2.25.1