From ae714792d17a63a590f9800587083f999bf29cd0 Mon Sep 17 00:00:00 2001 From: Kartik Pant Date: Wed, 22 Apr 2026 22:15:55 +0530 Subject: [PATCH] Fix: boa_cli returns non-zero exit code on uncaught exceptions --- cli/src/main.rs | 61 +++++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 3b15df54867..3bc934b4766 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -410,33 +410,42 @@ fn evaluate_expr( Ok(v) => println!("{v}"), Err(v) => eprintln!("{v:?}"), } - } else { - let mut counters = Counters::new(args.time); - let script = { - let _timer = counters.new_timer("Parsing"); - Script::parse(Source::from_bytes(line), None, context) - }; + return Ok(()); + } - match script { - Ok(script) => { - let result = { - let _timer = counters.new_timer("Execution"); - let result = script.evaluate(context); - if let Err(err) = context.run_jobs() { - printer.print(uncaught_job_error(&err)); - } - result - }; - match result { - Ok(v) => printer.print(format!("{}\n", v.display())), - Err(ref v) => printer.print(uncaught_error(v)), + let mut counters = Counters::new(args.time); + let script = { + let _timer = counters.new_timer("Parsing"); + Script::parse(Source::from_bytes(line), None, context) + }; + + match script { + Ok(script) => { + let result = { + let _timer = counters.new_timer("Execution"); + let result = script.evaluate(context); + if let Err(err) = context.run_jobs() { + printer.print(uncaught_job_error(&err)); + return Err(eyre!("Job evaluation failed")); + } + result + }; + match result { + Ok(v) => { + printer.print(format!("{}\n", v.display())); + Ok(()) + } + Err(ref v) => { + printer.print(uncaught_error(v)); + Err(eyre!("Expression execution failed")) } } - Err(ref v) => printer.print(uncaught_error(v)), + } + Err(ref v) => { + printer.print(uncaught_error(v)); + Err(eyre!("Parsing failed")) } } - - Ok(()) } fn evaluate_file( @@ -518,11 +527,13 @@ fn evaluate_file( if !v.is_undefined() { println!("{}", v.display()); } + Ok(()) + } + Err(v) => { + printer.print(uncaught_error(&v)); + Err(eyre!("Script execution failed")) } - Err(v) => printer.print(uncaught_error(&v)), } - - Ok(()) } fn evaluate_files(