001 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
002 // for details. All rights reserved. Use of this source code is governed by a
003 // BSD-style license that can be found in the LICENSE file.
004
005 package org.jetbrains.kotlin.js.backend.ast;
006
007 import org.jetbrains.kotlin.js.common.Symbol;
008 import org.jetbrains.kotlin.js.util.AstUtil;
009 import org.jetbrains.annotations.NotNull;
010
011 /**
012 * Represents a JavaScript label statement.
013 */
014 public class JsLabel extends SourceInfoAwareJsNode implements JsStatement, HasName {
015 private JsName label;
016
017 private JsStatement statement;
018
019 public JsLabel(JsName label) {
020 this.label = label;
021 }
022
023 public JsLabel(JsName label, JsStatement statement) {
024 this.label = label;
025 this.statement = statement;
026 }
027
028 @Override
029 public JsName getName() {
030 return label;
031 }
032
033 @Override
034 public void setName(JsName name) {
035 label = name;
036 }
037
038 @Override
039 public Symbol getSymbol() {
040 return label;
041 }
042
043 public JsStatement getStatement() {
044 return statement;
045 }
046
047 public void setStatement(JsStatement statement) {
048 this.statement = statement;
049 }
050
051 @Override
052 public void accept(JsVisitor v) {
053 v.visitLabel(this);
054 }
055
056 @Override
057 public void acceptChildren(JsVisitor visitor) {
058 visitor.accept(statement);
059 }
060
061 @Override
062 public void traverse(JsVisitorWithContext v, JsContext ctx) {
063 if (v.visit(this, ctx)) {
064 statement = v.acceptStatement(statement);
065 }
066 v.endVisit(this, ctx);
067 }
068
069 @NotNull
070 @Override
071 public JsLabel deepCopy() {
072 return new JsLabel(label, AstUtil.deepCopy(statement.deepCopy())).withMetadataFrom(this);
073 }
074 }