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;
|