diff --git a/boa/src/builtins/console/mod.rs b/boa/src/builtins/console/mod.rs index 3f074091deb..f1ee4452265 100644 --- a/boa/src/builtins/console/mod.rs +++ b/boa/src/builtins/console/mod.rs @@ -299,6 +299,25 @@ impl Console { Ok(JsValue::undefined()) } + #[cfg(feature = "vm")] + fn get_stack_trace(context: &mut Context) -> Vec { + let mut stack_trace: Vec = vec![]; + let mut prev_frame = context.vm.frame.as_ref(); + + while let Some(frame) = prev_frame { + stack_trace.push(frame.code.name.to_string()); + prev_frame = frame.prev.as_ref(); + } + + stack_trace + } + + #[cfg(not(feature = "vm"))] + fn get_stack_trace(_: &mut Context) -> Vec { + // TODO: Implement stack trace retrieval when "vm" feature is not available + vec![] + } + /// `console.trace(...data)` /// /// Prints a stack trace with "trace" logLevel, optionally labelled by data. @@ -316,11 +335,8 @@ impl Console { context.console(), ); - /* TODO: get and print stack trace */ - logger( - LogMessage::Log("Not implemented: ".to_string()), - context.console(), - ) + let stack_trace_dump = Self::get_stack_trace(context).join("\n"); + logger(LogMessage::Log(stack_trace_dump), context.console()) } Ok(JsValue::undefined())