8007109: Regression: String(ConsString) does not flatten argument to String
Reviewed-by: sundar, lagergren
--- 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);
+ }
+ }
+ }
+}