25 |
25 |
26 package jdk.nashorn.internal.codegen; |
26 package jdk.nashorn.internal.codegen; |
27 |
27 |
28 import java.util.ArrayList; |
28 import java.util.ArrayList; |
29 import java.util.List; |
29 import java.util.List; |
|
30 |
30 import jdk.nashorn.internal.ir.CompileUnitHolder; |
31 import jdk.nashorn.internal.ir.CompileUnitHolder; |
31 import jdk.nashorn.internal.ir.FunctionNode; |
32 import jdk.nashorn.internal.ir.FunctionNode; |
32 import jdk.nashorn.internal.ir.LexicalContext; |
33 import jdk.nashorn.internal.ir.LexicalContext; |
33 import jdk.nashorn.internal.ir.LiteralNode; |
34 import jdk.nashorn.internal.ir.LiteralNode; |
34 import jdk.nashorn.internal.ir.LiteralNode.ArrayLiteralNode; |
35 import jdk.nashorn.internal.ir.LiteralNode.ArrayLiteralNode; |
35 import jdk.nashorn.internal.ir.LiteralNode.ArrayLiteralNode.ArrayUnit; |
|
36 import jdk.nashorn.internal.ir.Node; |
36 import jdk.nashorn.internal.ir.Node; |
|
37 import jdk.nashorn.internal.ir.ObjectNode; |
|
38 import jdk.nashorn.internal.ir.Splittable; |
37 import jdk.nashorn.internal.ir.visitor.NodeVisitor; |
39 import jdk.nashorn.internal.ir.visitor.NodeVisitor; |
38 |
40 |
39 /** |
41 /** |
40 * Base class for a node visitor that replaces {@link CompileUnit}s in {@link CompileUnitHolder}s. |
42 * Base class for a node visitor that replaces {@link CompileUnit}s in {@link CompileUnitHolder}s. |
41 */ |
43 */ |
68 |
70 |
69 @Override |
71 @Override |
70 public Node leaveLiteralNode(final LiteralNode<?> node) { |
72 public Node leaveLiteralNode(final LiteralNode<?> node) { |
71 if (node instanceof ArrayLiteralNode) { |
73 if (node instanceof ArrayLiteralNode) { |
72 final ArrayLiteralNode aln = (ArrayLiteralNode)node; |
74 final ArrayLiteralNode aln = (ArrayLiteralNode)node; |
73 if (aln.getUnits() == null) { |
75 if (aln.getSplitRanges() == null) { |
74 return node; |
76 return node; |
75 } |
77 } |
76 final List<ArrayUnit> newArrayUnits = new ArrayList<>(); |
78 final List<Splittable.SplitRange> newArrayUnits = new ArrayList<>(); |
77 for (final ArrayUnit au : aln.getUnits()) { |
79 for (final Splittable.SplitRange au : aln.getSplitRanges()) { |
78 newArrayUnits.add(new ArrayUnit(getExistingReplacement(au), au.getLo(), au.getHi())); |
80 newArrayUnits.add(new Splittable.SplitRange(getExistingReplacement(au), au.getLow(), au.getHigh())); |
79 } |
81 } |
80 return aln.setUnits(lc, newArrayUnits); |
82 return aln.setSplitRanges(lc, newArrayUnits); |
81 } |
83 } |
82 return node; |
84 return node; |
83 } |
85 } |
|
86 |
|
87 @Override |
|
88 public Node leaveObjectNode(final ObjectNode objectNode) { |
|
89 final List<Splittable.SplitRange> ranges = objectNode.getSplitRanges(); |
|
90 if (ranges != null) { |
|
91 final List<Splittable.SplitRange> newRanges = new ArrayList<>(); |
|
92 for (final Splittable.SplitRange range : ranges) { |
|
93 newRanges.add(new Splittable.SplitRange(getExistingReplacement(range), range.getLow(), range.getHigh())); |
|
94 } |
|
95 return objectNode.setSplitRanges(lc, newRanges); |
|
96 } |
|
97 return super.leaveObjectNode(objectNode); |
|
98 } |
84 } |
99 } |