src/jdk/nashorn/internal/ir/LiteralNode.java

changeset 395
9396e42bae4f
parent 310
818946884410
child 415
edca88d3a03e
     1.1 --- a/src/jdk/nashorn/internal/ir/LiteralNode.java	Tue Jul 02 13:50:19 2013 +0200
     1.2 +++ b/src/jdk/nashorn/internal/ir/LiteralNode.java	Tue Jul 02 14:50:39 2013 +0200
     1.3 @@ -621,8 +621,10 @@
     1.4              elementType = Type.INT;
     1.5              analyzeElements();
     1.6  
     1.7 -            if (elementType == Type.INT) {
     1.8 +            if (elementType.isInteger()) {
     1.9                  presetIntArray();
    1.10 +            } else if (elementType.isLong()) {
    1.11 +                presetLongArray();
    1.12              } else if (elementType.isNumeric()) {
    1.13                  presetNumberArray();
    1.14              } else {
    1.15 @@ -649,6 +651,25 @@
    1.16              postsets = Arrays.copyOf(computed, nComputed);
    1.17          }
    1.18  
    1.19 +        private void presetLongArray() {
    1.20 +            final long[] array = new long[value.length];
    1.21 +            final int[] computed = new int[value.length];
    1.22 +            int nComputed = 0;
    1.23 +
    1.24 +            for (int i = 0; i < value.length; i++) {
    1.25 +                final Object element = objectAsConstant(value[i]);
    1.26 +
    1.27 +                if (element instanceof Number) {
    1.28 +                    array[i] = ((Number)element).longValue();
    1.29 +                } else {
    1.30 +                    computed[nComputed++] = i;
    1.31 +                }
    1.32 +            }
    1.33 +
    1.34 +            presets = array;
    1.35 +            postsets = Arrays.copyOf(computed, nComputed);
    1.36 +        }
    1.37 +
    1.38          private void presetNumberArray() {
    1.39              final double[] array = new double[value.length];
    1.40              final int[] computed = new int[value.length];
    1.41 @@ -746,6 +767,8 @@
    1.42          public Type getType() {
    1.43              if (elementType.isInteger()) {
    1.44                  return Type.INT_ARRAY;
    1.45 +            } else if (elementType.isLong()) {
    1.46 +                return Type.LONG_ARRAY;
    1.47              } else if (elementType.isNumeric()) {
    1.48                  return Type.NUMBER_ARRAY;
    1.49              } else {

mercurial