8007109: Regression: String(ConsString) does not flatten argument to String
authorhannesw
Wed, 30 Jan 2013 14:57:19 +0100
changeset 16203 5c15a03ec3ea
parent 16202 f6665e456589
child 16204 c53eef0eb729
8007109: Regression: String(ConsString) does not flatten argument to String Reviewed-by: sundar, lagergren
nashorn/src/jdk/nashorn/internal/objects/NativeString.java
nashorn/test/script/basic/consstring.js
nashorn/test/src/jdk/nashorn/internal/test/models/StringArgs.java
--- a/nashorn/src/jdk/nashorn/internal/objects/NativeString.java	Wed Jan 30 17:52:54 2013 +0530
+++ b/nashorn/src/jdk/nashorn/internal/objects/NativeString.java	Wed Jan 30 14:57:19 2013 +0100
@@ -1096,8 +1096,8 @@
      */
     @SpecializedConstructor
     public static Object constructor(final boolean newObj, final Object self, final Object arg) {
-        final CharSequence cs = JSType.toCharSequence(arg);
-        return newObj ? newObj(self, cs) : cs;
+        final CharSequence str = JSType.toCharSequence(arg);
+        return newObj ? newObj(self, str) : str.toString();
     }
 
     /**
@@ -1113,7 +1113,7 @@
      */
     @SpecializedConstructor
     public static Object constructor(final boolean newObj, final Object self, final int arg) {
-        final CharSequence str = JSType.toCharSequence(arg);
+        final String str = JSType.toString(arg);
         return newObj ? newObj(self, str) : str;
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/consstring.js	Wed Jan 30 14:57:19 2013 +0100
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * Conversion of ConsString to String
+ *
+ * @test
+ * @run
+ */
+
+var list = new java.util.ArrayList();
+var str = "foo";
+
+list.add(str);                               // plain string
+list.add(String(str + "1"));                 // String() called as function
+list.add(String(new String(str + "2")));     // String() called as function with String object
+list.add((str + "3").toString());            // toString() called on primitive string
+list.add(new String(str + "4").toString());  // toString() called on String object
+
+Packages.jdk.nashorn.internal.test.models.StringArgs.checkString(list);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/src/jdk/nashorn/internal/test/models/StringArgs.java	Wed Jan 30 14:57:19 2013 +0100
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.nashorn.internal.test.models;
+
+import java.util.List;
+
+public class StringArgs {
+
+    public static void checkString(List<?> list) {
+        for (Object s : list) {
+            if (!(s instanceof String)) {
+                throw new AssertionError("Not a String: " + s);
+            }
+        }
+    }
+}