From ec63eee52b5cc698ea47bec259136ec38ce6b5bc Mon Sep 17 00:00:00 2001 From: Brandon Sturgeon Date: Tue, 23 Jan 2024 14:17:31 -0800 Subject: [PATCH] Fix missing stacks, remove duplicate info from stack, adjust source line determination --- .../cfc_err_forwarder/formatter/formatter.moon | 3 ++- .../formatter/nice_stack.moon | 6 ++++-- moon/cfc_err_forwarder/plain_receiver.moon | 18 ++++++++++-------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/moon/cfc_err_forwarder/formatter/formatter.moon b/moon/cfc_err_forwarder/formatter/formatter.moon index 95a48dd..2d649d1 100644 --- a/moon/cfc_err_forwarder/formatter/formatter.moon +++ b/moon/cfc_err_forwarder/formatter/formatter.moon @@ -30,11 +30,12 @@ nonil = (t) -> [v for v in *t when v ~= nil] { name: "Full Error" - value: code truncate client and data.fullError or niceStack data + value: code truncate niceStack data } with l = locals data return { name: "Locals", value: code truncate(l), "m" } if l + return nil with {:ply, :plyName, :plySteamID} = data return { name: "Player", value: bold "#{plyName} ( #{steamIDLink plySteamID} )" } if ply diff --git a/moon/cfc_err_forwarder/formatter/nice_stack.moon b/moon/cfc_err_forwarder/formatter/nice_stack.moon index 81225c3..6d27fbe 100644 --- a/moon/cfc_err_forwarder/formatter/nice_stack.moon +++ b/moon/cfc_err_forwarder/formatter/nice_stack.moon @@ -1,8 +1,10 @@ (data) -> - indent = 2 + -- Start at -1 because we're going to increment before using it + indent = -1 - lines = {data.fullError or ""} + lines = {} stack = data.stack + return data.fullError unless stack and next stack for i = 1, #stack do indent = indent + 1 diff --git a/moon/cfc_err_forwarder/plain_receiver.moon b/moon/cfc_err_forwarder/plain_receiver.moon index e008d45..fc53525 100644 --- a/moon/cfc_err_forwarder/plain_receiver.moon +++ b/moon/cfc_err_forwarder/plain_receiver.moon @@ -67,15 +67,17 @@ net.Receive "cfc_err_forwarder_clerror", (len, ply) -> stackCount = math.min stackCount, 7 stack = {} + local sourceFile, sourceLine for i = 1, stackCount - stack[i] = - source: net.ReadString! - name: net.ReadString! - currentline: net.ReadString! - - firstLevel = stack[1] - sourceFile = firstLevel and firstLevel.source - sourceLine = firstLevel and firstLevel.currentline + source = net.ReadString! + name = net.ReadString! + currentline = net.ReadString! + stack[i] = { :source, :name, :currentline } + + -- Always set it if it's not set, otherwise find the first non-[C] source + if sourceFile == nil or sourceFile == "[C]" + sourceFile = source + sourceLine = currentline shouldForward = hook.Run "CFC_ErrorForwarder_OnReceiveCLError", ply, fullError, sourceFile, sourceLine, errorString, stack return if shouldForward == false