# HG changeset patch # User lagergren # Date 1360846332 -3600 # Node ID cc200fdc34789db788e7edaadcadb80a571f570d # Parent 86cb162cec6c7369d086bc99ffefd4a83d2dab08 8008206: The allInteger case for SwitchNode generation in CodeGenerator assumes integer LITERALS only. Reviewed-by: sundar, jlaskey diff -r 86cb162cec6c -r cc200fdc3478 nashorn/src/jdk/nashorn/internal/codegen/Attr.java --- a/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Thu Feb 14 13:22:26 2013 +0100 +++ b/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Thu Feb 14 13:52:12 2013 +0100 @@ -542,6 +542,10 @@ caseNode.setTest(LiteralNode.newInstance(lit, lit.getInt32()).accept(this)); } } + } else { + // the "all integer" case that CodeGenerator optimizes for currently assumes literals only + type = Type.OBJECT; + break; } type = Type.widest(type, caseNode.getTest().getType()); diff -r 86cb162cec6c -r cc200fdc3478 nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java --- a/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java Thu Feb 14 13:22:26 2013 +0100 +++ b/nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java Thu Feb 14 13:52:12 2013 +0100 @@ -1803,7 +1803,7 @@ final Node test = caseNode.getTest(); if (test != null) { - final Integer value = (Integer)((LiteralNode) test).getValue(); + final Integer value = (Integer)((LiteralNode)test).getValue(); final Label entry = caseNode.getEntry(); // Take first duplicate. diff -r 86cb162cec6c -r cc200fdc3478 nashorn/test/script/basic/JDK-8008206.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8008206.js Thu Feb 14 13:52:12 2013 +0100 @@ -0,0 +1,36 @@ +/* + * 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-8008026 : allInteger case in Switch nodes requiers integer literals only + * + * @test + * @run + */ + +var x = 1; + +switch (x) { + case foo = false, 1: + print("ok"); +} diff -r 86cb162cec6c -r cc200fdc3478 nashorn/test/script/basic/JDK-8008206.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8008206.js.EXPECTED Thu Feb 14 13:52:12 2013 +0100 @@ -0,0 +1,1 @@ +ok