#![allow(unused_crate_dependencies)]
use boa_ast::scope::Scope;
use boa_interner::Interner;
use boa_parser::{Parser, Source};
fn nested_calls(n: usize) -> String {
let mut s = String::with_capacity(n * 2 + 1);
for _ in 0..n {
s.push_str("f(");
}
s.push('0');
for _ in 0..n {
s.push(')');
}
s
}
fn parse_ok(src: &str) -> bool {
Parser::new(Source::from_bytes(src))
.parse_script(&Scope::new_global(), &mut Interner::default())
.is_ok()
}
#[test]
fn stacker_grow_handles_deeply_nested_expressions() {
const STACK_BYTES: usize = 1024 * 1024;
const DEPTH: usize = 600;
let parsed = std::thread::Builder::new()
.name("deep-parse".into())
.stack_size(STACK_BYTES)
.spawn(|| parse_ok(&nested_calls(DEPTH)))
.unwrap()
.join()
.expect("deep-parse thread panicked");
assert!(parsed, "parser should accept {DEPTH}-deep nesting with the stacker patch");
}