From bd5ea29203747a9c4dd3a5e924e41f3f6b299bac Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Tue, 13 Oct 2026 03:07:53 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=8B=E8=AF=95=E6=94=B9=E7=94=A8?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E6=93=8D=E4=BD=9C=E6=95=B0=E8=A7=84=E9=81=BF?= =?UTF-8?q?=E5=B8=B8=E9=87=8F=E6=8A=98=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 42 ++++++++++++------------- Cargo.toml | 2 +- crates/oxide_cli/tests/cli_smoke.rs | 2 +- crates/oxide_vm/tests/concat_n_tests.rs | 14 +++++---- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 278812a8..33904486 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.18.1" +version = "0.18.2" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.18.1" +version = "0.18.2" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.18.1" +version = "0.18.2" dependencies = [ "ansi_term", "bumpalo", @@ -1228,7 +1228,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.18.1" +version = "0.18.2" dependencies = [ "lru", "oxide_bytecode", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1258,7 +1258,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.18.1" +version = "0.18.2" dependencies = [ "num-bigint", "oxc_allocator", @@ -1288,7 +1288,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1300,7 +1300,7 @@ dependencies = [ [[package]] name = "oxide_fold" -version = "0.18.1" +version = "0.18.2" dependencies = [ "num-bigint", "oxide_bytecode", @@ -1312,7 +1312,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.18.1" +version = "0.18.2" dependencies = [ "bumpalo", "dashmap", @@ -1335,7 +1335,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1347,7 +1347,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.18.1" +version = "0.18.2" dependencies = [ "tracing", "tracing-appender", @@ -1356,11 +1356,11 @@ dependencies = [ [[package]] name = "oxide_net" -version = "0.18.1" +version = "0.18.2" [[package]] name = "oxide_parser" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1375,7 +1375,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1391,7 +1391,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.18.1" +version = "0.18.2" dependencies = [ "num-bigint", "num-traits", @@ -1404,7 +1404,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.18.1" +version = "0.18.2" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1424,7 +1424,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.18.1" +version = "0.18.2" dependencies = [ "bumpalo", "dashmap", @@ -1437,7 +1437,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.18.1" +version = "0.18.2" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index b639cc31..00e93ca3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ members = [ ] [workspace.package] -version = "0.18.1" +version = "0.18.2" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_cli/tests/cli_smoke.rs b/crates/oxide_cli/tests/cli_smoke.rs index b8530262..7f88fbae 100644 --- a/crates/oxide_cli/tests/cli_smoke.rs +++ b/crates/oxide_cli/tests/cli_smoke.rs @@ -93,7 +93,7 @@ fn bench_help() { #[test] fn eval_trace_flag_pc_lines() { let output = Command::new(env!("CARGO_BIN_EXE_oxide")) - .args(["eval", "--trace", "1 + 2"]) + .args(["eval", "--trace", "var a = 1; var b = 2; a + b"]) .output() .expect("failed to run oxide eval --trace"); diff --git a/crates/oxide_vm/tests/concat_n_tests.rs b/crates/oxide_vm/tests/concat_n_tests.rs index d0d4d7ce..3b6182f1 100644 --- a/crates/oxide_vm/tests/concat_n_tests.rs +++ b/crates/oxide_vm/tests/concat_n_tests.rs @@ -42,10 +42,11 @@ fn eval_str(source: &str) -> String { #[test] fn concat_n_three_form_mixed_anchors() { // 数值前缀折叠保证 1+2+"3" = "33"(非 "123");字符串开头整链拼接;中缀字符串同理。 - assert_eq!(eval_str("1 + 2 + \"3\""), "33"); - assert_eq!(eval_str("\"1\" + 2 + 3"), "123"); - assert_eq!(eval_str("1 + \"2\" + 3"), "123"); - assert_eq!(eval_str("\"a\" + 1 + 2"), "a12"); + // 首操作数用变量避免常量折叠,保证链走 CONCAT_N 运行期路径。 + assert_eq!(eval_str("var a = 1; a + 2 + \"3\""), "33"); + assert_eq!(eval_str("var s = \"1\"; s + 2 + 3"), "123"); + assert_eq!(eval_str("var a = 1; a + \"2\" + 3"), "123"); + assert_eq!(eval_str("var s = \"a\"; s + 1 + 2"), "a12"); } #[test] @@ -60,10 +61,11 @@ fn concat_n_pure_numeric_folds_like_left_assoc() { fn concat_n_bigint_mix_semantics() { // 全 BigInt 链折叠;BigInt 混合在第一个混合点抛 TypeError(与 (1+2n) 同位置); // BigInt + 字符串开头走字符串模式。 + // 混合链首操作数用变量避免常量折叠,保证走 CONCAT_N 运行期语义。 assert_eq!(eval_str("1n + 2n + 3n"), "6"); - let err = eval(&mut Vm::new(), "1 + 2n + \"a\"").unwrap_err(); + let err = eval(&mut Vm::new(), "var a = 1; a + 2n + \"a\"").unwrap_err(); assert!(err.contains("TypeError"), "expected TypeError, got {err}"); - assert_eq!(eval_str("1n + \"a\" + 2"), "1a2"); + assert_eq!(eval_str("var b = 1n; b + \"a\" + 2"), "1a2"); } #[test]