refactor(control_tree): modularize normalized_shadow dev pipeline
This commit is contained in:
@ -176,91 +176,36 @@ impl MirBuilder {
|
||||
fn lower_function_body(&mut self, body: Vec<ASTNode>) -> Result<(), String> {
|
||||
let trace = crate::mir::builder::control_flow::joinir::trace::trace();
|
||||
|
||||
// Phase 112: StepTree capability guard (strict-only)
|
||||
// Phase 112: StepTree capability guard (strict-only) + dev shadow lowering
|
||||
let strict = crate::config::env::joinir_dev::strict_enabled();
|
||||
let dev = crate::config::env::joinir_dev_enabled();
|
||||
let func_name = self
|
||||
.scope_ctx
|
||||
.current_function
|
||||
.as_ref()
|
||||
.map(|f| f.signature.name.clone())
|
||||
.unwrap_or_else(|| "<unknown>".to_string());
|
||||
|
||||
if strict || dev {
|
||||
let tree = crate::mir::control_tree::StepTreeBuilderBox::build_from_block(&body);
|
||||
|
||||
if dev {
|
||||
trace.dev("control_tree/step_tree", &tree.to_compact_string());
|
||||
}
|
||||
|
||||
// Phase 112: Guard check (strict mode only)
|
||||
let func_name = self
|
||||
.scope_ctx
|
||||
.current_function
|
||||
.as_ref()
|
||||
.map(|f| f.signature.name.clone())
|
||||
.unwrap_or_else(|| "<unknown>".to_string());
|
||||
|
||||
crate::mir::builder::control_flow::joinir::control_tree_capability_guard::check(
|
||||
&tree, &func_name, strict, dev,
|
||||
)?;
|
||||
|
||||
// Phase 121/122: StepTree→Normalized shadow lowering (dev-only)
|
||||
if dev {
|
||||
use crate::mir::control_tree::normalized_shadow::StepTreeNormalizedShadowLowererBox;
|
||||
use crate::mir::control_tree::normalized_shadow::parity;
|
||||
use crate::mir::control_tree::normalized_shadow::available_inputs_collector::AvailableInputsCollectorBox;
|
||||
|
||||
// Phase 126: Collect available_inputs from SSOT sources
|
||||
// Note: CapturedEnv is None for now (if-only patterns don't use CapturedEnv yet)
|
||||
let available_inputs = AvailableInputsCollectorBox::collect(self, None);
|
||||
|
||||
// Try shadow lowering (if-only scope)
|
||||
let shadow_result = StepTreeNormalizedShadowLowererBox::try_lower_if_only(&tree, &available_inputs);
|
||||
|
||||
match shadow_result {
|
||||
Ok(Some((module, _meta))) => {
|
||||
// Phase 122: Verify Normalized JoinModule structure
|
||||
let expected_env_fields =
|
||||
StepTreeNormalizedShadowLowererBox::expected_env_field_count(
|
||||
&tree,
|
||||
&available_inputs,
|
||||
);
|
||||
|
||||
if let Err(err) =
|
||||
parity::verify_normalized_structure(&module, expected_env_fields)
|
||||
{
|
||||
if strict {
|
||||
return Err(err);
|
||||
}
|
||||
trace.dev("phase122/emit/error", &err);
|
||||
} else {
|
||||
// Shadow lowering succeeded + structure verified
|
||||
let status = format!(
|
||||
"module_emitted=true funcs={} env_fields={} step_tree_sig={}",
|
||||
module.functions.len(),
|
||||
expected_env_fields,
|
||||
tree.signature_basis_string()
|
||||
);
|
||||
trace.dev("phase122/emit", &status);
|
||||
}
|
||||
}
|
||||
Ok(None) => {
|
||||
// Out of scope (e.g., contains loops)
|
||||
let status = StepTreeNormalizedShadowLowererBox::get_status_string(&tree);
|
||||
trace.dev("phase121/shadow", &status);
|
||||
}
|
||||
Err(err) => {
|
||||
// Should be supported but failed (internal error)
|
||||
let msg = format!(
|
||||
"phase121/shadow: internal error for {}: {}",
|
||||
func_name, err
|
||||
);
|
||||
if strict {
|
||||
return Err(format!(
|
||||
"Phase121 shadow lowering failed (strict mode): {}\nHint: if-only pattern should be supported but conversion failed",
|
||||
err
|
||||
));
|
||||
}
|
||||
trace.dev("phase121/shadow/error", &msg);
|
||||
}
|
||||
}
|
||||
struct JoinLoopTraceDevAdapter<'a> {
|
||||
trace: &'a crate::mir::builder::control_flow::joinir::trace::JoinLoopTrace,
|
||||
}
|
||||
impl crate::mir::control_tree::normalized_shadow::dev_pipeline::DevTrace
|
||||
for JoinLoopTraceDevAdapter<'_>
|
||||
{
|
||||
fn dev(&self, tag: &str, msg: &str) {
|
||||
self.trace.dev(tag, msg)
|
||||
}
|
||||
}
|
||||
let trace_adapter = JoinLoopTraceDevAdapter { trace: &trace };
|
||||
|
||||
crate::mir::control_tree::normalized_shadow::dev_pipeline::StepTreeDevPipelineBox::run(
|
||||
self,
|
||||
&body,
|
||||
&func_name,
|
||||
strict,
|
||||
dev,
|
||||
&trace_adapter,
|
||||
)?;
|
||||
|
||||
trace.emit_if(
|
||||
"debug",
|
||||
|
||||
Reference in New Issue
Block a user