Mon, 25 Mar 2013 12:01:06 +0100
8017010: index evaluation to a temporary location for index operator much change temporaries to slots, but never scoped vars
Reviewed-by: hannesw, sundar
1.1 --- a/src/jdk/nashorn/internal/codegen/Attr.java Sat Mar 23 00:58:39 2013 +0100 1.2 +++ b/src/jdk/nashorn/internal/codegen/Attr.java Mon Mar 25 12:01:06 2013 +0100 1.3 @@ -577,7 +577,7 @@ 1.4 1.5 @Override 1.6 public Node leaveIndexNode(final IndexNode indexNode) { 1.7 - newTemporary(Type.OBJECT, indexNode); //TORO 1.8 + newTemporary(Type.OBJECT, indexNode); //TODO 1.9 return indexNode; 1.10 } 1.11 1.12 @@ -1470,8 +1470,13 @@ 1.13 assignmentDest.accept(new NodeVisitor() { 1.14 @Override 1.15 public Node leaveIndexNode(final IndexNode indexNode) { 1.16 + assert indexNode.getSymbol().isTemp(); 1.17 final Node index = indexNode.getIndex(); 1.18 - index.getSymbol().setNeedsSlot(!index.getSymbol().isConstant()); 1.19 + //only temps can be set as needing slots. the others will self resolve 1.20 + //it is illegal to take a scope var and force it to be a slot, that breaks 1.21 + if (index.getSymbol().isTemp() && !index.getSymbol().isConstant()) { 1.22 + index.getSymbol().setNeedsSlot(true); 1.23 + } 1.24 return indexNode; 1.25 } 1.26 });
2.1 --- a/src/jdk/nashorn/internal/runtime/regexp/joni/ByteCodeMachine.java Sat Mar 23 00:58:39 2013 +0100 2.2 +++ b/src/jdk/nashorn/internal/runtime/regexp/joni/ByteCodeMachine.java Mon Mar 25 12:01:06 2013 +0100 2.3 @@ -1459,4 +1459,4 @@ 2.4 private int finish() { 2.5 return bestLen; 2.6 } 2.7 -} 2.8 \ No newline at end of file 2.9 +}
3.1 --- a/src/jdk/nashorn/internal/runtime/regexp/joni/encoding/AsciiTables.java Sat Mar 23 00:58:39 2013 +0100 3.2 +++ b/src/jdk/nashorn/internal/runtime/regexp/joni/encoding/AsciiTables.java Mon Mar 25 12:01:06 2013 +0100 3.3 @@ -154,4 +154,4 @@ 3.4 {0x59, 0x79}, 3.5 {0x5a, 0x7a} 3.6 }; 3.7 -} 3.8 \ No newline at end of file 3.9 +}
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/test/script/basic/JDK-8017010.js Mon Mar 25 12:01:06 2013 +0100 4.3 @@ -0,0 +1,68 @@ 4.4 +/* 4.5 + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 4.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4.7 + * 4.8 + * This code is free software; you can redistribute it and/or modify it 4.9 + * under the terms of the GNU General Public License version 2 only, as 4.10 + * published by the Free Software Foundation. 4.11 + * 4.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 4.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 4.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 4.15 + * version 2 for more details (a copy is included in the LICENSE file that 4.16 + * accompanied this code). 4.17 + * 4.18 + * You should have received a copy of the GNU General Public License version 4.19 + * 2 along with this work; if not, write to the Free Software Foundation, 4.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 4.21 + * 4.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 4.23 + * or visit www.oracle.com if you need additional information or have any 4.24 + * questions. 4.25 + */ 4.26 + 4.27 +/** 4.28 + * JDK-8010710 - slot/scope problem with temporary expressions 4.29 + * as array index in self modifying assigns 4.30 + * 4.31 + * @test 4.32 + * @run 4.33 + */ 4.34 +function zero() { 4.35 + return 0; 4.36 +} 4.37 + 4.38 +//try complex self modifying assignment and force slots to temporary value index operators 4.39 +var a = [1, 2, 3, 4, 5]; 4.40 +var b = [a, a]; 4.41 +print(b[zero() + 1][2 + a[0]] += 10); 4.42 + 4.43 +//repro for NASHORN-258 that never made it 4.44 +function AddRoundKey() { 4.45 + var r=0; 4.46 + state[r][1] &= 17; 4.47 +} 4.48 + 4.49 +var srcFiles = []; 4.50 +for(i=0;i<100;i++) { 4.51 + srcFiles.push('dummy'); 4.52 +} 4.53 +var added = ''; 4.54 + 4.55 +//this broke the javafx build system. verify it works 4.56 +function bouncingBall() { 4.57 + for (j=0; j<100; j++) { 4.58 + added += srcFiles[j]; 4.59 + } 4.60 +} 4.61 +bouncingBall(); 4.62 +print(added); 4.63 + 4.64 +//this is how they should have done it for speed, that works always, verify this too 4.65 +function bouncingBall2() { 4.66 + for (var k=0; k<100; k++) { 4.67 + added += srcFiles[k]; 4.68 + } 4.69 +} 4.70 +bouncingBall2(); 4.71 +print(added);
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/test/script/basic/JDK-8017010.js.EXPECTED Mon Mar 25 12:01:06 2013 +0100 5.3 @@ -0,0 +1,3 @@ 5.4 +14 5.5 +dummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummy 5.6 +dummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummydummy
6.1 --- a/test/script/basic/NASHORN-258.js Sat Mar 23 00:58:39 2013 +0100 6.2 +++ b/test/script/basic/NASHORN-258.js Mon Mar 25 12:01:06 2013 +0100 6.3 @@ -29,6 +29,16 @@ 6.4 */ 6.5 6.6 function test3(a) { 6.7 + for (i = 0; i < a.length ; i++) { 6.8 + for (j = 0; j < a[i].length ; j++) { 6.9 + for (k = 0; k < a[i][j].length ; k++) { 6.10 + a[i][j][k] *= 8; 6.11 + } 6.12 + } 6.13 + } 6.14 +} 6.15 + 6.16 +function test3local(a) { 6.17 for (var i = 0; i < a.length ; i++) { 6.18 for (var j = 0; j < a[i].length ; j++) { 6.19 for (var k = 0; k < a[i][j].length ; k++) { 6.20 @@ -45,6 +55,8 @@ 6.21 test3(array); 6.22 print(array); 6.23 6.24 +test3local(array); 6.25 +print(array); 6.26 6.27 function outer() { 6.28
7.1 --- a/test/script/basic/NASHORN-258.js.EXPECTED Sat Mar 23 00:58:39 2013 +0100 7.2 +++ b/test/script/basic/NASHORN-258.js.EXPECTED Mon Mar 25 12:01:06 2013 +0100 7.3 @@ -1,2 +1,3 @@ 7.4 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 7.5 +64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64 7.6 1,1,8,1,1,8,1,1,8,1,1,8,1,1,8,1,1,8,1,1,8,1,1,8,1,1,8