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    }