Package st.gravel.support.compiler.ast

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

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.NodeCopierWithLocals;
import st.gravel.support.compiler.ast.NodeCopierWithLocals.NodeCopierWithLocals_Factory;
import st.gravel.support.compiler.ast.Node;
import java.util.Set;
import st.gravel.support.compiler.ast.Expression;
import st.gravel.support.compiler.ast.LiteralSendInliner;
import st.gravel.support.compiler.ast.LocalDefinedVariableRenamer;
import st.gravel.support.compiler.ast.FieldReadNode;
import st.gravel.support.compiler.ast.GlobalReadNode;
import st.gravel.support.compiler.ast.LocalReadNode;
import st.gravel.support.compiler.ast.SelfNode;
import st.gravel.support.compiler.ast.SuperNode;
import st.gravel.support.compiler.ast.VariableNode;
import java.util.HashSet;

public class VariableNodeReplacer extends NodeCopierWithLocals implements Cloneable {

  public static VariableNodeReplacer_Factory factory = new VariableNodeReplacer_Factory();

  st.gravel.support.jvm.Block1<Expression, java.util.Set<String>> _replacementBlock;

  String _varName;

  public static class VariableNodeReplacer_Factory extends NodeCopierWithLocals_Factory {

    public VariableNodeReplacer basicNew() {
      VariableNodeReplacer newInstance = new VariableNodeReplacer();
      newInstance.initialize();
      return newInstance;
    }

    public Expression for_renameAll_in_(final Node _aNode, final java.util.Set<String> _localNames, final Expression _replacementNode) {
      final LiteralSendInliner _lsi;
      Expression _res;
      _lsi = LiteralSendInliner.factory.basicNew();
      _lsi.initializeRoot_(_aNode);
      _lsi.addUsedNode_(_replacementNode);
      _res = _replacementNode;
      for (final String _oldName : _localNames) {
        final String _newName;
        _newName = _lsi.newTempName_(_oldName);
        _res = ((Expression) LocalDefinedVariableRenamer.factory.in_rename_to_(_res, _oldName, _newName));
      }
      return _res;
    }

    public Node in_replace_with_(final Node _aNode, final String _varName, final Expression _replacementNode) {
      return this.varName_replacementBlock_(_varName, ((st.gravel.support.jvm.Block1<Expression, java.util.Set<String>>) (new st.gravel.support.jvm.Block1<Expression, java.util.Set<String>>() {

        @Override
        public Expression value_(final java.util.Set<String> _localNames) {
          return (Expression) VariableNodeReplacer_Factory.this.for_renameAll_in_(_aNode, _localNames, _replacementNode);
        }
      }))).visit_(_aNode);
    }

    public VariableNodeReplacer varName_replacementBlock_(final String _varName, final st.gravel.support.jvm.Block1<Expression, java.util.Set<String>> _aBlock) {
      return ((VariableNodeReplacer) this.basicNew().initializeVarName_replacementBlock_(_varName, _aBlock));
    }
  }

  static public Expression _for_renameAll_in_(Object receiver, final Node _aNode, final java.util.Set<String> _localNames, final Expression _replacementNode) {
    return factory.for_renameAll_in_(_aNode, _localNames, _replacementNode);
  }

  static public Node _in_replace_with_(Object receiver, final Node _aNode, final String _varName, final Expression _replacementNode) {
    return factory.in_replace_with_(_aNode, _varName, _replacementNode);
  }

  static public VariableNodeReplacer _varName_replacementBlock_(Object receiver, final String _varName, final st.gravel.support.jvm.Block1<Expression, java.util.Set<String>> _aBlock) {
    return factory.varName_replacementBlock_(_varName, _aBlock);
  }

  @Override
  public VariableNodeReplacer addLocalName_(final String _name) {
    _localNames.add(_name);
    return this;
  }

  public Expression buildReplacement() {
    return _replacementBlock.value_(_localNames);
  }

  public VariableNodeReplacer copy() {
    try {
      VariableNodeReplacer _temp1 = (VariableNodeReplacer) this.clone();
      _temp1.postCopy();
      return _temp1;
    } catch (CloneNotSupportedException e) {
      throw new RuntimeException(e);
    }
  }

  public VariableNodeReplacer_Factory factory() {
    return factory;
  }

  @Override
  public VariableNodeReplacer initialize() {
    super.initialize();
    _localNames = new java.util.HashSet();
    return this;
  }

  public VariableNodeReplacer initializeVarName_replacementBlock_(final String _aString, final st.gravel.support.jvm.Block1<Expression, java.util.Set<String>> _aBlock) {
    _varName = _aString;
    _replacementBlock = _aBlock;
    this.initialize();
    return this;
  }

  @Override
  public VariableNodeReplacer postCopy() {
    super.postCopy();
    _localNames = st.gravel.support.jvm.SetExtensions.copy(_localNames);
    return this;
  }

  @Override
  public VariableNodeReplacer subconverter() {
    return this.copy();
  }

  public String varName() {
    return _varName;
  }

  @Override
  public Expression visitFieldReadNode_(final FieldReadNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_anObject.name(), _varName)) {
      return VariableNodeReplacer.this.buildReplacement();
    }
    return super.visitFieldReadNode_(_anObject);
  }

  @Override
  public Expression visitGlobalReadNode_(final GlobalReadNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_anObject.name(), _varName)) {
      return VariableNodeReplacer.this.buildReplacement();
    }
    return super.visitGlobalReadNode_(_anObject);
  }

  @Override
  public Expression visitLocalReadNode_(final LocalReadNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_anObject.name(), _varName)) {
      return VariableNodeReplacer.this.buildReplacement();
    }
    return super.visitLocalReadNode_(_anObject);
  }

  @Override
  public Expression visitSelfNode_(final SelfNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_varName, "self")) {
      return VariableNodeReplacer.this.buildReplacement();
    }
    return _anObject;
  }

  @Override
  public SuperNode visitSuperNode_(final SuperNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_varName, "self")) {
      throw new RuntimeException("Cant rename super");
    }
    return super.visitSuperNode_(_anObject);
  }

  @Override
  public Expression visitVariableNode_(final VariableNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_anObject.name(), _varName)) {
      return VariableNodeReplacer.this.buildReplacement();
    }
    return super.visitVariableNode_(_anObject);
  }
}
TOP

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

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.