Mercurial > hg > openjdk > jigsaw > nashorn
changeset 92:d1ce4e09e4ba
8008198: java.lang.AssertionError: Invalid break target class jdk.nashorn.internal.ir.TryNode
Reviewed-by: attila, jlaskey
author | hannesw |
---|---|
date | Thu, 14 Feb 2013 14:07:53 +0100 |
parents | 3df0a0d62d60 |
children | d41d7cf9ab8b |
files | src/jdk/nashorn/internal/ir/LabelNode.java src/jdk/nashorn/internal/parser/Parser.java test/script/basic/JDK-8008198.js test/script/basic/JDK-8008198.js.EXPECTED |
diffstat | 4 files changed, 65 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/internal/ir/LabelNode.java Thu Feb 14 13:51:54 2013 +0100 +++ b/src/jdk/nashorn/internal/ir/LabelNode.java Thu Feb 14 14:07:53 2013 +0100 @@ -125,6 +125,7 @@ * @param breakNode the break node */ public void setBreakNode(final Node breakNode) { + assert breakNode instanceof BreakableNode || breakNode instanceof Block : "Invalid break node: " + breakNode; this.breakNode = breakNode; } @@ -141,6 +142,7 @@ * @param continueNode the continue node */ public void setContinueNode(final Node continueNode) { + assert continueNode instanceof WhileNode : "invalid continue node: " + continueNode; this.continueNode = continueNode; }
--- a/src/jdk/nashorn/internal/parser/Parser.java Thu Feb 14 13:51:54 2013 +0100 +++ b/src/jdk/nashorn/internal/parser/Parser.java Thu Feb 14 14:07:53 2013 +0100 @@ -498,10 +498,11 @@ */ private void pushControlNode(final Node node) { final boolean isLoop = node instanceof WhileNode; + final boolean isBreakable = node instanceof BreakableNode || node instanceof Block; function.getControlStack().push(node); for (final LabelNode labelNode : function.getLabelStack()) { - if (labelNode.getBreakNode() == null) { + if (isBreakable && labelNode.getBreakNode() == null) { labelNode.setBreakNode(node); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/JDK-8008198.js Thu Feb 14 14:07:53 2013 +0100 @@ -0,0 +1,55 @@ +/* + * 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-8008198 : java.lang.AssertionError: Invalid break target class jdk.nashorn.internal.ir.TryNode + * + * @test + * @run + */ + +a: try { + print("try"); + break a; + print("wrong"); +} catch (e) { + print("error"); +} finally { + print("finally"); +} +print("done"); + +a: b: if (true) { + c: d: with({}) { + print("with"); + break c; + print("wrong"); + } + print("if"); + break a; + print("wrong"); +} +print("done"); + + +