Important: Do not use outside of Soy code (treat as superpackage-private).
{@link #exec} must be called on a {@code TemplateNode} or an ancestor of a{@code TemplateNode}.
More specifically, a dependee may be an ancestor of the depender or an older sibling of either the depender or an ancestor of the depender. In the case of a dependee that is an ancestor of the depender, the depender must not be moved outside of the subtree of the dependee. In the case of a dependee that is an older sibling of either the depender or an ancestor of the depender, this same relationship must be maintained when the depender is moved within the tree.
Dependees are one of: (a) TemplateNode: Its nodes must remain in its subtree. (b) SplitLevelTopNode: Its immediate children (the bottom level) must remain under it. (c) ConditionalBlockNode other than LoopNode: It may never be executed, and we can't guarantee that any of the references made in a node's subtree will be defined in the case that the block is not executed, and furthermore, even if the node's subtree has no references, we don't want to needlessly process the node's subtree when the block is not executed. We make an exception for LoopNodes because we don't want to lose the ability to pull invariants out of loops. (d) LocalVarNode: Its subtree or younger siblings may reference its local variable. (e) MsgBlockNode: Any change to its immediate children would change the message to be translated, which would be incorrect. @author Kai Huang
|
|