nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/ReplaceCompileUnits.java
changeset 32781 d8f34ffbbc7a
parent 32692 8f60bd284bf4
child 32888 24f99be3d5ab
equal deleted inserted replaced
32712:f61a63b7d1e5 32781:d8f34ffbbc7a
    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 }