src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/Lower.java

Print this page




  28 import static jdk.nashorn.internal.codegen.CompilerConstants.EVAL;
  29 import static jdk.nashorn.internal.codegen.CompilerConstants.RETURN;
  30 import static jdk.nashorn.internal.ir.Expression.isAlwaysTrue;
  31 
  32 import java.util.ArrayList;
  33 import java.util.Arrays;
  34 import java.util.Collections;
  35 import java.util.List;
  36 import java.util.ListIterator;
  37 import java.util.regex.Pattern;
  38 import jdk.nashorn.internal.ir.AccessNode;
  39 import jdk.nashorn.internal.ir.BaseNode;
  40 import jdk.nashorn.internal.ir.BinaryNode;
  41 import jdk.nashorn.internal.ir.Block;
  42 import jdk.nashorn.internal.ir.BlockLexicalContext;
  43 import jdk.nashorn.internal.ir.BlockStatement;
  44 import jdk.nashorn.internal.ir.BreakNode;
  45 import jdk.nashorn.internal.ir.CallNode;
  46 import jdk.nashorn.internal.ir.CaseNode;
  47 import jdk.nashorn.internal.ir.CatchNode;

  48 import jdk.nashorn.internal.ir.ContinueNode;
  49 import jdk.nashorn.internal.ir.EmptyNode;
  50 import jdk.nashorn.internal.ir.Expression;
  51 import jdk.nashorn.internal.ir.ExpressionStatement;
  52 import jdk.nashorn.internal.ir.ForNode;
  53 import jdk.nashorn.internal.ir.FunctionNode;
  54 import jdk.nashorn.internal.ir.FunctionNode.CompilationState;
  55 import jdk.nashorn.internal.ir.IdentNode;
  56 import jdk.nashorn.internal.ir.IfNode;
  57 import jdk.nashorn.internal.ir.IndexNode;
  58 import jdk.nashorn.internal.ir.JumpStatement;
  59 import jdk.nashorn.internal.ir.JumpToInlinedFinally;
  60 import jdk.nashorn.internal.ir.LabelNode;
  61 import jdk.nashorn.internal.ir.LexicalContext;
  62 import jdk.nashorn.internal.ir.LiteralNode;
  63 import jdk.nashorn.internal.ir.LiteralNode.PrimitiveLiteralNode;
  64 import jdk.nashorn.internal.ir.LoopNode;
  65 import jdk.nashorn.internal.ir.Node;
  66 import jdk.nashorn.internal.ir.ReturnNode;
  67 import jdk.nashorn.internal.ir.RuntimeNode;


 164 
 165     @Override
 166     public boolean enterBreakNode(final BreakNode breakNode) {
 167         addStatement(breakNode);
 168         return false;
 169     }
 170 
 171     @Override
 172     public Node leaveCallNode(final CallNode callNode) {
 173         return checkEval(callNode.setFunction(markerFunction(callNode.getFunction())));
 174     }
 175 
 176     @Override
 177     public Node leaveCatchNode(final CatchNode catchNode) {
 178         return addStatement(catchNode);
 179     }
 180 
 181     @Override
 182     public boolean enterContinueNode(final ContinueNode continueNode) {
 183         addStatement(continueNode);









 184         return false;
 185     }
 186 
 187     @Override
 188     public boolean enterJumpToInlinedFinally(final JumpToInlinedFinally jumpToInlinedFinally) {
 189         addStatement(jumpToInlinedFinally);
 190         return false;
 191     }
 192 
 193     @Override
 194     public boolean enterEmptyNode(final EmptyNode emptyNode) {
 195         return false;
 196     }
 197 
 198     @Override
 199     public Node leaveIndexNode(final IndexNode indexNode) {
 200         final String name = getConstantPropertyName(indexNode.getIndex());
 201         if (name != null) {
 202             // If index node is a constant property name convert index node to access node.
 203             assert Token.descType(indexNode.getToken()) == TokenType.LBRACKET;




  28 import static jdk.nashorn.internal.codegen.CompilerConstants.EVAL;
  29 import static jdk.nashorn.internal.codegen.CompilerConstants.RETURN;
  30 import static jdk.nashorn.internal.ir.Expression.isAlwaysTrue;
  31 
  32 import java.util.ArrayList;
  33 import java.util.Arrays;
  34 import java.util.Collections;
  35 import java.util.List;
  36 import java.util.ListIterator;
  37 import java.util.regex.Pattern;
  38 import jdk.nashorn.internal.ir.AccessNode;
  39 import jdk.nashorn.internal.ir.BaseNode;
  40 import jdk.nashorn.internal.ir.BinaryNode;
  41 import jdk.nashorn.internal.ir.Block;
  42 import jdk.nashorn.internal.ir.BlockLexicalContext;
  43 import jdk.nashorn.internal.ir.BlockStatement;
  44 import jdk.nashorn.internal.ir.BreakNode;
  45 import jdk.nashorn.internal.ir.CallNode;
  46 import jdk.nashorn.internal.ir.CaseNode;
  47 import jdk.nashorn.internal.ir.CatchNode;
  48 import jdk.nashorn.internal.ir.DebuggerNode;
  49 import jdk.nashorn.internal.ir.ContinueNode;
  50 import jdk.nashorn.internal.ir.EmptyNode;
  51 import jdk.nashorn.internal.ir.Expression;
  52 import jdk.nashorn.internal.ir.ExpressionStatement;
  53 import jdk.nashorn.internal.ir.ForNode;
  54 import jdk.nashorn.internal.ir.FunctionNode;
  55 import jdk.nashorn.internal.ir.FunctionNode.CompilationState;
  56 import jdk.nashorn.internal.ir.IdentNode;
  57 import jdk.nashorn.internal.ir.IfNode;
  58 import jdk.nashorn.internal.ir.IndexNode;
  59 import jdk.nashorn.internal.ir.JumpStatement;
  60 import jdk.nashorn.internal.ir.JumpToInlinedFinally;
  61 import jdk.nashorn.internal.ir.LabelNode;
  62 import jdk.nashorn.internal.ir.LexicalContext;
  63 import jdk.nashorn.internal.ir.LiteralNode;
  64 import jdk.nashorn.internal.ir.LiteralNode.PrimitiveLiteralNode;
  65 import jdk.nashorn.internal.ir.LoopNode;
  66 import jdk.nashorn.internal.ir.Node;
  67 import jdk.nashorn.internal.ir.ReturnNode;
  68 import jdk.nashorn.internal.ir.RuntimeNode;


 165 
 166     @Override
 167     public boolean enterBreakNode(final BreakNode breakNode) {
 168         addStatement(breakNode);
 169         return false;
 170     }
 171 
 172     @Override
 173     public Node leaveCallNode(final CallNode callNode) {
 174         return checkEval(callNode.setFunction(markerFunction(callNode.getFunction())));
 175     }
 176 
 177     @Override
 178     public Node leaveCatchNode(final CatchNode catchNode) {
 179         return addStatement(catchNode);
 180     }
 181 
 182     @Override
 183     public boolean enterContinueNode(final ContinueNode continueNode) {
 184         addStatement(continueNode);
 185         return false;
 186     }
 187 
 188     @Override
 189     public boolean enterDebuggerNode(final DebuggerNode debuggerNode) {
 190         final int line = debuggerNode.getLineNumber();
 191         final long token = debuggerNode.getToken();
 192         final int finish = debuggerNode.getFinish();
 193         addStatement(new ExpressionStatement(line, token, finish, new RuntimeNode(token, finish, RuntimeNode.Request.DEBUGGER, new ArrayList<Expression>())));
 194         return false;
 195     }
 196 
 197     @Override
 198     public boolean enterJumpToInlinedFinally(final JumpToInlinedFinally jumpToInlinedFinally) {
 199         addStatement(jumpToInlinedFinally);
 200         return false;
 201     }
 202 
 203     @Override
 204     public boolean enterEmptyNode(final EmptyNode emptyNode) {
 205         return false;
 206     }
 207 
 208     @Override
 209     public Node leaveIndexNode(final IndexNode indexNode) {
 210         final String name = getConstantPropertyName(indexNode.getIndex());
 211         if (name != null) {
 212             // If index node is a constant property name convert index node to access node.
 213             assert Token.descType(indexNode.getToken()) == TokenType.LBRACKET;