From 5f2320706a6081acd836f593f82fe3f02436ffc3 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 5 May 2022 20:17:24 -0500 Subject: [PATCH] bugfixes with how constraints are applied to functions --- modules/glfw3/build.onyx | 2 +- modules/glfw3/onyx_glfw3.c | 2 +- modules/glfw3/onyx_glfw3.so | Bin 92176 -> 92176 bytes src/checker.c | 14 +++++++++----- src/symres.c | 18 +++++++++++------- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/modules/glfw3/build.onyx b/modules/glfw3/build.onyx index f202fdb8..50fa0eca 100644 --- a/modules/glfw3/build.onyx +++ b/modules/glfw3/build.onyx @@ -28,7 +28,7 @@ main :: () { static void __glfw_##callback_name (GLFWwindow *window, _EXPAND c_args) { \ wasm_val_t args[] = { WASM_I64_VAL((unsigned long long) window), _EXPAND wasm_args }; \ wasm_val_vec_t args_array = WASM_ARRAY_VEC(args); \ - wasm_val_vec_t results; \ + wasm_val_vec_t results = WASM_EMPTY_VEC; \ runtime->wasm_func_call(__glfw_callback_##callback_name , &args_array, &results); \ } \ ONYX_DEF(callback_name, (LONG, PTR, INT), ()) { \ diff --git a/modules/glfw3/onyx_glfw3.c b/modules/glfw3/onyx_glfw3.c index 5b6669fc..02e77ef2 100644 --- a/modules/glfw3/onyx_glfw3.c +++ b/modules/glfw3/onyx_glfw3.c @@ -12,7 +12,7 @@ static void __glfw_##callback_name (GLFWwindow *window, _EXPAND c_args) { \ wasm_val_t args[] = { WASM_I64_VAL((unsigned long long) window), _EXPAND wasm_args }; \ wasm_val_vec_t args_array = WASM_ARRAY_VEC(args); \ - wasm_val_vec_t results; \ + wasm_val_vec_t results = WASM_EMPTY_VEC; \ runtime->wasm_func_call(__glfw_callback_##callback_name , &args_array, &results); \ } \ ONYX_DEF(callback_name, (LONG, PTR, INT), ()) { \ diff --git a/modules/glfw3/onyx_glfw3.so b/modules/glfw3/onyx_glfw3.so index 618f6307f7b136e3200015e23ae9bcd5e7339852..dd2da0c0230868b6b6aae460358cbaf94a02df92 100755 GIT binary patch delta 7953 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 delta 7791 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.constraints != NULL && func->constraints.constraints_met == 0) { + func->constraints.produce_errors = (func->flags & Ast_Flag_Header_Check_No_Error) == 0; + CHECK(constraint_context, &func->constraints, func->scope, func->token->pos); + + // All constraints have been met. Return to symbol resolution to finish + // looking up all symbols in the function. + return Check_Return_To_Symres; + } + bh_arr_each(AstParam, param, func->params) { AstLocal* local = param->local; @@ -2396,11 +2405,6 @@ CheckStatus check_function_header(AstFunction* func) { if (func->return_type != NULL) CHECK(type, &func->return_type); - if (func->constraints.constraints != NULL) { - func->constraints.produce_errors = (func->flags & Ast_Flag_Header_Check_No_Error) == 0; - CHECK(constraint_context, &func->constraints, func->scope, func->token->pos); - } - func->type = type_build_function_type(context.ast_alloc, func); if (func->type == NULL) YIELD(func->token->pos, "Waiting for function type to be constructed"); diff --git a/src/symres.c b/src/symres.c index 3cd5ddb5..8999a4f2 100644 --- a/src/symres.c +++ b/src/symres.c @@ -1019,6 +1019,16 @@ SymresStatus symres_function_header(AstFunction* func) { scope_enter(func->scope); + if (func->constraints.constraints != NULL && func->constraints.constraints_met == 0) { + bh_arr_each(AstConstraint *, constraint, func->constraints.constraints) { + SYMRES(constraint, *constraint); + } + + // Return early here to finish checking constraints in the checker. + // Will resume here after constraints have been met. + return Symres_Success; + } + bh_arr_each(AstParam, param, func->params) { if (param->default_value != NULL) { SYMRES(expression, ¶m->default_value); @@ -1040,7 +1050,7 @@ SymresStatus symres_function_header(AstFunction* func) { return Symres_Complete; } - if (func->nodes_that_need_entities_after_clone && bh_arr_length(func->nodes_that_need_entities_after_clone) > 0) { + if (func->nodes_that_need_entities_after_clone && bh_arr_length(func->nodes_that_need_entities_after_clone) > 0 && func->entity) { bh_arr_each(AstNode *, node, func->nodes_that_need_entities_after_clone) { // This makes a lot of assumptions about how these nodes are being processed, // and I don't want to start using this with other nodes without considering @@ -1069,12 +1079,6 @@ SymresStatus symres_function_header(AstFunction* func) { SYMRES(type, &func->return_type); - if (func->constraints.constraints != NULL) { - bh_arr_each(AstConstraint *, constraint, func->constraints.constraints) { - SYMRES(constraint, *constraint); - } - } - scope_leave(); return Symres_Success; -- 2.25.1