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 com.google.dart.compiler.backend.js.ast; 006 007 import com.google.dart.compiler.common.Symbol; 008 import com.google.dart.compiler.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 final 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 Symbol getSymbol() { 035 return label; 036 } 037 038 public JsStatement getStatement() { 039 return statement; 040 } 041 042 public void setStatement(JsStatement statement) { 043 this.statement = statement; 044 } 045 046 @Override 047 public void accept(JsVisitor v) { 048 v.visitLabel(this); 049 } 050 051 @Override 052 public void acceptChildren(JsVisitor visitor) { 053 visitor.accept(statement); 054 } 055 056 @Override 057 public void traverse(JsVisitorWithContext v, JsContext ctx) { 058 if (v.visit(this, ctx)) { 059 statement = v.acceptStatement(statement); 060 } 061 v.endVisit(this, ctx); 062 } 063 064 @NotNull 065 @Override 066 public JsLabel deepCopy() { 067 return new JsLabel(label, AstUtil.deepCopy(statement.deepCopy())).withMetadataFrom(this); 068 } 069 }