src/jdk/nashorn/internal/ir/LabelNode.java

Thu, 14 Feb 2013 14:07:53 +0100

author
hannesw
date
Thu, 14 Feb 2013 14:07:53 +0100
changeset 93
d1ce4e09e4ba
parent 16
69a4f0363d0f
child 96
e478708faa22
permissions
-rw-r--r--

8008198: java.lang.AssertionError: Invalid break target class jdk.nashorn.internal.ir.TryNode
Reviewed-by: attila, jlaskey

jlaskey@3 1 /*
jlaskey@7 2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
jlaskey@3 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jlaskey@3 4 *
jlaskey@3 5 * This code is free software; you can redistribute it and/or modify it
jlaskey@3 6 * under the terms of the GNU General Public License version 2 only, as
jlaskey@3 7 * published by the Free Software Foundation. Oracle designates this
jlaskey@3 8 * particular file as subject to the "Classpath" exception as provided
jlaskey@3 9 * by Oracle in the LICENSE file that accompanied this code.
jlaskey@3 10 *
jlaskey@3 11 * This code is distributed in the hope that it will be useful, but WITHOUT
jlaskey@3 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jlaskey@3 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
jlaskey@3 14 * version 2 for more details (a copy is included in the LICENSE file that
jlaskey@3 15 * accompanied this code).
jlaskey@3 16 *
jlaskey@3 17 * You should have received a copy of the GNU General Public License version
jlaskey@3 18 * 2 along with this work; if not, write to the Free Software Foundation,
jlaskey@3 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jlaskey@3 20 *
jlaskey@3 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
jlaskey@3 22 * or visit www.oracle.com if you need additional information or have any
jlaskey@3 23 * questions.
jlaskey@3 24 */
jlaskey@3 25
jlaskey@3 26 package jdk.nashorn.internal.ir;
jlaskey@3 27
lagergren@16 28 import jdk.nashorn.internal.ir.annotations.Ignore;
jlaskey@3 29 import jdk.nashorn.internal.ir.visitor.NodeVisitor;
jlaskey@3 30 import jdk.nashorn.internal.runtime.Source;
jlaskey@3 31
jlaskey@3 32 /**
jlaskey@3 33 * IR representation for a labeled statement.
jlaskey@3 34 *
jlaskey@3 35 */
jlaskey@3 36
jlaskey@3 37 public class LabelNode extends Node {
jlaskey@3 38 /** Label ident. */
jlaskey@3 39 private IdentNode label;
jlaskey@3 40
jlaskey@3 41 /** Statements. */
jlaskey@3 42 private Block body;
jlaskey@3 43
jlaskey@3 44 /** Node to break from. */
lagergren@16 45 @Ignore
jlaskey@3 46 private Node breakNode;
jlaskey@3 47
jlaskey@3 48 /** Node to continue. */
lagergren@16 49 @Ignore
jlaskey@3 50 private Node continueNode;
jlaskey@3 51
jlaskey@3 52 /**
jlaskey@3 53 * Constructor
jlaskey@3 54 *
jlaskey@3 55 * @param source the source
jlaskey@3 56 * @param token token
jlaskey@3 57 * @param finish finish
jlaskey@3 58 * @param label label identifier
jlaskey@3 59 * @param body body of label node
jlaskey@3 60 */
jlaskey@3 61 public LabelNode(final Source source, final long token, final int finish, final IdentNode label, final Block body) {
jlaskey@3 62 super(source, token, finish);
jlaskey@3 63
jlaskey@3 64 this.label = label;
jlaskey@3 65 this.body = body;
jlaskey@3 66 }
jlaskey@3 67
jlaskey@3 68 private LabelNode(final LabelNode labelNode, final CopyState cs) {
jlaskey@3 69 super(labelNode);
jlaskey@3 70
jlaskey@3 71 label = (IdentNode)cs.existingOrCopy(labelNode.label);
jlaskey@3 72 body = (Block)cs.existingOrCopy(labelNode.body);
jlaskey@3 73 breakNode = cs.existingOrSame(labelNode.breakNode);
jlaskey@3 74 continueNode = cs.existingOrSame(labelNode.continueNode);
jlaskey@3 75 }
jlaskey@3 76
jlaskey@3 77 @Override
jlaskey@3 78 protected Node copy(final CopyState cs) {
jlaskey@3 79 return new LabelNode(this, cs);
jlaskey@3 80 }
jlaskey@3 81
jlaskey@3 82 @Override
jlaskey@3 83 public Node accept(final NodeVisitor visitor) {
jlaskey@3 84 if (visitor.enter(this) != null) {
jlaskey@3 85 label = (IdentNode)label.accept(visitor);
jlaskey@3 86 body = (Block)body.accept(visitor);
jlaskey@3 87 return visitor.leave(this);
jlaskey@3 88 }
jlaskey@3 89
jlaskey@3 90 return this;
jlaskey@3 91 }
jlaskey@3 92
jlaskey@3 93 @Override
jlaskey@3 94 public void toString(final StringBuilder sb) {
jlaskey@3 95 label.toString(sb);
jlaskey@3 96 sb.append(':');
jlaskey@3 97 }
jlaskey@3 98
jlaskey@3 99 /**
jlaskey@3 100 * Get the body of the node
jlaskey@3 101 * @return the body
jlaskey@3 102 */
jlaskey@3 103 public Block getBody() {
jlaskey@3 104 return body;
jlaskey@3 105 }
jlaskey@3 106
jlaskey@3 107 /**
jlaskey@3 108 * Reset the body of the node
jlaskey@3 109 * @param body new body
jlaskey@3 110 */
jlaskey@3 111 public void setBody(final Block body) {
jlaskey@3 112 this.body = body;
jlaskey@3 113 }
jlaskey@3 114
jlaskey@3 115 /**
jlaskey@3 116 * Get the break node for this node
jlaskey@3 117 * @return the break node
jlaskey@3 118 */
jlaskey@3 119 public Node getBreakNode() {
jlaskey@3 120 return breakNode;
jlaskey@3 121 }
jlaskey@3 122
jlaskey@3 123 /**
jlaskey@3 124 * Reset the break node for this node
jlaskey@3 125 * @param breakNode the break node
jlaskey@3 126 */
jlaskey@3 127 public void setBreakNode(final Node breakNode) {
hannesw@93 128 assert breakNode instanceof BreakableNode || breakNode instanceof Block : "Invalid break node: " + breakNode;
jlaskey@3 129 this.breakNode = breakNode;
jlaskey@3 130 }
jlaskey@3 131
jlaskey@3 132 /**
jlaskey@3 133 * Get the continue node for this node
jlaskey@3 134 * @return the continue node
jlaskey@3 135 */
jlaskey@3 136 public Node getContinueNode() {
jlaskey@3 137 return continueNode;
jlaskey@3 138 }
jlaskey@3 139
jlaskey@3 140 /**
jlaskey@3 141 * Reset the continue node for this node
jlaskey@3 142 * @param continueNode the continue node
jlaskey@3 143 */
jlaskey@3 144 public void setContinueNode(final Node continueNode) {
hannesw@93 145 assert continueNode instanceof WhileNode : "invalid continue node: " + continueNode;
jlaskey@3 146 this.continueNode = continueNode;
jlaskey@3 147 }
jlaskey@3 148
jlaskey@3 149 /**
jlaskey@3 150 * Get the identifier representing the label name
jlaskey@3 151 * @return the label
jlaskey@3 152 */
jlaskey@3 153 public IdentNode getLabel() {
jlaskey@3 154 return label;
jlaskey@3 155 }
jlaskey@3 156
jlaskey@3 157 }

mercurial