From 75bb28671ab799230bfba584eaf886d3085eee1d Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Mon, 12 Oct 2026 00:12:36 +0000 Subject: [PATCH] =?UTF-8?q?perf:=20parse=20=E4=BB=A5=E6=BA=90=E9=95=BF?= =?UTF-8?q?=E4=B8=8A=E7=95=8C=E9=A2=84=E5=88=86=E9=85=8D=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=EF=BC=8C=E7=9C=81=E8=AF=AD=E4=B9=89=E6=9E=84=E5=BB=BA=E5=99=A8?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E9=81=8D=E5=8E=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 40 +++++++++++++++++----------------- Cargo.toml | 2 +- crates/oxide_parser/src/lib.rs | 7 ++++++ 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6747433b..1a4a3b84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.16.0" +version = "0.16.1" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.16.0" +version = "0.16.1" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.16.0" +version = "0.16.1" dependencies = [ "ansi_term", "bumpalo", @@ -1228,7 +1228,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.16.0" +version = "0.16.1" dependencies = [ "lru", "oxide_bytecode", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1257,7 +1257,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1271,7 +1271,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.16.0" +version = "0.16.1" dependencies = [ "num-bigint", "oxc_allocator", @@ -1286,7 +1286,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1298,7 +1298,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1307,7 +1307,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.16.0" +version = "0.16.1" dependencies = [ "bumpalo", "dashmap", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1333,7 +1333,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.16.0" +version = "0.16.1" dependencies = [ "tracing", "tracing-appender", @@ -1342,11 +1342,11 @@ dependencies = [ [[package]] name = "oxide_net" -version = "0.16.0" +version = "0.16.1" [[package]] name = "oxide_parser" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1361,7 +1361,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1377,7 +1377,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.16.0" +version = "0.16.1" dependencies = [ "num-bigint", "num-traits", @@ -1390,7 +1390,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.16.0" +version = "0.16.1" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1410,7 +1410,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.16.0" +version = "0.16.1" dependencies = [ "bumpalo", "dashmap", @@ -1423,7 +1423,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.16.0" +version = "0.16.1" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 6652b94f..e25e64ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ members = [ ] [workspace.package] -version = "0.16.0" +version = "0.16.1" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_parser/src/lib.rs b/crates/oxide_parser/src/lib.rs index 885803cb..3bf46fcd 100644 --- a/crates/oxide_parser/src/lib.rs +++ b/crates/oxide_parser/src/lib.rs @@ -22,6 +22,7 @@ fn parse_with_source_type<'a>( allocator: &'a Allocator, source: &'a str, source_type: oxc_span::SourceType, ) -> Result, Vec> { use oxc_parser::Parser; + use oxc_semantic::Stats; let ret = Parser::new(allocator, source, source_type).parse(); @@ -43,8 +44,14 @@ fn parse_with_source_type<'a>( // 语法早期错误(Early Errors)检查:oxc parser 把复杂早期错误委托给 // oxc_semantic(strict 绑定标识符、重复参数、NSPL、super 位置等)。 + + // 节点、作用域、符号、引用四计数各占至少一个源字节,源长加一即为四者的 + // 安全上界;传入后语义构建器跳过 Stats::count 全 AST 遍历,直接按上界 + // 预分配容量。 + let bound = (source.len() + 1).min(u32::MAX as usize) as u32; let semantic_ret = oxc_semantic::SemanticBuilder::new() .with_check_syntax_error(true) + .with_stats(Stats::new(bound, bound, bound, bound)) .build(&ret.program); if !semantic_ret.errors.is_empty() { // 重名诊断先经 AST 复核剔除跨语句列合法合并的误报(须在归一化前,