From 2adbf16f8f3d1dbb85d4ec38458be9de6f2cad7b Mon Sep 17 00:00:00 2001 From: Olaroll Date: Thu, 24 Sep 2026 13:33:03 +0300 Subject: [PATCH] Include stack trace in effect errors (#91) --- src/graph.luau | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/graph.luau b/src/graph.luau index fd22489..b85b66e 100644 --- a/src/graph.luau +++ b/src/graph.luau @@ -31,7 +31,14 @@ local function efn(err: string) end trace ..= "\nsource update stacktrace:" -return trace + return trace +end + +local function effect_traceback(err: unknown): string + local message = tostring(err) + -- Nested effect error already has full thread stack + if string.find(message, "^effect error:\n") then return message end + return `effect error:\n{debug.traceback(message, 2)}` end local function ycall(fn: (T) -> U, arg: T): (boolean, string|U) @@ -181,13 +188,13 @@ local function evaluate_node(node: Node) destroy_owned(node) push_scope(node) - local ok, new_value = pcall(node.effect :: (T) -> T, node.cache) + local ok, new_value = xpcall(node.effect :: (T) -> T, effect_traceback, node.cache) pop_scope() if not ok then table.clear(update_queue) update_queue.n = 0 - error(`effect error:\n{new_value}\n`, 0) + error(new_value, 0) end node.cache = new_value