diff --git a/rewriter/src/rewrite.rs b/rewriter/src/rewrite.rs index 8d7cd99..d182217 100644 --- a/rewriter/src/rewrite.rs +++ b/rewriter/src/rewrite.rs @@ -187,9 +187,16 @@ impl<'a> Visit<'a> for Rewriter { } fn visit_return_statement(&mut self, it: &oxc_ast::ast::ReturnStatement<'a>) { - self.jschanges.push(JsChange::DebugInject { - span: Span::new(it.span.start + 6, it.span.start + 6), - }); + if let Some(arg) = &it.argument { + self.jschanges.push(JsChange::GenericChange { + span: Span::new(it.span.start + 6, it.span.start + 6), + text: format!(" $scramdbg((()=>{{ try {{return arguments}} catch(_){{}} }})(),("), + }); + self.jschanges.push(JsChange::GenericChange { + span: Span::new(expression_span(arg).end, expression_span(arg).end), + text: format!("))"), + }); + } walk::walk_return_statement(self, it); } diff --git a/src/client/shared/wrap.ts b/src/client/shared/wrap.ts index 00796f1..65ee731 100644 --- a/src/client/shared/wrap.ts +++ b/src/client/shared/wrap.ts @@ -75,15 +75,33 @@ export default function (client: ScramjetClient, self: typeof globalThis) { function argdbg(arg) { switch (typeof arg) { case "string": - if (arg.includes("scramjet")) debugger; + if (arg.includes("scramjet") && !arg.includes("\n")) debugger; break; case "object": - for (let ar of arg) argdbg(ar); + if (arg instanceof Location) debugger; + if ( + arg && + arg[Symbol.iterator] && + typeof arg[Symbol.iterator] === "function" + ) + for (let ar of arg) argdbg(ar); break; } } + client.Trap("Error.prototype.stack", { + get(ctx) { + debugger; + }, + }); + window.$scramerr = function scramerr(e) { - console.error("CAUGHT ERROR", e); + // console.error("CAUGHT ERROR", e); + }; + + window.$scramdbg = function scramdbg(args, t) { + if (args && typeof args === "object" && args.length > 0) argdbg(args); + argdbg(t); + return t; }; }