Files
hakorune/tests/normalized_joinir_min.rs
nyash-codex 2a18a66154 feat(joinir): Phase Next - parse_array/object 同型 fixture
## 実ループ制御構造の抽出
- parse_array_min.program.json (n=10 → acc=6)
- parse_object_min.program.json (n=10 → acc=7)

## 既存パターン再利用
- ContinueReturn lowering 活用(新規 lowering 不要)
- 優れたモジュール再利用の実証

## Tests
- +4 tests (ParseArray 2本 + ParseObject 2本)
- +1 test fixed (Phase 88 error message 更新)
- normalized_dev: 64→69 passed (+5)

## 箱化評価
- 単一責任: 
- 境界明確:  (SSOT)
- 再利用性:  (既存パターン活用)
- テスト容易性: 
- SSOT:  (dev_fixtures.rs)

## レガシー探索
- デッドコード: なし
- 重複コード: なし
- クリーンな状態維持

Impact:
- 実ループ寄せの基盤確立
- モジュール設計の成功実証
- 技術的負債ゼロ

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-14 04:09:46 +09:00

117 lines
4.6 KiB
Rust

#![cfg(all(feature = "normalized_dev", debug_assertions))]
use nyash_rust::backend::{mir_interpreter::MirInterpreter, VMValue};
use nyash_rust::mir::join_ir::normalized::dev_env::{
normalized_dev_enabled, test_ctx, NormalizedDevEnvGuard, NormalizedTestContext,
};
use nyash_rust::mir::join_ir::normalized::fixtures::{
build_jsonparser_atoi_real_structured_for_normalized_dev,
build_jsonparser_atoi_structured_for_normalized_dev,
build_jsonparser_parse_array_continue_skip_ws_structured_for_normalized_dev,
build_jsonparser_parse_number_real_structured_for_normalized_dev,
build_jsonparser_parse_object_continue_skip_ws_structured_for_normalized_dev,
build_jsonparser_skip_ws_real_structured_for_normalized_dev,
build_jsonparser_skip_ws_structured_for_normalized_dev,
build_jsonparser_unescape_string_step2_min_structured_for_normalized_dev,
build_pattern2_break_fixture_structured, build_pattern2_minimal_structured,
build_pattern3_if_sum_min_structured_for_normalized_dev,
build_pattern3_if_sum_multi_min_structured_for_normalized_dev,
build_pattern3_json_if_sum_min_structured_for_normalized_dev,
build_pattern4_continue_min_structured_for_normalized_dev,
build_pattern_continue_return_min_structured_for_normalized_dev,
build_parse_string_composite_min_structured_for_normalized_dev,
build_parse_array_min_structured_for_normalized_dev,
build_parse_object_min_structured_for_normalized_dev,
build_selfhost_args_parse_p2_structured_for_normalized_dev,
build_selfhost_if_sum_p3_ext_structured_for_normalized_dev,
build_selfhost_if_sum_p3_structured_for_normalized_dev,
build_selfhost_stmt_count_p3_structured_for_normalized_dev,
build_selfhost_token_scan_p2_accum_structured_for_normalized_dev,
build_selfhost_token_scan_p2_structured_for_normalized_dev,
};
use nyash_rust::mir::join_ir::{
normalize_pattern1_minimal, normalize_pattern2_minimal, normalized_pattern1_to_structured,
normalized_pattern2_to_structured, BinOpKind, ConstValue, JoinContId, JoinFuncId, JoinFunction,
JoinInst, JoinIrPhase, JoinModule, MirLikeInst,
};
use nyash_rust::mir::join_ir_ops::JoinValue;
use nyash_rust::mir::join_ir_runner::run_joinir_function;
use nyash_rust::mir::join_ir_vm_bridge::{convert_join_module_to_mir_with_meta, run_joinir_via_vm};
use nyash_rust::mir::ValueId;
use std::collections::BTreeMap;
#[path = "normalized_joinir_min/basic.rs"]
mod basic;
#[path = "normalized_joinir_min/ownership.rs"]
mod ownership;
#[path = "normalized_joinir_min/selfhost.rs"]
mod selfhost;
#[path = "normalized_joinir_min/shapes.rs"]
mod shapes;
fn normalized_dev_test_ctx() -> NormalizedTestContext<'static> {
let ctx = test_ctx();
assert!(
normalized_dev_enabled(),
"Phase 40: normalized_dev must be enabled for normalized_* tests (feature + NYASH_JOINIR_NORMALIZED_DEV_RUN=1)"
);
ctx
}
fn assert_normalized_dev_ready() {
assert!(
normalized_dev_enabled(),
"Phase 40: normalized_dev must be enabled for normalized_* tests (feature + NYASH_JOINIR_NORMALIZED_DEV_RUN=1)"
);
}
fn run_joinir_runner(
module: &JoinModule,
entry: JoinFuncId,
args: &[JoinValue],
normalized: bool,
) -> JoinValue {
let _guard = NormalizedDevEnvGuard::new(normalized);
if normalized {
assert_normalized_dev_ready();
}
let mut vm = MirInterpreter::new();
run_joinir_function(&mut vm, module, entry, args).expect("JoinIR runner should succeed")
}
fn run_joinir_vm_bridge(
module: &JoinModule,
entry: JoinFuncId,
args: &[JoinValue],
normalized: bool,
) -> JoinValue {
let _guard = NormalizedDevEnvGuard::new(normalized);
if normalized {
assert_normalized_dev_ready();
}
run_joinir_via_vm(module, entry, args).expect("JoinIR→MIR execution should succeed")
}
fn run_joinir_vm_bridge_structured_only(
module: &JoinModule,
entry: JoinFuncId,
args: &[JoinValue],
) -> JoinValue {
let mir =
convert_join_module_to_mir_with_meta(module, &BTreeMap::new()).expect("structured bridge");
let mut vm = MirInterpreter::new();
let entry_name = format!("join_func_{}", entry.0);
let vm_args: Vec<VMValue> = args.iter().cloned().map(|v| v.into_vm_value()).collect();
let result = vm
.execute_function_with_args(&mir, &entry_name, &vm_args)
.expect("VM execution should succeed");
JoinValue::from_vm_value(&result).expect("result conversion")
}
// moved into tests/normalized_joinir_min/basic.rs
// moved into tests/normalized_joinir_min/{selfhost.rs,shapes.rs}
// moved into tests/normalized_joinir_min/shapes.rs
// moved into tests/normalized_joinir_min/ownership.rs