# HG changeset patch # User sundar # Date 1364302579 -19800 # Node ID 6993b3541b28f9b087aaf7541fe8aba70031f750 # Parent 6ae708677f9280f7a77cc546a3c90477331cff0c 8010720: Linkage problem with java.lang.String.length() Reviewed-by: hannesw, lagergren diff -r 6ae708677f92 -r 6993b3541b28 nashorn/src/jdk/nashorn/internal/objects/NativeString.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeString.java Tue Mar 26 08:42:35 2013 +0100 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeString.java Tue Mar 26 18:26:19 2013 +0530 @@ -122,6 +122,19 @@ return value.length(); } + // This is to support length as method call as well. + @Override + protected GuardedInvocation findGetMethod(final CallSiteDescriptor desc, final LinkRequest request, final String operator) { + final String name = desc.getNameToken(2); + + // if str.length(), then let the bean linker handle it + if ("length".equals(name) && "getMethod".equals(operator)) { + return null; + } + + return super.findGetMethod(desc, request, operator); + } + // This is to provide array-like access to string characters without creating a NativeString wrapper. @Override protected GuardedInvocation findGetIndexMethod(final CallSiteDescriptor desc, final LinkRequest request) { diff -r 6ae708677f92 -r 6993b3541b28 nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java --- a/nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java Tue Mar 26 08:42:35 2013 +0100 +++ b/nashorn/src/jdk/nashorn/internal/runtime/linker/PrimitiveLookup.java Tue Mar 26 18:26:19 2013 +0530 @@ -109,7 +109,6 @@ } return new GuardedInvocation(method, guard, link.getSwitchPoint()); } - assert desc.getNameTokenCount() <= 2; // Named operations would hit the return null after findProperty return null; } } diff -r 6ae708677f92 -r 6993b3541b28 nashorn/test/script/basic/JDK-8010720.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8010720.js Tue Mar 26 18:26:19 2013 +0530 @@ -0,0 +1,49 @@ +/* + * 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. + */ + +/** + * JDK-8010720: Linkage problem with java.lang.String.length() + * + * @test + * @run + */ + +var s = new java.lang.String("nashorn"); + +if (s.length() != 7) { + fail("s.length() does not return expected value"); +} + +if (s.length != 7) { + fail("s.length does not return expected value"); +} + + +if ('hello'.length() != 5) { + fail("'hello'.length() does not return expected value"); +} + +if ('hello'.length != 5) { + fail("'hello'.length does not return expected value"); +} +