Package st.gravel.support.compiler.ast

Source Code of st.gravel.support.compiler.ast.MessageSendRewriter

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);
  }
}
TOP

Related Classes of st.gravel.support.compiler.ast.MessageSendRewriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.