8074031: Canonicalize is-a-JS-string tests

Mon, 02 Mar 2015 14:33:55 +0100

author
attila
date
Mon, 02 Mar 2015 14:33:55 +0100
changeset 1251
85a6a7545dbe
parent 1250
9ee1fc3f6136
child 1252
a79ab34ef127

8074031: Canonicalize is-a-JS-string tests
Reviewed-by: hannesw, lagergren

src/jdk/nashorn/internal/lookup/MethodHandleFactory.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/objects/Global.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/objects/NativeDate.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/objects/NativeJSON.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/objects/NativeString.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/ConsString.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/JSType.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/ScriptFunctionData.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/ScriptRuntime.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/ScriptingFunctions.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/linker/BrowserJSObjectLinker.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/linker/JavaArgumentConverters.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/jdk/nashorn/internal/lookup/MethodHandleFactory.java	Fri Feb 20 15:47:28 2015 +0100
     1.2 +++ b/src/jdk/nashorn/internal/lookup/MethodHandleFactory.java	Mon Mar 02 14:33:55 2015 +0100
     1.3 @@ -25,6 +25,8 @@
     1.4  
     1.5  package jdk.nashorn.internal.lookup;
     1.6  
     1.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
     1.8 +
     1.9  import java.io.ByteArrayOutputStream;
    1.10  import java.io.PrintStream;
    1.11  import java.lang.invoke.MethodHandle;
    1.12 @@ -36,7 +38,6 @@
    1.13  import java.util.Arrays;
    1.14  import java.util.List;
    1.15  import java.util.logging.Level;
    1.16 -import jdk.nashorn.internal.runtime.ConsString;
    1.17  import jdk.nashorn.internal.runtime.Context;
    1.18  import jdk.nashorn.internal.runtime.Debug;
    1.19  import jdk.nashorn.internal.runtime.ScriptObject;
    1.20 @@ -343,7 +344,7 @@
    1.21                  final Object d = data[i];
    1.22                  if (d == null) {
    1.23                      sb.append("<null> ");
    1.24 -                } else if (d instanceof String || d instanceof ConsString) {
    1.25 +                } else if (isString(d)) {
    1.26                      sb.append(d.toString());
    1.27                      sb.append(' ');
    1.28                  } else if (d.getClass().isArray()) {
     2.1 --- a/src/jdk/nashorn/internal/objects/Global.java	Fri Feb 20 15:47:28 2015 +0100
     2.2 +++ b/src/jdk/nashorn/internal/objects/Global.java	Mon Mar 02 14:33:55 2015 +0100
     2.3 @@ -28,6 +28,7 @@
     2.4  import static jdk.nashorn.internal.lookup.Lookup.MH;
     2.5  import static jdk.nashorn.internal.runtime.ECMAErrors.referenceError;
     2.6  import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
     2.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
     2.8  import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
     2.9  
    2.10  import java.io.IOException;
    2.11 @@ -55,7 +56,6 @@
    2.12  import jdk.nashorn.internal.objects.annotations.Attribute;
    2.13  import jdk.nashorn.internal.objects.annotations.Property;
    2.14  import jdk.nashorn.internal.objects.annotations.ScriptClass;
    2.15 -import jdk.nashorn.internal.runtime.ConsString;
    2.16  import jdk.nashorn.internal.runtime.Context;
    2.17  import jdk.nashorn.internal.runtime.ECMAErrors;
    2.18  import jdk.nashorn.internal.runtime.GlobalConstants;
    2.19 @@ -578,7 +578,7 @@
    2.20              return new NativeBoolean((Boolean)obj, this);
    2.21          } else if (obj instanceof Number) {
    2.22              return new NativeNumber(((Number)obj).doubleValue(), this);
    2.23 -        } else if (obj instanceof String || obj instanceof ConsString) {
    2.24 +        } else if (isString(obj)) {
    2.25              return new NativeString((CharSequence)obj, this);
    2.26          } else if (obj instanceof Object[]) { // extension
    2.27              return new NativeArray(ArrayData.allocate((Object[])obj), this);
    2.28 @@ -605,7 +605,7 @@
    2.29       * @return guarded invocation
    2.30       */
    2.31      public static GuardedInvocation primitiveLookup(final LinkRequest request, final Object self) {
    2.32 -        if (self instanceof String || self instanceof ConsString) {
    2.33 +        if (isString(self)) {
    2.34              return NativeString.lookupPrimitive(request, self);
    2.35          } else if (self instanceof Number) {
    2.36              return NativeNumber.lookupPrimitive(request, self);
    2.37 @@ -622,7 +622,7 @@
    2.38       * @return method handle to create wrapper objects for primitive receiver
    2.39       */
    2.40      public static MethodHandle getPrimitiveWrapFilter(final Object self) {
    2.41 -        if (self instanceof String || self instanceof ConsString) {
    2.42 +        if (isString(self)) {
    2.43              return NativeString.WRAPFILTER;
    2.44          } else if (self instanceof Number) {
    2.45              return NativeNumber.WRAPFILTER;
    2.46 @@ -948,7 +948,7 @@
    2.47       * This is directly invoked from generated when eval(code) is called in user code
    2.48       */
    2.49      public static Object directEval(final Object self, final Object str, final Object callThis, final Object location, final boolean strict) {
    2.50 -        if (!(str instanceof String || str instanceof ConsString)) {
    2.51 +        if (!isString(str)) {
    2.52              return str;
    2.53          }
    2.54          final Global global = Global.instanceFrom(self);
     3.1 --- a/src/jdk/nashorn/internal/objects/NativeDate.java	Fri Feb 20 15:47:28 2015 +0100
     3.2 +++ b/src/jdk/nashorn/internal/objects/NativeDate.java	Mon Mar 02 14:33:55 2015 +0100
     3.3 @@ -30,6 +30,7 @@
     3.4  import static java.lang.Double.isNaN;
     3.5  import static jdk.nashorn.internal.runtime.ECMAErrors.rangeError;
     3.6  import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
     3.7 +
     3.8  import java.util.Locale;
     3.9  import java.util.TimeZone;
    3.10  import java.util.concurrent.Callable;
    3.11 @@ -40,7 +41,6 @@
    3.12  import jdk.nashorn.internal.objects.annotations.SpecializedFunction;
    3.13  import jdk.nashorn.internal.objects.annotations.Where;
    3.14  import jdk.nashorn.internal.parser.DateParser;
    3.15 -import jdk.nashorn.internal.runtime.ConsString;
    3.16  import jdk.nashorn.internal.runtime.JSType;
    3.17  import jdk.nashorn.internal.runtime.PropertyMap;
    3.18  import jdk.nashorn.internal.runtime.ScriptEnvironment;
    3.19 @@ -183,7 +183,7 @@
    3.20          case 1:
    3.21              double num;
    3.22              final Object arg = JSType.toPrimitive(args[0]);
    3.23 -            if (arg instanceof String || arg instanceof ConsString) {
    3.24 +            if (JSType.isString(arg)) {
    3.25                  num = parseDateString(arg.toString());
    3.26              } else {
    3.27                  num = timeClip(JSType.toNumber(args[0]));
     4.1 --- a/src/jdk/nashorn/internal/objects/NativeJSON.java	Fri Feb 20 15:47:28 2015 +0100
     4.2 +++ b/src/jdk/nashorn/internal/objects/NativeJSON.java	Mon Mar 02 14:33:55 2015 +0100
     4.3 @@ -181,7 +181,7 @@
     4.4                  }
     4.5                  gap = sb.toString();
     4.6              }
     4.7 -        } else if (modSpace instanceof String || modSpace instanceof ConsString) {
     4.8 +        } else if (JSType.isString(modSpace)) {
     4.9              final String str = modSpace.toString();
    4.10              gap = str.substring(0, Math.min(10, str.length()));
    4.11          } else {
     5.1 --- a/src/jdk/nashorn/internal/objects/NativeString.java	Fri Feb 20 15:47:28 2015 +0100
     5.2 +++ b/src/jdk/nashorn/internal/objects/NativeString.java	Mon Mar 02 14:33:55 2015 +0100
     5.3 @@ -90,7 +90,7 @@
     5.4  
     5.5      private NativeString(final CharSequence value, final ScriptObject proto, final PropertyMap map) {
     5.6          super(proto, map);
     5.7 -        assert value instanceof String || value instanceof ConsString;
     5.8 +        assert JSType.isString(value);
     5.9          this.value = value;
    5.10      }
    5.11  
    5.12 @@ -155,7 +155,7 @@
    5.13          final Object self = request.getReceiver();
    5.14          final Class<?> returnType = desc.getMethodType().returnType();
    5.15  
    5.16 -        if (returnType == Object.class && (self instanceof String || self instanceof ConsString)) {
    5.17 +        if (returnType == Object.class && JSType.isString(self)) {
    5.18              try {
    5.19                  return new GuardedInvocation(MH.findStatic(MethodHandles.lookup(), NativeString.class, "get", desc.getMethodType()), NashornGuards.getInstanceOf2Guard(String.class, ConsString.class));
    5.20              } catch (final LookupException e) {
    5.21 @@ -1312,7 +1312,7 @@
    5.22      }
    5.23  
    5.24      private static CharSequence getCharSequence(final Object self) {
    5.25 -        if (self instanceof String || self instanceof ConsString) {
    5.26 +        if (JSType.isString(self)) {
    5.27              return (CharSequence)self;
    5.28          } else if (self instanceof NativeString) {
    5.29              return ((NativeString)self).getValue();
     6.1 --- a/src/jdk/nashorn/internal/runtime/ConsString.java	Fri Feb 20 15:47:28 2015 +0100
     6.2 +++ b/src/jdk/nashorn/internal/runtime/ConsString.java	Mon Mar 02 14:33:55 2015 +0100
     6.3 @@ -25,6 +25,8 @@
     6.4  
     6.5  package jdk.nashorn.internal.runtime;
     6.6  
     6.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
     6.8 +
     6.9  import java.util.ArrayDeque;
    6.10  import java.util.Deque;
    6.11  
    6.12 @@ -52,8 +54,8 @@
    6.13       * @param right right char sequence
    6.14       */
    6.15      public ConsString(final CharSequence left, final CharSequence right) {
    6.16 -        assert left instanceof String || left instanceof ConsString;
    6.17 -        assert right instanceof String || right instanceof ConsString;
    6.18 +        assert isString(left);
    6.19 +        assert isString(right);
    6.20          this.left = left;
    6.21          this.right = right;
    6.22          length = left.length() + right.length();
     7.1 --- a/src/jdk/nashorn/internal/runtime/JSType.java	Fri Feb 20 15:47:28 2015 +0100
     7.2 +++ b/src/jdk/nashorn/internal/runtime/JSType.java	Mon Mar 02 14:33:55 2015 +0100
     7.3 @@ -312,7 +312,7 @@
     7.4              return JSType.BOOLEAN;
     7.5          }
     7.6  
     7.7 -        if (obj instanceof String || obj instanceof ConsString) {
     7.8 +        if (isString(obj)) {
     7.9              return JSType.STRING;
    7.10          }
    7.11  
    7.12 @@ -350,7 +350,7 @@
    7.13              return JSType.BOOLEAN;
    7.14          }
    7.15  
    7.16 -        if (obj instanceof String || obj instanceof ConsString) {
    7.17 +        if (isString(obj)) {
    7.18              return JSType.STRING;
    7.19          }
    7.20  
    7.21 @@ -456,8 +456,7 @@
    7.22                 obj == ScriptRuntime.UNDEFINED ||
    7.23                 obj instanceof Boolean ||
    7.24                 obj instanceof Number ||
    7.25 -               obj instanceof String ||
    7.26 -               obj instanceof ConsString;
    7.27 +               isString(obj);
    7.28      }
    7.29  
    7.30     /**
    7.31 @@ -578,7 +577,7 @@
    7.32              return num != 0 && !Double.isNaN(num);
    7.33          }
    7.34  
    7.35 -        if (obj instanceof String || obj instanceof ConsString) {
    7.36 +        if (isString(obj)) {
    7.37              return ((CharSequence)obj).length() > 0;
    7.38          }
    7.39  
    7.40 @@ -629,6 +628,15 @@
    7.41      }
    7.42  
    7.43      /**
    7.44 +     * Returns true if object represents a primitive JavaScript string value.
    7.45 +     * @param obj the object
    7.46 +     * @return true if the object represents a primitive JavaScript string value.
    7.47 +     */
    7.48 +    public static boolean isString(final Object obj) {
    7.49 +        return obj instanceof String || obj instanceof ConsString;
    7.50 +    }
    7.51 +
    7.52 +    /**
    7.53       * JavaScript compliant conversion of integer to String
    7.54       *
    7.55       * @param num an integer
     8.1 --- a/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java	Fri Feb 20 15:47:28 2015 +0100
     8.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptFunctionData.java	Mon Mar 02 14:33:55 2015 +0100
     8.3 @@ -28,6 +28,7 @@
     8.4  import static jdk.nashorn.internal.lookup.Lookup.MH;
     8.5  import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
     8.6  import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
     8.7 +
     8.8  import java.io.IOException;
     8.9  import java.io.ObjectInputStream;
    8.10  import java.io.Serializable;
    8.11 @@ -456,8 +457,7 @@
    8.12      }
    8.13  
    8.14      static boolean isPrimitiveThis(final Object obj) {
    8.15 -        return obj instanceof String || obj instanceof ConsString ||
    8.16 -               obj instanceof Number || obj instanceof Boolean;
    8.17 +        return JSType.isString(obj) || obj instanceof Number || obj instanceof Boolean;
    8.18      }
    8.19  
    8.20      /**
     9.1 --- a/src/jdk/nashorn/internal/runtime/ScriptRuntime.java	Fri Feb 20 15:47:28 2015 +0100
     9.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptRuntime.java	Mon Mar 02 14:33:55 2015 +0100
     9.3 @@ -32,6 +32,7 @@
     9.4  import static jdk.nashorn.internal.runtime.ECMAErrors.syntaxError;
     9.5  import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
     9.6  import static jdk.nashorn.internal.runtime.JSType.isRepresentableAsInt;
     9.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
     9.8  
     9.9  import java.lang.invoke.MethodHandle;
    9.10  import java.lang.invoke.MethodHandles;
    9.11 @@ -56,7 +57,6 @@
    9.12  import jdk.nashorn.internal.parser.Lexer;
    9.13  import jdk.nashorn.internal.runtime.linker.Bootstrap;
    9.14  
    9.15 -
    9.16  /**
    9.17   * Utilities to be called by JavaScript runtime API and generated classes.
    9.18   */
    9.19 @@ -564,8 +564,7 @@
    9.20          final Object xPrim = JSType.toPrimitive(x);
    9.21          final Object yPrim = JSType.toPrimitive(y);
    9.22  
    9.23 -        if (xPrim instanceof String || yPrim instanceof String
    9.24 -                || xPrim instanceof ConsString || yPrim instanceof ConsString) {
    9.25 +        if (isString(xPrim) || isString(yPrim)) {
    9.26              try {
    9.27                  return new ConsString(JSType.toCharSequence(xPrim), JSType.toCharSequence(yPrim));
    9.28              } catch (final IllegalArgumentException iae) {
    9.29 @@ -1010,7 +1009,7 @@
    9.30              px = JSType.toPrimitive(x, Number.class);
    9.31          }
    9.32  
    9.33 -        if (JSType.ofNoFunction(px) == JSType.STRING && JSType.ofNoFunction(py) == JSType.STRING) {
    9.34 +        if (isString(px) && isString(py)) {
    9.35              // May be String or ConsString
    9.36              return px.toString().compareTo(py.toString()) < 0;
    9.37          }
    10.1 --- a/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java	Fri Feb 20 15:47:28 2015 +0100
    10.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java	Mon Mar 02 14:33:55 2015 +0100
    10.3 @@ -107,7 +107,7 @@
    10.4  
    10.5          if (file instanceof File) {
    10.6              f = (File)file;
    10.7 -        } else if (file instanceof String || file instanceof ConsString) {
    10.8 +        } else if (JSType.isString(file)) {
    10.9              f = new java.io.File(((CharSequence)file).toString());
   10.10          }
   10.11  
    11.1 --- a/src/jdk/nashorn/internal/runtime/linker/BrowserJSObjectLinker.java	Fri Feb 20 15:47:28 2015 +0100
    11.2 +++ b/src/jdk/nashorn/internal/runtime/linker/BrowserJSObjectLinker.java	Mon Mar 02 14:33:55 2015 +0100
    11.3 @@ -25,11 +25,13 @@
    11.4  
    11.5  package jdk.nashorn.internal.runtime.linker;
    11.6  
    11.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
    11.8 +import static jdk.nashorn.internal.runtime.linker.BrowserJSObjectLinker.JSObjectHandles.JSOBJECT_CALL;
    11.9  import static jdk.nashorn.internal.runtime.linker.BrowserJSObjectLinker.JSObjectHandles.JSOBJECT_GETMEMBER;
   11.10  import static jdk.nashorn.internal.runtime.linker.BrowserJSObjectLinker.JSObjectHandles.JSOBJECT_GETSLOT;
   11.11  import static jdk.nashorn.internal.runtime.linker.BrowserJSObjectLinker.JSObjectHandles.JSOBJECT_SETMEMBER;
   11.12  import static jdk.nashorn.internal.runtime.linker.BrowserJSObjectLinker.JSObjectHandles.JSOBJECT_SETSLOT;
   11.13 -import static jdk.nashorn.internal.runtime.linker.BrowserJSObjectLinker.JSObjectHandles.JSOBJECT_CALL;
   11.14 +
   11.15  import java.lang.invoke.MethodHandle;
   11.16  import java.lang.invoke.MethodHandles;
   11.17  import jdk.internal.dynalink.CallSiteDescriptor;
   11.18 @@ -40,7 +42,6 @@
   11.19  import jdk.internal.dynalink.support.CallSiteDescriptorFactory;
   11.20  import jdk.nashorn.internal.lookup.MethodHandleFactory;
   11.21  import jdk.nashorn.internal.lookup.MethodHandleFunctionality;
   11.22 -import jdk.nashorn.internal.runtime.ConsString;
   11.23  import jdk.nashorn.internal.runtime.JSType;
   11.24  
   11.25  /**
   11.26 @@ -171,7 +172,7 @@
   11.27              if (index > -1) {
   11.28                  return JSOBJECT_GETSLOT.invokeExact(jsobj, index);
   11.29              }
   11.30 -        } else if (key instanceof String || key instanceof ConsString) {
   11.31 +        } else if (isString(key)) {
   11.32              final String name = key.toString();
   11.33              if (name.indexOf('(') != -1) {
   11.34                  return fallback.invokeExact(jsobj, (Object) name);
   11.35 @@ -187,7 +188,7 @@
   11.36              JSOBJECT_SETSLOT.invokeExact(jsobj, (int)key, value);
   11.37          } else if (key instanceof Number) {
   11.38              JSOBJECT_SETSLOT.invokeExact(jsobj, getIndex((Number)key), value);
   11.39 -        } else if (key instanceof String || key instanceof ConsString) {
   11.40 +        } else if (isString(key)) {
   11.41              JSOBJECT_SETMEMBER.invokeExact(jsobj, key.toString(), value);
   11.42          }
   11.43      }
    12.1 --- a/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java	Fri Feb 20 15:47:28 2015 +0100
    12.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java	Mon Mar 02 14:33:55 2015 +0100
    12.3 @@ -25,6 +25,8 @@
    12.4  
    12.5  package jdk.nashorn.internal.runtime.linker;
    12.6  
    12.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
    12.8 +
    12.9  import java.lang.invoke.MethodHandle;
   12.10  import java.lang.invoke.MethodHandles;
   12.11  import java.util.Map;
   12.12 @@ -38,7 +40,6 @@
   12.13  import jdk.nashorn.api.scripting.JSObject;
   12.14  import jdk.nashorn.internal.lookup.MethodHandleFactory;
   12.15  import jdk.nashorn.internal.lookup.MethodHandleFunctionality;
   12.16 -import jdk.nashorn.internal.runtime.ConsString;
   12.17  import jdk.nashorn.internal.runtime.JSType;
   12.18  
   12.19  /**
   12.20 @@ -166,7 +167,7 @@
   12.21              if (index > -1) {
   12.22                  return ((JSObject)jsobj).getSlot(index);
   12.23              }
   12.24 -        } else if (key instanceof String || key instanceof ConsString) {
   12.25 +        } else if (isString(key)) {
   12.26              final String name = key.toString();
   12.27              // get with method name and signature. delegate it to beans linker!
   12.28              if (name.indexOf('(') != -1) {
   12.29 @@ -183,7 +184,7 @@
   12.30              ((JSObject)jsobj).setSlot((Integer)key, value);
   12.31          } else if (key instanceof Number) {
   12.32              ((JSObject)jsobj).setSlot(getIndex((Number)key), value);
   12.33 -        } else if (key instanceof String || key instanceof ConsString) {
   12.34 +        } else if (isString(key)) {
   12.35              ((JSObject)jsobj).setMember(key.toString(), value);
   12.36          }
   12.37      }
    13.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaArgumentConverters.java	Fri Feb 20 15:47:28 2015 +0100
    13.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaArgumentConverters.java	Mon Mar 02 14:33:55 2015 +0100
    13.3 @@ -27,6 +27,7 @@
    13.4  
    13.5  import static jdk.nashorn.internal.lookup.Lookup.MH;
    13.6  import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
    13.7 +import static jdk.nashorn.internal.runtime.JSType.isString;
    13.8  import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
    13.9  
   13.10  import java.lang.invoke.MethodHandle;
   13.11 @@ -78,7 +79,7 @@
   13.12          }
   13.13  
   13.14          if (obj == UNDEFINED) {
   13.15 -            // NOTE: same reasoning for FindBugs NP_BOOLEAN_RETURN_NUL warning as in the preceding comment.
   13.16 +            // NOTE: same reasoning for FindBugs NP_BOOLEAN_RETURN_NULL warning as in the preceding comment.
   13.17              return null;
   13.18          }
   13.19  
   13.20 @@ -87,7 +88,7 @@
   13.21              return num != 0 && !Double.isNaN(num);
   13.22          }
   13.23  
   13.24 -        if (obj instanceof String || obj instanceof ConsString) {
   13.25 +        if (isString(obj)) {
   13.26              return ((CharSequence) obj).length() > 0;
   13.27          }
   13.28  
   13.29 @@ -207,7 +208,7 @@
   13.30                  return f.longValue();
   13.31              } else if (obj instanceof Number) {
   13.32                  return ((Number)obj).longValue();
   13.33 -            } else if (obj instanceof String || obj instanceof ConsString) {
   13.34 +            } else if (isString(obj)) {
   13.35                  return JSType.toLong(obj);
   13.36              } else if (obj instanceof Boolean) {
   13.37                  return (Boolean)obj ? 1L : 0L;
    14.1 --- a/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java	Fri Feb 20 15:47:28 2015 +0100
    14.2 +++ b/src/jdk/nashorn/internal/runtime/linker/NashornPrimitiveLinker.java	Mon Mar 02 14:33:55 2015 +0100
    14.3 @@ -39,6 +39,7 @@
    14.4  import jdk.internal.dynalink.support.TypeUtilities;
    14.5  import jdk.nashorn.internal.objects.Global;
    14.6  import jdk.nashorn.internal.runtime.ConsString;
    14.7 +import jdk.nashorn.internal.runtime.JSType;
    14.8  import jdk.nashorn.internal.runtime.ScriptRuntime;
    14.9  
   14.10  /**
   14.11 @@ -170,7 +171,7 @@
   14.12  
   14.13      @SuppressWarnings("unused")
   14.14      private static boolean isJavaScriptPrimitive(final Object o) {
   14.15 -        return o instanceof String || o instanceof Boolean || o instanceof Number || o instanceof ConsString || o == null;
   14.16 +        return JSType.isString(o) || o instanceof Boolean || o instanceof Number || o == null;
   14.17      }
   14.18  
   14.19      private static final MethodHandle GUARD_PRIMITIVE = findOwnMH("isJavaScriptPrimitive", boolean.class, Object.class);

mercurial