21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.nashorn.internal.ir.debug;
27
28 import static jdk.nashorn.internal.runtime.Source.sourceFor;
29
30 import java.util.ArrayList;
31 import java.util.List;
32 import jdk.nashorn.internal.ir.AccessNode;
33 import jdk.nashorn.internal.ir.BinaryNode;
34 import jdk.nashorn.internal.ir.Block;
35 import jdk.nashorn.internal.ir.BlockStatement;
36 import jdk.nashorn.internal.ir.BreakNode;
37 import jdk.nashorn.internal.ir.CallNode;
38 import jdk.nashorn.internal.ir.CaseNode;
39 import jdk.nashorn.internal.ir.CatchNode;
40 import jdk.nashorn.internal.ir.ContinueNode;
41 import jdk.nashorn.internal.ir.EmptyNode;
42 import jdk.nashorn.internal.ir.Expression;
43 import jdk.nashorn.internal.ir.ExpressionStatement;
44 import jdk.nashorn.internal.ir.ForNode;
45 import jdk.nashorn.internal.ir.FunctionNode;
46 import jdk.nashorn.internal.ir.IdentNode;
47 import jdk.nashorn.internal.ir.IfNode;
48 import jdk.nashorn.internal.ir.IndexNode;
49 import jdk.nashorn.internal.ir.JoinPredecessorExpression;
50 import jdk.nashorn.internal.ir.LabelNode;
51 import jdk.nashorn.internal.ir.LexicalContext;
52 import jdk.nashorn.internal.ir.LiteralNode;
53 import jdk.nashorn.internal.ir.Node;
54 import jdk.nashorn.internal.ir.ObjectNode;
55 import jdk.nashorn.internal.ir.PropertyNode;
56 import jdk.nashorn.internal.ir.ReturnNode;
57 import jdk.nashorn.internal.ir.RuntimeNode;
58 import jdk.nashorn.internal.ir.SplitNode;
59 import jdk.nashorn.internal.ir.Statement;
60 import jdk.nashorn.internal.ir.SwitchNode;
272
273 @Override
274 public boolean enterContinueNode(final ContinueNode continueNode) {
275 enterDefault(continueNode);
276
277 type("ContinueStatement");
278 comma();
279
280 final String label = continueNode.getLabelName();
281 if(label != null) {
282 property("label", label);
283 } else {
284 property("label");
285 nullValue();
286 }
287
288 return leave();
289 }
290
291 @Override
292 public boolean enterEmptyNode(final EmptyNode emptyNode) {
293 enterDefault(emptyNode);
294
295 type("EmptyStatement");
296
297 return leave();
298 }
299
300 @Override
301 public boolean enterExpressionStatement(final ExpressionStatement expressionStatement) {
302 // handle debugger statement
303 final Node expression = expressionStatement.getExpression();
304 if (expression instanceof RuntimeNode) {
305 expression.accept(this);
306 return false;
307 }
308
309 enterDefault(expressionStatement);
310
311 type("ExpressionStatement");
312 comma();
313
314 property("expression");
315 expression.accept(this);
316
317 return leave();
318 }
319
320 @Override
321 public boolean enterBlockStatement(final BlockStatement blockStatement) {
322 enterDefault(blockStatement);
323
324 type("BlockStatement");
325 comma();
326
327 property("block");
328 blockStatement.getBlock().accept(this);
329
330 return leave();
331 }
332
333 @Override
334 public boolean enterForNode(final ForNode forNode) {
335 enterDefault(forNode);
336
337 if (forNode.isForIn() || (forNode.isForEach() && forNode.getInit() != null)) {
338 type("ForInStatement");
339 comma();
340
341 final Node init = forNode.getInit();
342 assert init != null;
343 property("left");
344 init.accept(this);
345 comma();
346
347 final Node modify = forNode.getModify();
348 assert modify != null;
349 property("right");
660 @Override
661 public boolean enterReturnNode(final ReturnNode returnNode) {
662 enterDefault(returnNode);
663
664 type("ReturnStatement");
665 comma();
666
667 final Node arg = returnNode.getExpression();
668 property("argument");
669 if (arg != null) {
670 arg.accept(this);
671 } else {
672 nullValue();
673 }
674
675 return leave();
676 }
677
678 @Override
679 public boolean enterRuntimeNode(final RuntimeNode runtimeNode) {
680 final RuntimeNode.Request req = runtimeNode.getRequest();
681
682 if (req == RuntimeNode.Request.DEBUGGER) {
683 enterDefault(runtimeNode);
684 type("DebuggerStatement");
685 return leave();
686 }
687
688 return false;
689 }
690
691 @Override
692 public boolean enterSplitNode(final SplitNode splitNode) {
693 return false;
694 }
695
696 @Override
697 public boolean enterSwitchNode(final SwitchNode switchNode) {
698 enterDefault(switchNode);
699
700 type("SwitchStatement");
701 comma();
702
703 property("discriminant");
704 switchNode.getExpression().accept(this);
705 comma();
706
707 array("cases", switchNode.getCases());
708
709 return leave();
710 }
711
712 @Override
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.nashorn.internal.ir.debug;
27
28 import static jdk.nashorn.internal.runtime.Source.sourceFor;
29
30 import java.util.ArrayList;
31 import java.util.List;
32 import jdk.nashorn.internal.ir.AccessNode;
33 import jdk.nashorn.internal.ir.BinaryNode;
34 import jdk.nashorn.internal.ir.Block;
35 import jdk.nashorn.internal.ir.BlockStatement;
36 import jdk.nashorn.internal.ir.BreakNode;
37 import jdk.nashorn.internal.ir.CallNode;
38 import jdk.nashorn.internal.ir.CaseNode;
39 import jdk.nashorn.internal.ir.CatchNode;
40 import jdk.nashorn.internal.ir.ContinueNode;
41 import jdk.nashorn.internal.ir.DebuggerNode;
42 import jdk.nashorn.internal.ir.EmptyNode;
43 import jdk.nashorn.internal.ir.Expression;
44 import jdk.nashorn.internal.ir.ExpressionStatement;
45 import jdk.nashorn.internal.ir.ForNode;
46 import jdk.nashorn.internal.ir.FunctionNode;
47 import jdk.nashorn.internal.ir.IdentNode;
48 import jdk.nashorn.internal.ir.IfNode;
49 import jdk.nashorn.internal.ir.IndexNode;
50 import jdk.nashorn.internal.ir.JoinPredecessorExpression;
51 import jdk.nashorn.internal.ir.LabelNode;
52 import jdk.nashorn.internal.ir.LexicalContext;
53 import jdk.nashorn.internal.ir.LiteralNode;
54 import jdk.nashorn.internal.ir.Node;
55 import jdk.nashorn.internal.ir.ObjectNode;
56 import jdk.nashorn.internal.ir.PropertyNode;
57 import jdk.nashorn.internal.ir.ReturnNode;
58 import jdk.nashorn.internal.ir.RuntimeNode;
59 import jdk.nashorn.internal.ir.SplitNode;
60 import jdk.nashorn.internal.ir.Statement;
61 import jdk.nashorn.internal.ir.SwitchNode;
273
274 @Override
275 public boolean enterContinueNode(final ContinueNode continueNode) {
276 enterDefault(continueNode);
277
278 type("ContinueStatement");
279 comma();
280
281 final String label = continueNode.getLabelName();
282 if(label != null) {
283 property("label", label);
284 } else {
285 property("label");
286 nullValue();
287 }
288
289 return leave();
290 }
291
292 @Override
293 public boolean enterDebuggerNode(final DebuggerNode debuggerNode) {
294 enterDefault(debuggerNode);
295 type("DebuggerStatement");
296 return leave();
297 }
298
299 @Override
300 public boolean enterEmptyNode(final EmptyNode emptyNode) {
301 enterDefault(emptyNode);
302
303 type("EmptyStatement");
304
305 return leave();
306 }
307
308 @Override
309 public boolean enterExpressionStatement(final ExpressionStatement expressionStatement) {
310 // handle debugger statement
311 final Node expression = expressionStatement.getExpression();
312 if (expression instanceof RuntimeNode) {
313 assert false : "should not reach here: RuntimeNode";
314 return false;
315 }
316
317 enterDefault(expressionStatement);
318
319 type("ExpressionStatement");
320 comma();
321
322 property("expression");
323 expression.accept(this);
324
325 return leave();
326 }
327
328 @Override
329 public boolean enterBlockStatement(final BlockStatement blockStatement) {
330 if (blockStatement.isSynthetic()) {
331 final Block blk = blockStatement.getBlock();
332 blk.getStatements().get(0).accept(this);
333 return false;
334 }
335
336 enterDefault(blockStatement);
337
338 type("BlockStatement");
339 comma();
340
341 array("body", blockStatement.getBlock().getStatements());
342 return leave();
343 }
344
345 @Override
346 public boolean enterForNode(final ForNode forNode) {
347 enterDefault(forNode);
348
349 if (forNode.isForIn() || (forNode.isForEach() && forNode.getInit() != null)) {
350 type("ForInStatement");
351 comma();
352
353 final Node init = forNode.getInit();
354 assert init != null;
355 property("left");
356 init.accept(this);
357 comma();
358
359 final Node modify = forNode.getModify();
360 assert modify != null;
361 property("right");
672 @Override
673 public boolean enterReturnNode(final ReturnNode returnNode) {
674 enterDefault(returnNode);
675
676 type("ReturnStatement");
677 comma();
678
679 final Node arg = returnNode.getExpression();
680 property("argument");
681 if (arg != null) {
682 arg.accept(this);
683 } else {
684 nullValue();
685 }
686
687 return leave();
688 }
689
690 @Override
691 public boolean enterRuntimeNode(final RuntimeNode runtimeNode) {
692 assert false : "should not reach here: RuntimeNode";
693 return false;
694 }
695
696 @Override
697 public boolean enterSplitNode(final SplitNode splitNode) {
698 assert false : "should not reach here: SplitNode";
699 return false;
700 }
701
702 @Override
703 public boolean enterSwitchNode(final SwitchNode switchNode) {
704 enterDefault(switchNode);
705
706 type("SwitchStatement");
707 comma();
708
709 property("discriminant");
710 switchNode.getExpression().accept(this);
711 comma();
712
713 array("cases", switchNode.getCases());
714
715 return leave();
716 }
717
718 @Override
|