Class ScriptNode

All Implemented Interfaces:
Comparable<AstNode>, Iterable<Node>
Direct Known Subclasses:
AstRoot, FunctionNode

public class ScriptNode extends Scope
Base type for AstRoot and FunctionNode nodes, which need to collect much of the same information.
  • Field Details

    • encodedSourceStart

      private int encodedSourceStart
    • encodedSourceEnd

      private int encodedSourceEnd
    • sourceName

      private String sourceName
    • encodedSource

      private String encodedSource
    • endLineno

      private int endLineno
    • functions

      private List<FunctionNode> functions
    • regexps

      private List<RegExpLiteral> regexps
    • templateLiterals

      private List<TemplateLiteral> templateLiterals
    • EMPTY_LIST

      private List<FunctionNode> EMPTY_LIST
    • symbols

      private List<Symbol> symbols
    • paramCount

      private int paramCount
    • variableNames

      private String[] variableNames
    • isConsts

      private boolean[] isConsts
    • compilerData

      private Object compilerData
    • tempNumber

      private int tempNumber
    • inStrictMode

      private boolean inStrictMode
  • Constructor Details

    • ScriptNode

      public ScriptNode()
    • ScriptNode

      public ScriptNode(int pos)
  • Method Details

    • getSourceName

      public String getSourceName()
      Returns the URI, path or descriptive text indicating the origin of this script's source code.
    • setSourceName

      public void setSourceName(String sourceName)
      Sets the URI, path or descriptive text indicating the origin of this script's source code.
    • getEncodedSourceStart

      public int getEncodedSourceStart()
      Returns the start offset of the encoded source. Only valid if getEncodedSource() returns non-null.
    • setEncodedSourceStart

      public void setEncodedSourceStart(int start)
      Used by code generator.
      See Also:
    • getEncodedSourceEnd

      public int getEncodedSourceEnd()
      Returns the end offset of the encoded source. Only valid if getEncodedSource() returns non-null.
    • setEncodedSourceEnd

      public void setEncodedSourceEnd(int end)
      Used by code generator.
      See Also:
    • setEncodedSourceBounds

      public void setEncodedSourceBounds(int start, int end)
      Used by code generator.
      See Also:
    • setEncodedSource

      public void setEncodedSource(String encodedSource)
      Used by the code generator.
      See Also:
    • getEncodedSource

      public String getEncodedSource()
      Returns a canonical version of the source for this script or function, for use in implementing the Object.toSource method of JavaScript objects. This source encoding is only recorded during code generation. It must be passed back to Decompiler.decompile(java.lang.String, int, org.mozilla.javascript.UintMap) to construct the human-readable source string.

      Given a parsed AST, you can always convert it to source code using the AstNode.toSource(int) method, although it's not guaranteed to produce exactly the same results as Object.toSource with respect to formatting, parenthesization and other details.

      Returns:
      the encoded source, or null if it was not recorded.
    • getBaseLineno

      public int getBaseLineno()
    • setBaseLineno

      public void setBaseLineno(int lineno)
      Sets base (starting) line number for this script or function. This is a one-time operation, and throws an exception if the line number has already been set.
    • getEndLineno

      public int getEndLineno()
    • setEndLineno

      public void setEndLineno(int lineno)
    • getFunctionCount

      public int getFunctionCount()
    • getFunctionNode

      public FunctionNode getFunctionNode(int i)
    • getFunctions

      public List<FunctionNode> getFunctions()
    • addFunction

      public int addFunction(FunctionNode fnNode)
      Adds a FunctionNode to the functions table for codegen. Does not set the parent of the node.
      Returns:
      the index of the function within its parent
    • getRegexpCount

      public int getRegexpCount()
    • getRegexpString

      public String getRegexpString(int index)
    • getRegexpFlags

      public String getRegexpFlags(int index)
    • addRegExp

      public void addRegExp(RegExpLiteral re)
      Called by IRFactory to add a RegExp to the regexp table.
    • getTemplateLiteralCount

      public int getTemplateLiteralCount()
    • getTemplateLiteralStrings

      public List<TemplateCharacters> getTemplateLiteralStrings(int index)
    • addTemplateLiteral

      public void addTemplateLiteral(TemplateLiteral templateLiteral)
      Called by IRFactory to add a Template Literal to the templateLiterals table.
    • getIndexForNameNode

      public int getIndexForNameNode(Node nameNode)
    • getParamOrVarName

      public String getParamOrVarName(int index)
    • getParamCount

      public int getParamCount()
    • getParamAndVarCount

      public int getParamAndVarCount()
    • getParamAndVarNames

      public String[] getParamAndVarNames()
    • getParamAndVarConst

      public boolean[] getParamAndVarConst()
    • addSymbol

      void addSymbol(Symbol symbol)
    • getSymbols

      public List<Symbol> getSymbols()
    • setSymbols

      public void setSymbols(List<Symbol> symbols)
    • flattenSymbolTable

      public void flattenSymbolTable(boolean flattenAllTables)
      Assign every symbol a unique integer index. Generate arrays of variable names and constness that can be indexed by those indices.
      Parameters:
      flattenAllTables - if true, flatten all symbol tables, included nested block scope symbol tables. If false, just flatten the script's or function's symbol table.
    • getCompilerData

      public Object getCompilerData()
    • setCompilerData

      public void setCompilerData(Object data)
    • getNextTempName

      public String getNextTempName()
    • setInStrictMode

      public void setInStrictMode(boolean inStrictMode)
    • isInStrictMode

      public boolean isInStrictMode()
    • visit

      public void visit(NodeVisitor v)
      Description copied from class: Jump
      Jumps are only used directly during code generation, and do not support this interface.
      Overrides:
      visit in class Scope
      Parameters:
      v - the object to call with this node and its children