Mercurial > hg > icedtea9-forest > nashorn
changeset 584:ad5f9ce2a95b
Merge
author | jlaskey |
---|---|
date | Mon, 30 Sep 2013 10:24:42 -0300 |
parents | 982dd6e1bf4f (current diff) 1809c9e97c71 (diff) |
children | 787e36fdf69a |
files | |
diffstat | 8 files changed, 122 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/internal/codegen/CodeGenerator.java Fri Sep 27 18:38:35 2013 -0700 +++ b/src/jdk/nashorn/internal/codegen/CodeGenerator.java Mon Sep 30 10:24:42 2013 -0300 @@ -1956,7 +1956,7 @@ final Expression expression = throwNode.getExpression(); final int position = throwNode.position(); - final int line = source.getLine(position); + final int line = throwNode.getLineNumber(); final int column = source.getColumn(position); load(expression);
--- a/src/jdk/nashorn/internal/ir/LexicalContext.java Fri Sep 27 18:38:35 2013 -0700 +++ b/src/jdk/nashorn/internal/ir/LexicalContext.java Mon Sep 30 10:24:42 2013 -0300 @@ -587,11 +587,11 @@ final FunctionNode fn = (FunctionNode)node; final Source source = fn.getSource(); String src = source.toString(); - if (src.indexOf(File.pathSeparator) != -1) { + if (src.contains(File.pathSeparator)) { src = src.substring(src.lastIndexOf(File.pathSeparator)); } src += ' '; - src += source.getLine(fn.getStart()); + src += fn.getLineNumber(); sb.append(src); } sb.append(' ');
--- a/src/jdk/nashorn/internal/objects/NativeArray.java Fri Sep 27 18:38:35 2013 -0700 +++ b/src/jdk/nashorn/internal/objects/NativeArray.java Mon Sep 30 10:24:42 2013 -0300 @@ -860,9 +860,12 @@ return new NativeArray(sobj.getArray().slice(k, finale)); } - final NativeArray copy = new NativeArray(0); + // Construct array with proper length to have a deleted filter on undefined elements + final NativeArray copy = new NativeArray(finale - k); for (long n = 0; k < finale; n++, k++) { - copy.defineOwnProperty(ArrayIndex.getArrayIndex(n), sobj.get(k)); + if (sobj.has(k)) { + copy.defineOwnProperty(ArrayIndex.getArrayIndex(n), sobj.get(k)); + } } return copy;
--- a/src/jdk/nashorn/internal/parser/Parser.java Fri Sep 27 18:38:35 2013 -0700 +++ b/src/jdk/nashorn/internal/parser/Parser.java Mon Sep 30 10:24:42 2013 -0300 @@ -2436,7 +2436,7 @@ // name is null, generate anonymous name boolean isAnonymous = false; if (name == null) { - final String tmpName = "_L" + source.getLine(Token.descPosition(token)); + final String tmpName = "_L" + functionLine; name = new IdentNode(functionToken, Token.descPosition(functionToken), tmpName); isAnonymous = true; }
--- a/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java Fri Sep 27 18:38:35 2013 -0700 +++ b/src/jdk/nashorn/internal/runtime/RecompilableScriptFunctionData.java Mon Sep 30 10:24:42 2013 -0300 @@ -132,7 +132,7 @@ if (source != null) { sb.append(source.getName()) .append(':') - .append(source.getLine(Token.descPosition(token))) + .append(functionNode.getLineNumber()) .append(' '); }
--- a/src/jdk/nashorn/internal/runtime/Source.java Fri Sep 27 18:38:35 2013 -0700 +++ b/src/jdk/nashorn/internal/runtime/Source.java Mon Sep 30 10:24:42 2013 -0300 @@ -272,6 +272,10 @@ /** * Return line number of character position. + * + * <p>This method can be expensive for large sources as it iterates through + * all characters up to {@code position}.</p> + * * @param position Position of character in source content. * @return Line number. */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/JDK-8025515.js Mon Sep 30 10:24:42 2013 -0300 @@ -0,0 +1,58 @@ +/* + * 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-8025515: Performance issues with Source.getLine() + * + * @test + * @run + */ + +// Make sure synthetic names of anonymous functions have correct line numbers + +function testMethodName(f, expected) { + try { + f(); + fail("expected error"); + } catch (e) { + var stack = e.getStackTrace(); + if (stack[0].methodName !== expected) { + fail("got " + stack[0].methodName + ", expected " + expected); + } + } +} + +testMethodName(function() { + return a.b.c; +}, "_L45"); + +testMethodName(function() { throw new Error() }, "_L49"); + +var f = (function() { + return function() { a.b.c; }; +})(); +testMethodName(f, "_L51$_L52"); + +testMethodName((function() { + return function() { return a.b.c; }; +})(), "_L56$_L57");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/JDK-8025520.js Mon Sep 30 10:24:42 2013 -0300 @@ -0,0 +1,50 @@ +/* + * 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-8025520: Array.prototype.slice should only copy defined elements + * + * @test + * @run + */ + +var s = Array.prototype.slice.call({length: 6, 3: 1}, 2, 5); + +if (s.length != 3) { + fail("s.length != 3"); +} +if (0 in s) { + fail("0 in s"); +} +if (s.hasOwnProperty(0)) { + fail("s.hasOwnProperty(0)"); +} +if (s[1] !== 1) { + fail("s[1] !== 1"); +} +if (2 in s) { + fail("2 in s"); +} +if (s.hasOwnProperty(2)) { + fail("s.hasOwnProperty(2)"); +}