From c208cb8d7b8cf4ebd2ca8903e3b13232af43434f Mon Sep 17 00:00:00 2001 From: jacopodl Date: Fri, 17 May 2024 13:09:10 +0200 Subject: [PATCH] fix: suppressed error messages in Argon when exiting via a RuntimeExit error (e.g., using the exit function) --- argon/vm/argon.cpp | 3 +++ argon/vm/runtime.cpp | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/argon/vm/argon.cpp b/argon/vm/argon.cpp index 89484b75..78ddc149 100644 --- a/argon/vm/argon.cpp +++ b/argon/vm/argon.cpp @@ -158,6 +158,9 @@ void PrintRaw(ArObject *object) { assert(object != nullptr); + if(AR_TYPEOF(object, type_error_) && AtomCompareID(((Error*)object)->id, kRuntimeExitError[0])) + return; + str = (String *) Str(object); Release(object); diff --git a/argon/vm/runtime.cpp b/argon/vm/runtime.cpp index 6ff32312..e0e89ef7 100644 --- a/argon/vm/runtime.cpp +++ b/argon/vm/runtime.cpp @@ -453,8 +453,14 @@ void PanicOOM(Fiber *fiber, struct Panic **panic, ArObject *object) { } void PublishResult(Fiber *fiber, ArObject *result) { - if (result == nullptr && fiber->context->global_config->stack_trace) - TBPrintPanics(stderr); + if (result == nullptr && fiber->context->global_config->stack_trace) { + auto *err = fiber->panic->object; + + if (fiber->panic->panic != nullptr + || !AR_TYPEOF(err, type_error_) + || !AtomCompareID(((Error *) err)->id, kRuntimeExitError[0])) + TBPrintPanics(stderr); + } if (fiber->future != nullptr) { if (result == nullptr) {