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    /**
008     * Represents a JavaScript catch clause.
009     */
010    public class JsCatch extends SourceInfoAwareJsNode implements HasCondition {
011    
012        protected final JsCatchScope scope;
013        private JsBlock body;
014        private JsExpression condition;
015        private JsParameter param;
016    
017        public JsCatch(JsScope parent, String ident) {
018            super();
019            assert (parent != null);
020            scope = new JsCatchScope(parent, ident);
021            param = new JsParameter(scope.findName(ident));
022        }
023    
024        public JsBlock getBody() {
025            return body;
026        }
027    
028        @Override
029        public JsExpression getCondition() {
030            return condition;
031        }
032    
033        public JsParameter getParameter() {
034            return param;
035        }
036    
037        public JsScope getScope() {
038            return scope;
039        }
040    
041        public void setBody(JsBlock body) {
042            this.body = body;
043        }
044    
045        @Override
046        public void setCondition(JsExpression condition) {
047            this.condition = condition;
048        }
049    
050        @Override
051        public void accept(JsVisitor v) {
052            v.visitCatch(this);
053        }
054    
055        @Override
056        public void acceptChildren(JsVisitor visitor) {
057            visitor.accept(param);
058            if (condition != null) {
059                visitor.accept(condition);
060            }
061            visitor.accept(body);
062        }
063    }