Skip to content

Commit 29c4be9

Browse files
Brooooooklynclaude
andcommitted
Angular compiler alignment: 90.2% match rate (587/651 components)
Phase 37: Safe Navigation ResolvedCall Temp Caching - Fixed `needs_temporary_in_safe_access` to handle `ResolvedCall` expressions - Added handling for `ResolvedPropertyRead` and `ResolvedKeyedRead` receivers - Match rate: 83.6% → 84.2% (+4 components) Phase 38: Pipe Slot Propagation to All Expressions - Fixed `propagate_slots_to_expressions` to handle DomProperty, TwoWayProperty, I18nExpression, Animation, AnimationBinding update ops - Added Not, Unary, Typeof, Void expression handlers - Match rate: 84.2% → 87.7% (+23 components) Phase 39: ResetView Wrapper for TwoWayListener/AnimationListener - Fixed `add_restore_view_ops_only()` to wrap return statements in `ResetViewExpr` - Added `wrap_return_statements_in_reset_view()` function - Match rate: 87.7% → 90.2% (+16 components) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent b867123 commit 29c4be9

File tree

5 files changed

+745
-171
lines changed

5 files changed

+745
-171
lines changed

crates/oxc_angular_compiler/src/pipeline/phases/allocate_slots.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,18 @@ fn propagate_slots_to_expressions(
416416
update_expression_slots(&mut tbs.target, slot_map);
417417
update_expression_slots(&mut tbs.value, slot_map);
418418
}
419+
IrExpression::Not(not) => {
420+
update_expression_slots(&mut not.expr, slot_map);
421+
}
422+
IrExpression::Unary(unary) => {
423+
update_expression_slots(&mut unary.expr, slot_map);
424+
}
425+
IrExpression::Typeof(type_of) => {
426+
update_expression_slots(&mut type_of.expr, slot_map);
427+
}
428+
IrExpression::Void(void) => {
429+
update_expression_slots(&mut void.expr, slot_map);
430+
}
419431
_ => {}
420432
}
421433
}
@@ -502,6 +514,21 @@ fn propagate_slots_to_expressions(
502514
UpdateOp::StoreLet(store) => {
503515
update_expression_slots(&mut store.value, slot_map);
504516
}
517+
UpdateOp::DomProperty(prop) => {
518+
update_expression_slots(&mut prop.expression, slot_map);
519+
}
520+
UpdateOp::TwoWayProperty(prop) => {
521+
update_expression_slots(&mut prop.expression, slot_map);
522+
}
523+
UpdateOp::I18nExpression(expr) => {
524+
update_expression_slots(&mut expr.expression, slot_map);
525+
}
526+
UpdateOp::Animation(anim) => {
527+
update_expression_slots(&mut anim.expression, slot_map);
528+
}
529+
UpdateOp::AnimationBinding(anim) => {
530+
update_expression_slots(&mut anim.expression, slot_map);
531+
}
505532
_ => {}
506533
}
507534
}

crates/oxc_angular_compiler/src/pipeline/phases/expand_safe_reads.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ pub fn expand_safe_reads(job: &mut ComponentCompilationJob<'_>) {
133133
/// - Safe function invocations
134134
fn needs_temporary_in_safe_access(expr: &IrExpression<'_>) -> bool {
135135
match expr {
136+
// Function calls always need temporaries (they may have side effects)
137+
IrExpression::ResolvedCall(_) => true,
136138
// Safe function invocations always need temporaries
137139
IrExpression::SafeInvokeFunction(_) => true,
138140
// Pipe bindings need temporaries (they may have side effects)
@@ -146,6 +148,12 @@ fn needs_temporary_in_safe_access(expr: &IrExpression<'_>) -> bool {
146148
needs_temporary_in_safe_access(&keyed.receiver)
147149
|| needs_temporary_in_safe_access(&keyed.index)
148150
}
151+
// Resolved property/keyed reads need to check their receiver
152+
IrExpression::ResolvedPropertyRead(prop) => needs_temporary_in_safe_access(&prop.receiver),
153+
IrExpression::ResolvedKeyedRead(keyed) => {
154+
needs_temporary_in_safe_access(&keyed.receiver)
155+
|| needs_temporary_in_safe_access(&keyed.key)
156+
}
149157
// Check AST expressions for function calls
150158
IrExpression::Ast(ast_expr) => needs_temporary_in_ast_expression(ast_expr),
151159
// Simple expressions don't need temporaries

0 commit comments

Comments
 (0)