Mercurial > hg > openjdk > jigsaw > nashorn
changeset 90:d086c3eead6b
8008206: The allInteger case for SwitchNode generation in CodeGenerator assumes integer LITERALS only.
Reviewed-by: sundar, jlaskey
author | lagergren |
---|---|
date | Thu, 14 Feb 2013 13:52:12 +0100 |
parents | 5a820fb11814 |
children | 3df0a0d62d60 |
files | src/jdk/nashorn/internal/codegen/Attr.java src/jdk/nashorn/internal/codegen/CodeGenerator.java test/script/basic/JDK-8008206.js test/script/basic/JDK-8008206.js.EXPECTED |
diffstat | 4 files changed, 42 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/internal/codegen/Attr.java Thu Feb 14 13:22:26 2013 +0100 +++ b/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());
--- a/src/jdk/nashorn/internal/codegen/CodeGenerator.java Thu Feb 14 13:22:26 2013 +0100 +++ b/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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/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"); +}