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 public class JsForIn extends SourceInfoAwareJsNode implements JsStatement {
008 private JsStatement body;
009 private JsExpression iterExpression;
010 private JsExpression objectExpression;
011
012 // Optional: the name of a new iterator variable to introduce
013 private final JsName iterVarName;
014
015 public JsForIn() {
016 this(null);
017 }
018
019 public JsForIn(JsName iterVarName) {
020 this.iterVarName = iterVarName;
021 }
022
023 public JsStatement getBody() {
024 return body;
025 }
026
027 public JsExpression getIterExpression() {
028 return iterExpression;
029 }
030
031 public JsName getIterVarName() {
032 return iterVarName;
033 }
034
035 public JsExpression getObjectExpression() {
036 return objectExpression;
037 }
038
039 public void setBody(JsStatement body) {
040 this.body = body;
041 }
042
043 public void setIterExpression(JsExpression iterExpression) {
044 this.iterExpression = iterExpression;
045 }
046
047 public void setObjectExpression(JsExpression objectExpression) {
048 this.objectExpression = objectExpression;
049 }
050
051 @Override
052 public void accept(JsVisitor v) {
053 v.visitForIn(this);
054 }
055
056 @Override
057 public void acceptChildren(JsVisitor visitor) {
058 if (iterExpression != null) {
059 visitor.acceptLvalue(iterExpression);
060 }
061 visitor.accept(objectExpression);
062 visitor.accept(body);
063 }
064 }