refactor(control_tree): Phase 128 - add value_ast to Assign for Normalized lowering
This commit is contained in:
@ -55,7 +55,11 @@ pub struct AstNodeHandle(pub Box<ASTNode>);
|
|||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub enum StepStmtKind {
|
pub enum StepStmtKind {
|
||||||
LocalDecl { vars: Vec<String> },
|
LocalDecl { vars: Vec<String> },
|
||||||
Assign { target: Option<String> },
|
Assign {
|
||||||
|
target: Option<String>,
|
||||||
|
/// Phase 128: assignment value AST (for Normalized lowering)
|
||||||
|
value_ast: Option<AstNodeHandle>,
|
||||||
|
},
|
||||||
Print,
|
Print,
|
||||||
Return {
|
Return {
|
||||||
/// Phase 123: return value AST (for Normalized lowering)
|
/// Phase 123: return value AST (for Normalized lowering)
|
||||||
@ -188,7 +192,7 @@ impl StepStmtKind {
|
|||||||
fn to_compact_string(&self) -> String {
|
fn to_compact_string(&self) -> String {
|
||||||
match self {
|
match self {
|
||||||
StepStmtKind::LocalDecl { vars } => format!("local({})", vars.join(",")),
|
StepStmtKind::LocalDecl { vars } => format!("local({})", vars.join(",")),
|
||||||
StepStmtKind::Assign { target } => match target {
|
StepStmtKind::Assign { target, .. } => match target {
|
||||||
Some(name) => format!("assign({name})"),
|
Some(name) => format!("assign({name})"),
|
||||||
None => "assign(?)".to_string(),
|
None => "assign(?)".to_string(),
|
||||||
},
|
},
|
||||||
@ -374,7 +378,7 @@ impl StepTreeBuilderBox {
|
|||||||
},
|
},
|
||||||
StepTreeFeatures::default(),
|
StepTreeFeatures::default(),
|
||||||
),
|
),
|
||||||
ASTNode::Assignment { span, .. } => (
|
ASTNode::Assignment { span, value, .. } => (
|
||||||
StepNode::Stmt {
|
StepNode::Stmt {
|
||||||
kind: StepStmtKind::Assign {
|
kind: StepStmtKind::Assign {
|
||||||
target: match ast {
|
target: match ast {
|
||||||
@ -384,6 +388,8 @@ impl StepTreeBuilderBox {
|
|||||||
},
|
},
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
|
/// Phase 128: Store value AST for Normalized lowering
|
||||||
|
value_ast: Some(AstNodeHandle(value.clone())),
|
||||||
},
|
},
|
||||||
span: span.clone(),
|
span: span.clone(),
|
||||||
},
|
},
|
||||||
@ -507,12 +513,14 @@ fn walk_for_facts(node: &StepNode, facts: &mut StepTreeFacts) {
|
|||||||
facts.add_write(v.clone());
|
facts.add_write(v.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StepStmtKind::Assign { target } => {
|
StepStmtKind::Assign { target, value_ast } => {
|
||||||
if let Some(name) = target.as_ref() {
|
if let Some(name) = target.as_ref() {
|
||||||
facts.add_write(name.clone());
|
facts.add_write(name.clone());
|
||||||
}
|
}
|
||||||
// Note: Assign RHS is not in StepStmtKind
|
// Phase 128: Extract reads from assignment value AST
|
||||||
// We rely on If/Loop condition AST for reads extraction
|
if let Some(ast) = value_ast {
|
||||||
|
extract_variables_from_ast(&ast.0, facts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
StepStmtKind::Print => {}
|
StepStmtKind::Print => {}
|
||||||
StepStmtKind::Return { value_ast } => {
|
StepStmtKind::Return { value_ast } => {
|
||||||
|
|||||||
Reference in New Issue
Block a user