From 7dcd526975c72847b966f9e18d900adaef7c7f87 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 17 Jan 2021 19:55:38 -0600 Subject: [PATCH] small cleanup of the new compile-time parameters --- core/array.onyx | 6 +++++ core/map.onyx | 6 +++++ include/onyxastnodes.h | 5 ++-- onyx.exe | Bin 424960 -> 424960 bytes src/onyxastnodes.c | 6 ++++- src/onyxchecker.c | 6 ++--- src/onyxutils.c | 34 ++++++++---------------- tests/baked_parameters | 18 +++++++++++++ tests/baked_parameters.onyx | 50 ++++++++++++++++++++++++++++++++++++ 9 files changed, 99 insertions(+), 32 deletions(-) create mode 100644 tests/baked_parameters create mode 100644 tests/baked_parameters.onyx diff --git a/core/array.onyx b/core/array.onyx index 0cd4978c..4bd68f70 100644 --- a/core/array.onyx +++ b/core/array.onyx @@ -3,6 +3,12 @@ package core.array // --------------------------------- // Dynamic Arrays // --------------------------------- +make :: proc ($T: type_expr, initial_cap := 4) -> [..] T { + arr : [..] T; + init(^arr, initial_cap); + return arr; +} + init :: proc (arr: ^[..] $T, initial_cap := 4) { arr.count = 0; arr.capacity = initial_cap; diff --git a/core/map.onyx b/core/map.onyx index 1712c837..8656ca78 100644 --- a/core/map.onyx +++ b/core/map.onyx @@ -18,6 +18,12 @@ MapEntry :: struct (K: type_expr, V: type_expr) { value : V; } +make :: proc ($Key: type_expr, $Value: type_expr, default: Value = 0, hash_count: i32 = 16) -> Map(Key, Value) { + map : Map(Key, Value); + init(^map, default = default, hash_count = hash_count); + return map; +} + init :: proc (use map: ^Map($K, $V), default: V = ~~0, hash_count: i32 = 16) { array.init(^hashes, hash_count); array.init(^entries, 4); diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index bacc1116..9f5ffa06 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -1029,15 +1029,14 @@ b32 fill_in_arguments(Arguments* args, AstNode* provider, char** err_msg); void arguments_ensure_length(Arguments* args, u32 count); void arguments_clone(Arguments* dest, Arguments* src); void arguments_deep_clone(bh_allocator a, Arguments* dest, Arguments* src); -void arguments_removed_baked(Arguments* args); +void arguments_remove_baked(Arguments* args); // GROSS: Using void* to avoid having to cast everything. const char* node_get_type_name(void* node); typedef enum PolyProcLookupMethod { - PPLM_By_Call, - PPLM_By_Function_Type, PPLM_By_Arguments, + PPLM_By_Function_Type, } PolyProcLookupMethod; AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxToken* tkn); AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxToken* tkn); diff --git a/onyx.exe b/onyx.exe index 56828a13b16cdfeb13578536daadaa748e06d502..d764d5af338c02426c4ccd6f0e3357a94a0020f4 100644 GIT binary patch delta 47500 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 delta 47408 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 z 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 diff --git a/src/onyxastnodes.c b/src/onyxastnodes.c index 51a12a11..f560b339 100644 --- a/src/onyxastnodes.c +++ b/src/onyxastnodes.c @@ -714,7 +714,7 @@ void arguments_deep_clone(bh_allocator a, Arguments* dest, Arguments* src) { bh_arr_push(dest->values, (AstTyped *) ast_clone(a, (AstNode *) *val)); } -void arguments_removed_baked(Arguments* args) { +void arguments_remove_baked(Arguments* args) { fori (i, 0, bh_arr_length(args->values)) { if (args->values[i]->kind != Ast_Kind_Argument) continue; if (!((AstArgument *) args->values[i])->is_baked) continue; @@ -740,5 +740,9 @@ const char* node_get_type_name(void* node) { return node_get_type_name(((AstArgument *) node)->value); } + if (((AstNode *) node)->kind == Ast_Kind_Polymorphic_Proc) { + return "polymorphic procedure"; + } + return type_get_name(((AstTyped *) node)->type); } diff --git a/src/onyxchecker.c b/src/onyxchecker.c index ea7905bb..4c1d0123 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -466,12 +466,12 @@ CheckStatus check_call(AstCall* call) { } if (callee->kind == Ast_Kind_Polymorphic_Proc) { - call->callee = (AstTyped *) polymorphic_proc_lookup((AstPolyProc *) call->callee, PPLM_By_Call, call, call->token); + call->callee = (AstTyped *) polymorphic_proc_lookup((AstPolyProc *) call->callee, PPLM_By_Arguments, &call->args, call->token); if (call->callee == NULL) return Check_Error; callee = (AstFunction *) call->callee; - arguments_removed_baked(&call->args); + arguments_remove_baked(&call->args); } // NOTE: Build callee's type @@ -496,12 +496,10 @@ CheckStatus check_call(AstCall* call) { non_vararg_param_count--; i32 arg_count = bh_max(non_vararg_param_count, non_baked_argument_count(&call->args)); - arguments_ensure_length(&call->args, arg_count); char* err_msg = NULL; fill_in_arguments(&call->args, (AstNode *) callee, &err_msg); - if (err_msg != NULL) { onyx_report_error(call->token->pos, err_msg); return Check_Error; diff --git a/src/onyxutils.c b/src/onyxutils.c index 63d064d2..a791013f 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -399,17 +399,7 @@ static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLo if (param->kind == PPK_Poly_Type) { Type* actual_type = NULL; - if (pp_lookup == PPLM_By_Call) { - AstCall* call = (AstCall *) actual; - - AstTyped* typed_param = lookup_param_in_arguments(pp, param, &call->args, err_msg); - if (typed_param == NULL) goto sln_not_found; - - actual_type = resolve_expression_type(typed_param); - if (actual_type == NULL) goto sln_not_found; - } - - else if (pp_lookup == PPLM_By_Arguments) { + if (pp_lookup == PPLM_By_Arguments) { Arguments* args = (Arguments *) actual; AstTyped* typed_param = lookup_param_in_arguments(pp, param, args, err_msg); @@ -439,14 +429,7 @@ static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLo } else if (param->kind == PPK_Baked_Value) { AstTyped* value = NULL; - if (pp_lookup == PPLM_By_Call) { - AstCall* call = (AstCall *) actual; - - value = lookup_param_in_arguments(pp, param, &call->args, err_msg); - if (value == NULL) goto sln_not_found; - } - - else if (pp_lookup == PPLM_By_Arguments) { + if (pp_lookup == PPLM_By_Arguments) { Arguments* args = (Arguments *) actual; value = lookup_param_in_arguments(pp, param, args, err_msg); @@ -490,14 +473,17 @@ static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLo param->type = type_build_from_ast(semstate.node_allocator, param->type_expr); if (!type_check_or_auto_cast(&value, param->type)) { - *err_msg = "Expected parameter of a different type. This error message should be wayyy better."; + *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; } - resolved = ((PolySolveResult) { - .kind = PSK_Value, - .value = value, - }); + resolved = ((PolySolveResult) { PSK_Value, value }); } if (orig_value->kind == Ast_Kind_Argument) { diff --git a/tests/baked_parameters b/tests/baked_parameters new file mode 100644 index 00000000..4b3ac720 --- /dev/null +++ b/tests/baked_parameters @@ -0,0 +1,18 @@ +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 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 +1234 +1234 +1234 +1234 +1234 +1234 +1234 +1234 +1234 +Dwight's age is 32. +Jim's age is 25. +Pam's age is 24. +Michael's age is 0. diff --git a/tests/baked_parameters.onyx b/tests/baked_parameters.onyx new file mode 100644 index 00000000..18e51ab1 --- /dev/null +++ b/tests/baked_parameters.onyx @@ -0,0 +1,50 @@ +#load "core/std/js" + +use package core + +count_to :: proc ($N: i32) { + for i: 0 .. N do printf("%i ", i); + print("\n"); +} + +alloc_slice :: proc ($T: type_expr, N: i32) -> [] T { + data := cast(^T) calloc(sizeof T * N); + return <[] T>.{ data, N }; +} + +count_to_30 :: #solidify count_to { N = #value 30 }; + +main :: proc (args: [] cstr) { + count_to(5); + count_to(10); + count_to_30(); + + // This counts as a compile-time known value. + UP_TO :: 100; + count_to(UP_TO); + + sl := alloc_slice(i32, 10); + for ^elem: sl do *elem = 1234; + + for elem: sl do println(elem); + + + // This is so much cleaner than the alternative. + ages := map.make(str, u32, default=0); + defer map.free(^ages); + + map.put(^ages, "Dwight", 32); + map.put(^ages, "Jim", 25); + map.put(^ages, "Pam", 24); + + print_age :: proc (ages: ^map.Map(str, u32), name: str) { + age := map.get(ages, name); + printf("%s's age is %i.\n", name, age); + } + + print_age(^ages, "Dwight"); + print_age(^ages, "Jim"); + print_age(^ages, "Pam"); + print_age(^ages, "Michael"); +} + -- 2.25.1