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.util.AstUtil;
008 import org.jetbrains.annotations.NotNull;
009
010 /**
011 * A JavaScript <code>while</code> statement.
012 */
013 public class JsWhile extends SourceInfoAwareJsNode implements JsStatement {
014 protected JsStatement body;
015 protected JsExpression condition;
016
017 public JsWhile() {
018 }
019
020 public JsWhile(JsExpression condition, JsStatement body) {
021 this.condition = condition;
022 this.body = body;
023 }
024
025 public JsStatement getBody() {
026 return body;
027 }
028
029 public JsExpression getCondition() {
030 return condition;
031 }
032
033 public void setBody(JsStatement body) {
034 this.body = body;
035 }
036
037 public void setCondition(JsExpression condition) {
038 this.condition = condition;
039 }
040
041 @Override
042 public void accept(JsVisitor v) {
043 v.visitWhile(this);
044 }
045
046 @Override
047 public void acceptChildren(JsVisitor visitor) {
048 visitor.accept(condition);
049 visitor.accept(body);
050 }
051
052 @Override
053 public void traverse(JsVisitorWithContext v, JsContext ctx) {
054 if (v.visit(this, ctx)) {
055 condition = v.accept(condition);
056 body = v.acceptStatement(body);
057 }
058 v.endVisit(this, ctx);
059 }
060
061 @NotNull
062 @Override
063 public JsWhile deepCopy() {
064 JsExpression conditionCopy = AstUtil.deepCopy(condition);
065 JsStatement bodyCopy = AstUtil.deepCopy(body);
066
067 return new JsWhile(conditionCopy, bodyCopy).withMetadataFrom(this);
068 }
069 }