254 lines
8.6 KiB
Markdown
254 lines
8.6 KiB
Markdown
|
|
# Modularization Quick Start Checklist
|
||
|
|
|
||
|
|
This is the **TL;DR** version of the full implementation plan. Use this as a quick reference during execution.
|
||
|
|
|
||
|
|
**Full Plan**: [modularization-implementation-plan.md](./modularization-implementation-plan.md)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. control_flow.rs Modularization (12.5 hours)
|
||
|
|
|
||
|
|
### Phase 1: Debug Utilities (30 min)
|
||
|
|
- [ ] Create `src/mir/builder/control_flow/debug.rs`
|
||
|
|
- [ ] Move `trace_varmap()`
|
||
|
|
- [ ] Update `mod.rs` imports
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract debug utilities from control_flow.rs"`
|
||
|
|
|
||
|
|
### Phase 2: Pattern Lowerers (2 hours)
|
||
|
|
- [ ] Create `control_flow/joinir/patterns/` directory
|
||
|
|
- [ ] Move `cf_loop_pattern1_minimal()` to `pattern1_minimal.rs`
|
||
|
|
- [ ] Move `cf_loop_pattern2_with_break()` to `pattern2_with_break.rs`
|
||
|
|
- [ ] Move `cf_loop_pattern3_with_if_phi()` to `pattern3_with_if_phi.rs`
|
||
|
|
- [ ] Create `patterns/mod.rs` dispatcher
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib -- --include-ignored`
|
||
|
|
- [ ] Test: `NYASH_OPTION_C_DEBUG=1 ./target/release/nyash apps/tests/loop_min_while.hako`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract pattern lowerers from control_flow.rs"`
|
||
|
|
|
||
|
|
### Phase 3: JoinIR Routing (1.5 hours)
|
||
|
|
- [ ] Create `control_flow/joinir/routing.rs`
|
||
|
|
- [ ] Move `try_cf_loop_joinir()`
|
||
|
|
- [ ] Move `cf_loop_joinir_impl()`
|
||
|
|
- [ ] Update imports
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --release`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract JoinIR routing logic"`
|
||
|
|
|
||
|
|
### Phase 4: merge_joinir_mir_blocks (6 hours) ⚠️ CRITICAL
|
||
|
|
- [ ] Create `control_flow/joinir/merge/` directory
|
||
|
|
- [ ] Extract `id_remapper.rs` (150 lines)
|
||
|
|
- [ ] Extract `block_allocator.rs` (100 lines)
|
||
|
|
- [ ] Extract `value_collector.rs` (100 lines)
|
||
|
|
- [ ] Extract `instruction_rewriter.rs` (150 lines)
|
||
|
|
- [ ] Extract `exit_phi_builder.rs` (100 lines)
|
||
|
|
- [ ] Create `merge/mod.rs` coordinator (100 lines)
|
||
|
|
- [ ] Update all imports
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib`
|
||
|
|
- [ ] Run: `tools/smokes/v2/run.sh --profile quick`
|
||
|
|
- [ ] Run: `NYASH_OPTION_C_DEBUG=1 ./target/release/nyash apps/tests/loop_min_while.hako 2>&1 | grep "merge_joinir"`
|
||
|
|
- [ ] Run determinism test (3x):
|
||
|
|
```bash
|
||
|
|
for i in 1 2 3; do echo "=== Run $i ==="; cargo test --release test_loop_patterns; done
|
||
|
|
```
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Break down merge_joinir_mir_blocks into modules"`
|
||
|
|
|
||
|
|
### Phase 5: Exception Handling (1 hour)
|
||
|
|
- [ ] Create `control_flow/exception/` directory
|
||
|
|
- [ ] Move `cf_try_catch()` to `try_catch.rs`
|
||
|
|
- [ ] Move `cf_throw()` to `throw.rs`
|
||
|
|
- [ ] Create `exception/mod.rs`
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib -- exception`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract exception handling"`
|
||
|
|
|
||
|
|
### Phase 6: Utilities (30 min)
|
||
|
|
- [ ] Create `control_flow/utils.rs`
|
||
|
|
- [ ] Move `extract_loop_variable_from_condition()`
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract utilities"`
|
||
|
|
|
||
|
|
### Phase 7: Final Cleanup (1 hour)
|
||
|
|
- [ ] Add module-level documentation to all files
|
||
|
|
- [ ] Review `control_flow/mod.rs` for clarity
|
||
|
|
- [ ] Verify all `pub(super)` visibility
|
||
|
|
- [ ] Run: `cargo build --release --all-features`
|
||
|
|
- [ ] Run: `cargo test --release`
|
||
|
|
- [ ] Run: `cargo clippy --all-targets`
|
||
|
|
- [ ] Run: `tools/smokes/v2/run.sh --profile integration`
|
||
|
|
- [ ] Update `CLAUDE.md` with new structure
|
||
|
|
- [ ] Commit: `git commit -m "docs: Update control_flow module documentation"`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. generic_case_a.rs Modularization (3.5 hours)
|
||
|
|
|
||
|
|
### Phase 1: Directory Setup (15 min)
|
||
|
|
- [ ] Create `src/mir/join_ir/lowering/generic_case_a/` directory
|
||
|
|
- [ ] Create `mod.rs` with public API
|
||
|
|
- [ ] Move `generic_case_a_entry_builder.rs` into directory
|
||
|
|
- [ ] Move `generic_case_a_whitespace_check.rs` into directory
|
||
|
|
- [ ] Update parent `mod.rs` imports
|
||
|
|
- [ ] Run: `cargo build --release`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Create generic_case_a directory structure"`
|
||
|
|
|
||
|
|
### Phase 2: Extract skip_ws (45 min)
|
||
|
|
- [ ] Create `generic_case_a/skip_ws.rs`
|
||
|
|
- [ ] Move `lower_case_a_skip_ws_with_scope()` and `_core()`
|
||
|
|
- [ ] Add module documentation
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib -- skip_ws`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract skip_ws lowerer"`
|
||
|
|
|
||
|
|
### Phase 3: Extract trim (1 hour)
|
||
|
|
- [ ] Create `generic_case_a/trim.rs`
|
||
|
|
- [ ] Move `lower_case_a_trim_with_scope()` and `_core()`
|
||
|
|
- [ ] Add module documentation
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib -- trim`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract trim lowerer"`
|
||
|
|
|
||
|
|
### Phase 4: Extract append_defs & stage1 (1 hour)
|
||
|
|
- [ ] Create `generic_case_a/append_defs.rs`
|
||
|
|
- [ ] Create `generic_case_a/stage1_using_resolver.rs`
|
||
|
|
- [ ] Move respective functions
|
||
|
|
- [ ] Add module documentation
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --release`
|
||
|
|
- [ ] Run: `tools/smokes/v2/run.sh --profile quick --filter "funcscanner_*"`
|
||
|
|
- [ ] Commit: `git commit -m "refactor: Extract append_defs and stage1 lowerers"`
|
||
|
|
|
||
|
|
### Phase 5: Final Cleanup (30 min)
|
||
|
|
- [ ] Add module-level documentation to all files
|
||
|
|
- [ ] Verify all imports are clean
|
||
|
|
- [ ] Run: `cargo build --release --all-features && cargo test --release`
|
||
|
|
- [ ] Commit: `git commit -m "docs: Complete generic_case_a modularization"`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. loopform_builder.rs Modularization (4 hours) - FUTURE
|
||
|
|
|
||
|
|
**Status**: Already partially modularized in Phase 191. Remaining work is lower priority.
|
||
|
|
|
||
|
|
### Phase 1: Directory Setup (30 min)
|
||
|
|
- [ ] Create `src/mir/phi_core/loopform/` directory
|
||
|
|
- [ ] Move existing modular files into directory
|
||
|
|
- [ ] Create `mod.rs` with re-exports
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --lib -- loopform`
|
||
|
|
|
||
|
|
### Phase 2: Extract 4-Pass Architecture (2 hours)
|
||
|
|
- [ ] Create `loopform/passes/` directory
|
||
|
|
- [ ] Extract Pass 1: Variable discovery
|
||
|
|
- [ ] Extract Pass 2: Header PHI construction
|
||
|
|
- [ ] Extract Pass 3: Latch block processing
|
||
|
|
- [ ] Extract Pass 4: Exit PHI construction
|
||
|
|
- [ ] Create `passes/mod.rs` coordinator
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --release -- loopform`
|
||
|
|
|
||
|
|
### Phase 3: Extract Core Builder (1 hour)
|
||
|
|
- [ ] Create `loopform/builder_core.rs`
|
||
|
|
- [ ] Move remaining builder logic
|
||
|
|
- [ ] Run: `cargo build --release && cargo test --release`
|
||
|
|
|
||
|
|
### Phase 4: Final Cleanup (30 min)
|
||
|
|
- [ ] Add module documentation
|
||
|
|
- [ ] Run: `cargo build --release --all-features`
|
||
|
|
- [ ] Run: `tools/smokes/v2/run.sh --profile quick --filter "phi_*"`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Emergency Rollback Commands
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Rollback control_flow.rs modularization
|
||
|
|
rm -rf src/mir/builder/control_flow/
|
||
|
|
git checkout src/mir/builder/control_flow.rs
|
||
|
|
cargo build --release && cargo test --lib
|
||
|
|
|
||
|
|
# Rollback generic_case_a.rs modularization
|
||
|
|
rm -rf src/mir/join_ir/lowering/generic_case_a/
|
||
|
|
git checkout src/mir/join_ir/lowering/generic_case_a*.rs
|
||
|
|
cargo build --release && cargo test --lib
|
||
|
|
|
||
|
|
# Rollback loopform_builder.rs modularization
|
||
|
|
rm -rf src/mir/phi_core/loopform/
|
||
|
|
git checkout src/mir/phi_core/loopform*.rs
|
||
|
|
cargo build --release && cargo test --lib
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Verification Commands
|
||
|
|
|
||
|
|
### Quick Verification (after each phase)
|
||
|
|
```bash
|
||
|
|
cargo build --release
|
||
|
|
cargo test --lib
|
||
|
|
```
|
||
|
|
|
||
|
|
### Comprehensive Verification (after critical phases)
|
||
|
|
```bash
|
||
|
|
cargo build --release --all-features
|
||
|
|
cargo test --release
|
||
|
|
cargo clippy --all-targets
|
||
|
|
tools/smokes/v2/run.sh --profile quick
|
||
|
|
```
|
||
|
|
|
||
|
|
### Debug Trace Verification (Phase 4 only)
|
||
|
|
```bash
|
||
|
|
NYASH_OPTION_C_DEBUG=1 ./target/release/nyash apps/tests/loop_min_while.hako 2>&1 | grep "merge_joinir"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Determinism Check (Phase 4 only)
|
||
|
|
```bash
|
||
|
|
for i in 1 2 3; do
|
||
|
|
echo "=== Run $i ==="
|
||
|
|
cargo test --release test_loop_patterns 2>&1 | grep "test result"
|
||
|
|
done
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Success Criteria
|
||
|
|
|
||
|
|
- ✅ All 267+ tests pass
|
||
|
|
- ✅ Build time ≤ current
|
||
|
|
- ✅ `control_flow/mod.rs` < 200 lines (vs 1,632)
|
||
|
|
- ✅ Largest file < 250 lines (vs 714)
|
||
|
|
- ✅ Debug traces still work
|
||
|
|
- ✅ No HashMap non-determinism
|
||
|
|
- ✅ Code is easier to navigate
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Timeline
|
||
|
|
|
||
|
|
### Week 1: control_flow.rs Phases 1-3 (Low Risk)
|
||
|
|
- **Total**: 4 hours
|
||
|
|
- **Risk**: Low
|
||
|
|
- **Deliverable**: Pattern lowerers and routing isolated
|
||
|
|
|
||
|
|
### Week 2: control_flow.rs Phase 4 (High Risk)
|
||
|
|
- **Total**: 6 hours
|
||
|
|
- **Risk**: Medium
|
||
|
|
- **Deliverable**: merge_joinir_mir_blocks modularized
|
||
|
|
|
||
|
|
### Week 3: control_flow.rs Phases 5-7 + generic_case_a.rs
|
||
|
|
- **Total**: 6 hours
|
||
|
|
- **Risk**: Low
|
||
|
|
- **Deliverable**: control_flow.rs complete, generic_case_a.rs modularized
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Questions?
|
||
|
|
|
||
|
|
**Full Plan**: [modularization-implementation-plan.md](./modularization-implementation-plan.md)
|
||
|
|
|
||
|
|
**Open Issues**:
|
||
|
|
- Create a GitHub issue if you encounter blockers
|
||
|
|
- Tag with `refactoring` label
|
||
|
|
|
||
|
|
**Need Help?**:
|
||
|
|
- Check the full plan for detailed explanations
|
||
|
|
- Review the risk/mitigation matrix
|
||
|
|
- Use the emergency rollback procedure if needed
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Last Updated**: 2025-12-05
|
||
|
|
**Status**: Ready to execute
|