From 2cd3c8db863d498082157cadce55bdb86ef688ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Fri, 30 May 2025 14:38:41 +0200 Subject: [PATCH] Codechange: [Script] Don't report multiple errors on valuator/filter failure (#14303) --- regression/regression/main.nut | 5 +++++ regression/regression/result.txt | 14 ++------------ src/script/api/script_list.cpp | 2 +- src/script/api/script_list.hpp | 4 ++-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/regression/regression/main.nut b/regression/regression/main.nut index 2da20af963..b37b54f21c 100644 --- a/regression/regression/main.nut +++ b/regression/regression/main.nut @@ -2112,6 +2112,11 @@ function Regression::Start() local list = AIList(); list.AddItem(0, 0); local Infinite = function(id) { while(true); } + try { + list = AIIndustryList(Infinite); + } catch (e) { + print("constructor failed with: " + e); + } list.Valuate(Infinite); } diff --git a/regression/regression/result.txt b/regression/regression/result.txt index f080cca003..510be2a4da 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -9792,20 +9792,10 @@ ERROR: IsEnd() is invalid as Begin() is never called -2147483648 > 2147483647: false 13725 > -2147483648: true --Valuate() with excessive CPU usage-- +constructor failed with: excessive CPU usage in list filter function Your script made an error: excessive CPU usage in valuator function -*FUNCTION [unknown()] regression/main.nut line [2114] -*FUNCTION [Valuate()] NATIVE line [-1] -*FUNCTION [Start()] regression/main.nut line [2115] - -[id] 0 -[this] TABLE -[Infinite] CLOSURE -[list] INSTANCE -[this] INSTANCE -Your script made an error: excessive CPU usage in valuator function - -*FUNCTION [Start()] regression/main.nut line [2115] +*FUNCTION [Start()] regression/main.nut line [2120] [Infinite] CLOSURE [list] INSTANCE diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp index 70deef82a0..71e2a299a8 100644 --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -932,7 +932,7 @@ SQInteger ScriptList::Valuate(HSQUIRRELVM vm) } /* Call the function. Squirrel pops all parameters and pushes the return value. */ - if (SQ_FAILED(sq_call(vm, nparam + 1, SQTrue, SQTrue))) { + if (SQ_FAILED(sq_call(vm, nparam + 1, SQTrue, SQFalse))) { ScriptObject::SetAllowDoCommand(backup_allow); return SQ_ERROR; } diff --git a/src/script/api/script_list.hpp b/src/script/api/script_list.hpp index a2f16eb272..67f9f92145 100644 --- a/src/script/api/script_list.hpp +++ b/src/script/api/script_list.hpp @@ -111,9 +111,9 @@ protected: } /* Call the function. Squirrel pops all parameters and pushes the return value. */ - if (SQ_FAILED(sq_call(vm, nparam + 1, SQTrue, SQTrue))) { + if (SQ_FAILED(sq_call(vm, nparam + 1, SQTrue, SQFalse))) { ScriptObject::SetAllowDoCommand(backup_allow); - throw sq_throwerror(vm, "failed to run filter"); + throw static_cast(SQ_ERROR); } SQBool add = SQFalse;