--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/Lower.java 2016-03-18 16:54:30.581727325 +0100 +++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/Lower.java 2016-03-18 16:54:30.445727330 +0100 @@ -254,12 +254,12 @@ ForNode newForNode = forNode; final Expression test = forNode.getTest(); - if (!forNode.isForIn() && isAlwaysTrue(test)) { + if (!forNode.isForIn() && !forNode.isForOf() && isAlwaysTrue(test)) { newForNode = forNode.setTest(lc, null); } newForNode = checkEscape(newForNode); - if(!es6 && newForNode.isForIn()) { + if(!es6 && (newForNode.isForIn() || newForNode.isForOf())) { // Wrap it in a block so its internally created iterator is restricted in scope, unless we are running // in ES6 mode, in which case the parser already created a block to capture let/const declarations. addStatementEnclosedInBlock(newForNode);