@@ -1599,6 +1599,175 @@ pub fn transform_expressions_in_create_op<'a, F>(
15991599 }
16001600}
16011601
1602+ /// Visit all expressions in an update operation (read-only).
1603+ pub fn visit_expressions_in_update_op < ' a , F > (
1604+ op : & UpdateOp < ' a > ,
1605+ visitor : & F ,
1606+ flags : VisitorContextFlag ,
1607+ ) where
1608+ F : Fn ( & IrExpression < ' a > , VisitorContextFlag ) ,
1609+ {
1610+ match op {
1611+ UpdateOp :: Property ( op) => {
1612+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1613+ }
1614+ UpdateOp :: StyleProp ( op) => {
1615+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1616+ }
1617+ UpdateOp :: ClassProp ( op) => {
1618+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1619+ }
1620+ UpdateOp :: StyleMap ( op) => {
1621+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1622+ }
1623+ UpdateOp :: ClassMap ( op) => {
1624+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1625+ }
1626+ UpdateOp :: Attribute ( op) => {
1627+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1628+ }
1629+ UpdateOp :: DomProperty ( op) => {
1630+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1631+ }
1632+ UpdateOp :: TwoWayProperty ( op) => {
1633+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1634+ }
1635+ UpdateOp :: Binding ( op) => {
1636+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1637+ }
1638+ UpdateOp :: InterpolateText ( op) => {
1639+ visit_expressions_in_expression ( & op. interpolation , visitor, flags) ;
1640+ }
1641+ UpdateOp :: Variable ( op) => {
1642+ visit_expressions_in_expression ( & op. initializer , visitor, flags) ;
1643+ }
1644+ UpdateOp :: StoreLet ( op) => {
1645+ visit_expressions_in_expression ( & op. value , visitor, flags) ;
1646+ }
1647+ UpdateOp :: Conditional ( op) => {
1648+ if let Some ( ref test) = op. test {
1649+ visit_expressions_in_expression ( test, visitor, flags) ;
1650+ }
1651+ for cond in op. conditions . iter ( ) {
1652+ if let Some ( ref expr) = cond. expr {
1653+ visit_expressions_in_expression ( expr, visitor, flags) ;
1654+ }
1655+ }
1656+ if let Some ( ref processed) = op. processed {
1657+ visit_expressions_in_expression ( processed, visitor, flags) ;
1658+ }
1659+ if let Some ( ref ctx) = op. context_value {
1660+ visit_expressions_in_expression ( ctx, visitor, flags) ;
1661+ }
1662+ }
1663+ UpdateOp :: Repeater ( op) => {
1664+ visit_expressions_in_expression ( & op. collection , visitor, flags) ;
1665+ }
1666+ UpdateOp :: AnimationBinding ( op) => {
1667+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1668+ }
1669+ UpdateOp :: Control ( op) => {
1670+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1671+ }
1672+ UpdateOp :: I18nExpression ( op) => {
1673+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1674+ }
1675+ UpdateOp :: DeferWhen ( op) => {
1676+ visit_expressions_in_expression ( & op. condition , visitor, flags) ;
1677+ }
1678+ // Operations without expressions
1679+ UpdateOp :: ListEnd ( _)
1680+ | UpdateOp :: Advance ( _)
1681+ | UpdateOp :: I18nApply ( _)
1682+ | UpdateOp :: Animation ( _)
1683+ | UpdateOp :: Statement ( _) => { }
1684+ }
1685+ }
1686+
1687+ /// Visit all expressions in a create operation (read-only).
1688+ pub fn visit_expressions_in_create_op < ' a , F > (
1689+ op : & CreateOp < ' a > ,
1690+ visitor : & F ,
1691+ flags : VisitorContextFlag ,
1692+ ) where
1693+ F : Fn ( & IrExpression < ' a > , VisitorContextFlag ) ,
1694+ {
1695+ match op {
1696+ CreateOp :: Variable ( op) => {
1697+ visit_expressions_in_expression ( & op. initializer , visitor, flags) ;
1698+ }
1699+ CreateOp :: Listener ( op) => {
1700+ if let Some ( handler_expr) = & op. handler_expression {
1701+ visit_expressions_in_expression ( handler_expr, visitor, flags) ;
1702+ }
1703+ let child_flags = flags. union ( VisitorContextFlag :: IN_CHILD_OPERATION ) ;
1704+ for handler_op in op. handler_ops . iter ( ) {
1705+ visit_expressions_in_update_op ( handler_op, visitor, child_flags) ;
1706+ }
1707+ }
1708+ CreateOp :: TwoWayListener ( op) => {
1709+ let child_flags = flags. union ( VisitorContextFlag :: IN_CHILD_OPERATION ) ;
1710+ for handler_op in op. handler_ops . iter ( ) {
1711+ visit_expressions_in_update_op ( handler_op, visitor, child_flags) ;
1712+ }
1713+ }
1714+ CreateOp :: AnimationListener ( op) => {
1715+ let child_flags = flags. union ( VisitorContextFlag :: IN_CHILD_OPERATION ) ;
1716+ for handler_op in op. handler_ops . iter ( ) {
1717+ visit_expressions_in_update_op ( handler_op, visitor, child_flags) ;
1718+ }
1719+ }
1720+ CreateOp :: AnimationString ( op) => {
1721+ visit_expressions_in_expression ( & op. expression , visitor, flags) ;
1722+ }
1723+ CreateOp :: ExtractedAttribute ( op) => {
1724+ if let Some ( ref value) = op. value {
1725+ visit_expressions_in_expression ( value, visitor, flags) ;
1726+ }
1727+ }
1728+ CreateOp :: DeferOn ( op) => {
1729+ if let Some ( ref options) = op. options {
1730+ visit_expressions_in_expression ( options, visitor, flags) ;
1731+ }
1732+ }
1733+ CreateOp :: RepeaterCreate ( op) => {
1734+ visit_expressions_in_expression ( & op. track , visitor, flags) ;
1735+ }
1736+ // Operations without expressions
1737+ CreateOp :: Conditional ( _)
1738+ | CreateOp :: ListEnd ( _)
1739+ | CreateOp :: ElementStart ( _)
1740+ | CreateOp :: Element ( _)
1741+ | CreateOp :: ElementEnd ( _)
1742+ | CreateOp :: Template ( _)
1743+ | CreateOp :: ContainerStart ( _)
1744+ | CreateOp :: Container ( _)
1745+ | CreateOp :: ContainerEnd ( _)
1746+ | CreateOp :: DisableBindings ( _)
1747+ | CreateOp :: EnableBindings ( _)
1748+ | CreateOp :: Text ( _)
1749+ | CreateOp :: Pipe ( _)
1750+ | CreateOp :: Defer ( _)
1751+ | CreateOp :: I18nMessage ( _)
1752+ | CreateOp :: Namespace ( _)
1753+ | CreateOp :: ProjectionDef ( _)
1754+ | CreateOp :: Projection ( _)
1755+ | CreateOp :: DeclareLet ( _)
1756+ | CreateOp :: I18nStart ( _)
1757+ | CreateOp :: I18n ( _)
1758+ | CreateOp :: I18nEnd ( _)
1759+ | CreateOp :: IcuStart ( _)
1760+ | CreateOp :: IcuEnd ( _)
1761+ | CreateOp :: IcuPlaceholder ( _)
1762+ | CreateOp :: I18nContext ( _)
1763+ | CreateOp :: I18nAttributes ( _)
1764+ | CreateOp :: SourceLocation ( _)
1765+ | CreateOp :: ConditionalBranch ( _)
1766+ | CreateOp :: ControlCreate ( _)
1767+ | CreateOp :: Statement ( _) => { }
1768+ }
1769+ }
1770+
16021771// ============================================================================
16031772// Angular Expression Cloning
16041773// ============================================================================
0 commit comments