package st.gravel.support.compiler.ast; /* This file is automatically generated from typed smalltalk source. Do not edit by hand. (C) AG5.com */ import java.math.BigInteger; import st.gravel.support.jvm.NonLocalReturn; import st.gravel.support.compiler.ast.NodeCopier; import st.gravel.support.compiler.ast.NodeCopier.NodeCopier_Factory; import java.util.Map; import st.gravel.support.compiler.ast.Statement; import st.gravel.support.compiler.ast.MessageNode; import st.gravel.support.compiler.ast.BinaryMessageNode; import st.gravel.support.compiler.ast.CascadeNode; import st.gravel.support.compiler.ast.Expression; import st.gravel.support.compiler.ast.InlineExpressionCollection; import st.gravel.support.compiler.ast.KeywordMessageNode; import st.gravel.support.compiler.ast.UnaryMessageNode; abstract public class MessageSendRewriter extends NodeCopier implements Cloneable { public static MessageSendRewriter_Factory factory = new MessageSendRewriter_Factory(); Map<st.gravel.core.Symbol, st.gravel.support.jvm.Block1<Statement, MessageNode>> _specialSelectors; public static class MessageSendRewriter_Factory extends NodeCopier_Factory { public MessageSendRewriter basicNew() { throw new RuntimeException("MessageSendRewriter is an abstract class"); } } public MessageSendRewriter copy() { try { MessageSendRewriter _temp1 = (MessageSendRewriter) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } public MessageSendRewriter_Factory factory() { return factory; } @Override public MessageSendRewriter initialize() { super.initialize(); this.initializeSpecialSelectors(); return this; } public abstract MessageSendRewriter initializeSpecialSelectors(); @Override public Statement visitBinaryMessageNode_(final BinaryMessageNode _anObject) { final st.gravel.core.Symbol _selector; final st.gravel.support.jvm.Block1<Statement, MessageNode> _res; _selector = st.gravel.core.Symbol.value(_anObject.selector()); st.gravel.support.jvm.Block1<Statement, MessageNode> _temp1 = _specialSelectors.get(_selector); _res = ((st.gravel.support.jvm.Block1<Statement, MessageNode>) _temp1); if (_res != null) { final Statement _trans; _trans = _res.value_(_anObject); if (_trans != null) { return _trans; } } return super.visitBinaryMessageNode_(_anObject); } @Override public Expression visitCascadeNode_(final CascadeNode _anObject) { final Expression[] _expressions; _expressions = st.gravel.support.jvm.ArrayExtensions.collect_(_anObject.messages(), ((st.gravel.support.jvm.Block1<Expression, MessageNode>) (new st.gravel.support.jvm.Block1<Expression, MessageNode>() { @Override public Expression value_(final MessageNode _each) { return (Expression) MessageSendRewriter.this.visit_(_each); } }))); if (st.gravel.support.jvm.ArrayExtensions.anySatisfy_(_expressions, new st.gravel.support.jvm.Predicate1<Expression>() { @Override public boolean value_(final Expression _each) { return !_each.isMessageNode(); } })) { return InlineExpressionCollection.factory.expressions_(_expressions); } return CascadeNode.factory.messages_(st.gravel.support.jvm.ArrayExtensions.collect_(_expressions, ((st.gravel.support.jvm.Block1<MessageNode, Expression>) (new st.gravel.support.jvm.Block1<MessageNode, Expression>() { @Override public MessageNode value_(final Expression _each) { return (MessageNode) _each; } })))); } @Override public Statement visitKeywordMessageNode_(final KeywordMessageNode _anObject) { final st.gravel.core.Symbol _selector; final st.gravel.support.jvm.Block1<Statement, MessageNode> _res; _selector = st.gravel.core.Symbol.value(_anObject.selector()); st.gravel.support.jvm.Block1<Statement, MessageNode> _temp1 = _specialSelectors.get(_selector); _res = ((st.gravel.support.jvm.Block1<Statement, MessageNode>) _temp1); if (_res != null) { final Statement _trans; _trans = _res.value_(_anObject); if (_trans != null) { return _trans; } } return super.visitKeywordMessageNode_(_anObject); } @Override public Statement visitUnaryMessageNode_(final UnaryMessageNode _anObject) { final st.gravel.core.Symbol _selector; final st.gravel.support.jvm.Block1<Statement, MessageNode> _res; _selector = st.gravel.core.Symbol.value(_anObject.selector()); st.gravel.support.jvm.Block1<Statement, MessageNode> _temp1 = _specialSelectors.get(_selector); _res = ((st.gravel.support.jvm.Block1<Statement, MessageNode>) _temp1); if (_res != null) { final Statement _trans; _trans = _res.value_(_anObject); if (_trans != null) { return _trans; } } return super.visitUnaryMessageNode_(_anObject); } }