# HG changeset patch # User lana # Date 1488505544 0 # Node ID 9d4dbb8cbe7ce321c6e9e34dc9e0974760710907 # Parent b8c48884e7c645898f5815cafa46f683de1fbe9b# Parent 4561f9afd9bd15c589377be0b46a11a0288fe889 Merge diff -r b8c48884e7c6 -r 9d4dbb8cbe7c src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptRuntime.java --- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptRuntime.java Thu Mar 02 21:16:18 2017 +0000 +++ b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptRuntime.java Fri Mar 03 01:45:44 2017 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2017, 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 @@ -56,6 +56,8 @@ import jdk.nashorn.internal.objects.AbstractIterator; import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.objects.NativeObject; +import jdk.nashorn.internal.objects.NativeJava; +import jdk.nashorn.internal.objects.NativeArray; import jdk.nashorn.internal.parser.Lexer; import jdk.nashorn.internal.runtime.arrays.ArrayIndex; import jdk.nashorn.internal.runtime.linker.Bootstrap; @@ -398,6 +400,30 @@ if (itr != null) { return itr; } + + if (obj instanceof Map) { + return new Iterator() { + private Iterator iter = ((Map)obj).entrySet().iterator(); + + @Override + public boolean hasNext() { + return iter.hasNext(); + } + + @Override + public Object next() { + Map.Entry next = (Map.Entry)iter.next(); + Object[] keyvalue = new Object[]{next.getKey(), next.getValue()}; + NativeArray array = NativeJava.from(null, keyvalue); + return array; + } + + @Override + public void remove() { + iter.remove(); + } + }; + } } final Global global = Global.instance(); diff -r b8c48884e7c6 -r 9d4dbb8cbe7c test/script/basic/es6/JDK-8156743.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/es6/JDK-8156743.js Fri Mar 03 01:45:44 2017 +0000 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2017, 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-8156743: ES6 for..of should work for Java Maps and Sets + * + * @test + * @run + * @option --language=es6 + */ + +var map = new Map([ + [1, 'one'], + [2, 'two'], + [3, 'three'] +]); + +var set = new Set(['red', 'green', 'blue']); + +var HashMap = Java.type("java.util.HashMap"); +var jmap = new HashMap(); +jmap.put(1, 'one'); +jmap.put(2, 'two'); +jmap.put(3, 'three'); + +var HashSet = Java.type("java.util.HashSet"); +var jset = new HashSet(); +jset.add('red'); +jset.add('green'); +jset.add('blue'); + +for(var keyvalue of map){ + print(keyvalue[0],keyvalue[1]); +} + +for(var keyvalue of jmap){ + print(keyvalue[0],keyvalue[1]); +} + +for(var keyvalue of map){ + print(keyvalue); +} + +for(var keyvalue of jmap){ + print(keyvalue); +} + +for(var element of set){ + print(element); +} + +for(var element of jset){ + print(element); +} + diff -r b8c48884e7c6 -r 9d4dbb8cbe7c test/script/basic/es6/JDK-8156743.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/es6/JDK-8156743.js.EXPECTED Fri Mar 03 01:45:44 2017 +0000 @@ -0,0 +1,18 @@ +1 one +2 two +3 three +1 one +2 two +3 three +1,one +2,two +3,three +1,one +2,two +3,three +red +green +blue +red +green +blue