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 st.gravel.support.compiler.ast.HolderDeclarationNode;
import st.gravel.support.compiler.ast.TypeNode;
import st.gravel.support.compiler.ast.ToDoNode;
import st.gravel.support.compiler.ast.Expression;
import st.gravel.support.compiler.ast.SequenceNode;
import st.gravel.support.compiler.ast.VariableDeclarationNode;
import st.gravel.support.compiler.ast.FieldReadNode;
import st.gravel.support.compiler.ast.FieldWriteNode;
import st.gravel.support.compiler.ast.GlobalReadNode;
import st.gravel.support.compiler.ast.GlobalWriteNode;
import st.gravel.support.compiler.ast.LocalReadNode;
import st.gravel.support.compiler.ast.LocalWriteNode;
import st.gravel.support.compiler.ast.NonLocalReturnNode;
import st.gravel.support.compiler.ast.Statement;
import st.gravel.support.compiler.ast.ReadHolderNode;
import st.gravel.support.compiler.ast.SelfNode;
import st.gravel.support.compiler.ast.VariableNode;
import st.gravel.support.compiler.ast.SuperNode;
import st.gravel.support.compiler.ast.WriteHolderNode;
import java.util.HashSet;
abstract public class AbstractVariableRenamer extends NodeCopierWithLocals implements Cloneable {
public static AbstractVariableRenamer_Factory factory = new AbstractVariableRenamer_Factory();
String _newName;
String _oldName;
public static class AbstractVariableRenamer_Factory extends NodeCopierWithLocals_Factory {
public AbstractVariableRenamer basicNew() {
throw new RuntimeException("AbstractVariableRenamer is an abstract class");
}
public Node in_rename_to_(final Node _aNode, final String _oldName, final String _newName) {
if (st.gravel.support.jvm.StringExtensions.equals_(_oldName, _newName)) {
return _aNode;
}
return this.oldName_newName_(_oldName, _newName).visit_(_aNode);
}
public AbstractVariableRenamer oldName_newName_(final String _aString, final String _aString2) {
return ((AbstractVariableRenamer) this.basicNew().initializeOldName_newName_(_aString, _aString2));
}
}
static public Node _in_rename_to_(Object receiver, final Node _aNode, final String _oldName, final String _newName) {
return factory.in_rename_to_(_aNode, _oldName, _newName);
}
static public AbstractVariableRenamer _oldName_newName_(Object receiver, final String _aString, final String _aString2) {
return factory.oldName_newName_(_aString, _aString2);
}
@Override
public AbstractVariableRenamer addLocalName_(final String _name) {
_localNames.add(_name);
return this;
}
public AbstractVariableRenamer copy() {
try {
AbstractVariableRenamer _temp1 = (AbstractVariableRenamer) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public AbstractVariableRenamer_Factory factory() {
return factory;
}
@Override
public AbstractVariableRenamer initialize() {
super.initialize();
_localNames = new java.util.HashSet();
return this;
}
public AbstractVariableRenamer initializeOldName_newName_(final String _aString, final String _aString2) {
_oldName = _aString;
_newName = _aString2;
this.initialize();
return this;
}
public String newName() {
return _newName;
}
public String oldName() {
return _oldName;
}
@Override
public AbstractVariableRenamer postCopy() {
super.postCopy();
_localNames = st.gravel.support.jvm.SetExtensions.copy(_localNames);
return this;
}
@Override
public HolderDeclarationNode produceHolderDeclarationNode_(final HolderDeclarationNode _anObject) {
return HolderDeclarationNode.factory.name_type_(this.renameDefinition_(_anObject.name()), ((TypeNode) this.visit_(_anObject.type())));
}
@Override
public ToDoNode produceToDoNode_(final ToDoNode _anObject) {
return ToDoNode.factory.start_stop_step_counterName_doSequence_(((Expression) this.visit_(_anObject.start())), ((Expression) this.visit_(_anObject.stop())), ((Expression) this.visit_(_anObject.step())), this.renameDefinition_(_anObject.counterName()), ((SequenceNode) this.visit_(_anObject.doSequence())));
}
@Override
public VariableDeclarationNode produceVariableDeclarationNode_(final VariableDeclarationNode _anObject) {
return VariableDeclarationNode.factory.name_type_(this.renameDefinition_(_anObject.name()), ((TypeNode) this.visit_(_anObject.type())));
}
public abstract String renameDefinition_(final String _aString);
public abstract String rename_(final String _aString);
@Override
public AbstractVariableRenamer subconverter() {
return this.copy();
}
@Override
public FieldReadNode visitFieldReadNode_(final FieldReadNode _anObject) {
return FieldReadNode.factory.owner_field_type_(((Expression) this.visit_(_anObject.owner())), this.rename_(_anObject.field()), ((TypeNode) this.visit_(_anObject.type())));
}
@Override
public FieldWriteNode visitFieldWriteNode_(final FieldWriteNode _anObject) {
return FieldWriteNode.factory.owner_field_type_value_(((Expression) this.visit_(_anObject.owner())), this.rename_(_anObject.field()), ((TypeNode) this.visit_(_anObject.type())), ((Expression) this.visit_(_anObject.value())));
}
@Override
public GlobalReadNode visitGlobalReadNode_(final GlobalReadNode _anObject) {
return GlobalReadNode.factory.namespace_name_(_anObject.namespace(), this.rename_(_anObject.name()));
}
@Override
public GlobalWriteNode visitGlobalWriteNode_(final GlobalWriteNode _anObject) {
return GlobalWriteNode.factory.namespace_name_value_(_anObject.namespace(), this.rename_(_anObject.name()), ((Expression) this.visit_(_anObject.value())));
}
@Override
public LocalReadNode visitLocalReadNode_(final LocalReadNode _anObject) {
return LocalReadNode.factory.name_(this.rename_(_anObject.name()));
}
@Override
public LocalWriteNode visitLocalWriteNode_(final LocalWriteNode _anObject) {
return LocalWriteNode.factory.name_value_(this.rename_(_anObject.name()), ((Expression) this.visit_(_anObject.value())));
}
@Override
public Statement visitNonLocalReturnNode_(final NonLocalReturnNode _anObject) {
return NonLocalReturnNode.factory.marker_value_(this.rename_(_anObject.marker()), ((Expression) this.visit_(_anObject.value())));
}
@Override
public ReadHolderNode visitReadHolderNode_(final ReadHolderNode _anObject) {
return ReadHolderNode.factory.varName_(this.rename_(_anObject.varName()));
}
@Override
public Expression visitSelfNode_(final SelfNode _anObject) {
if (st.gravel.support.jvm.StringExtensions.equals_(_oldName, "self")) {
return VariableNode.factory.name_(_newName);
}
return _anObject;
}
@Override
public SuperNode visitSuperNode_(final SuperNode _anObject) {
if (st.gravel.support.jvm.StringExtensions.equals_(_oldName, "self")) {
throw new RuntimeException("Cant rename super");
}
return super.visitSuperNode_(_anObject);
}
@Override
public Expression visitVariableNode_(final VariableNode _anObject) {
return VariableNode.factory.name_(this.rename_(_anObject.name()));
}
@Override
public WriteHolderNode visitWriteHolderNode_(final WriteHolderNode _anObject) {
return WriteHolderNode.factory.varName_value_(this.rename_(_anObject.varName()), ((Expression) this.visit_(_anObject.value())));
}
}