Class Node

  • All Implemented Interfaces:
    java.lang.Iterable<Node>
    Direct Known Subclasses:
    AstNode

    public class Node
    extends java.lang.Object
    implements java.lang.Iterable<Node>
    This class implements the root of the intermediate representation.
    • Constructor Detail

      • Node

        public Node​(int nodeType)
      • Node

        public Node​(int nodeType,
                    Node child)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node right)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node mid,
                    Node right)
      • Node

        public Node​(int nodeType,
                    int line)
      • Node

        public Node​(int nodeType,
                    Node child,
                    int line)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node right,
                    int line)
      • Node

        public Node​(int nodeType,
                    Node left,
                    Node mid,
                    Node right,
                    int line)
    • Method Detail

      • newNumber

        public static Node newNumber​(double number)
      • newString

        public static Node newString​(java.lang.String str)
      • newString

        public static Node newString​(int type,
                                     java.lang.String str)
      • getType

        public int getType()
      • setType

        public Node setType​(int type)
        Sets the node type and returns this node.
      • getJsDoc

        public java.lang.String getJsDoc()
        Gets the JsDoc comment string attached to this node.
        Returns:
        the comment string or null if no JsDoc is attached to this node
      • getJsDocNode

        public Comment getJsDocNode()
        Gets the JsDoc Comment object attached to this node.
        Returns:
        the Comment or null if no JsDoc is attached to this node
      • setJsDocNode

        public void setJsDocNode​(Comment jsdocNode)
        Sets the JsDoc comment string attached to this node.
      • hasChildren

        public boolean hasChildren()
      • getFirstChild

        public Node getFirstChild()
      • getLastChild

        public Node getLastChild()
      • getNext

        public Node getNext()
      • getChildBefore

        public Node getChildBefore​(Node child)
      • getLastSibling

        public Node getLastSibling()
      • addChildToFront

        public void addChildToFront​(Node child)
      • addChildToBack

        public void addChildToBack​(Node child)
      • addChildrenToFront

        public void addChildrenToFront​(Node children)
      • addChildrenToBack

        public void addChildrenToBack​(Node children)
      • addChildBefore

        public void addChildBefore​(Node newChild,
                                   Node node)
        Add 'child' before 'node'.
      • addChildAfter

        public void addChildAfter​(Node newChild,
                                  Node node)
        Add 'child' after 'node'.
      • removeChild

        public void removeChild​(Node child)
      • replaceChild

        public void replaceChild​(Node child,
                                 Node newChild)
      • replaceChildAfter

        public void replaceChildAfter​(Node prevChild,
                                      Node newChild)
      • removeChildren

        public void removeChildren()
      • iterator

        public java.util.Iterator<Node> iterator()
        Returns an Iterator over the node's children.
        Specified by:
        iterator in interface java.lang.Iterable<Node>
      • removeProp

        public void removeProp​(int propType)
      • getProp

        public java.lang.Object getProp​(int propType)
      • getIntProp

        public int getIntProp​(int propType,
                              int defaultValue)
      • getExistingIntProp

        public int getExistingIntProp​(int propType)
      • putProp

        public void putProp​(int propType,
                            java.lang.Object prop)
      • putIntProp

        public void putIntProp​(int propType,
                               int prop)
      • getLineno

        public int getLineno()
        Return the line number recorded for this node.
        Returns:
        the line number
      • setLineno

        public void setLineno​(int lineno)
      • getDouble

        public final double getDouble()
        Can only be called when getType() == Token.NUMBER
      • setDouble

        public final void setDouble​(double number)
      • getString

        public final java.lang.String getString()
        Can only be called when node has String context.
      • setString

        public final void setString​(java.lang.String s)
        Can only be called when node has String context.
      • getScope

        public Scope getScope()
        Can only be called when node has String context.
      • setScope

        public void setScope​(Scope s)
        Can only be called when node has String context.
      • newTarget

        public static Node newTarget()
      • labelId

        public final int labelId()
      • labelId

        public void labelId​(int labelId)
      • hasConsistentReturnUsage

        public boolean hasConsistentReturnUsage()
        Checks that every return usage in a function body is consistent with the requirements of strict-mode.
        Returns:
        true if the function satisfies strict mode requirement.
      • hasSideEffects

        public boolean hasSideEffects()
      • resetTargets

        public void resetTargets()
        Recursively unlabel every TARGET or YIELD node in the tree. This is used and should only be used for inlining finally blocks where jsr instructions used to be. It is somewhat hackish, but implementing a clone() operation would take much, much more effort. This solution works for inlining finally blocks because you should never be writing any given block to the class file simultaneously. Therefore, an unlabeling will never occur in the middle of a block.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • toStringTree

        public java.lang.String toStringTree​(ScriptNode treeTop)