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.Set;
import java.util.HashSet;
import st.gravel.support.compiler.ast.BlockNode;
import st.gravel.support.compiler.ast.BoundVariableDeclarationNode;
import st.gravel.support.compiler.ast.HolderDeclarationNode;
import st.gravel.support.compiler.ast.ToDoNode;
import st.gravel.support.compiler.ast.VariableDeclarationNode;
public class NodeCopierWithLocals extends NodeCopier implements Cloneable {
public static NodeCopierWithLocals_Factory factory = new NodeCopierWithLocals_Factory();
java.util.Set<String> _localNames;
public static class NodeCopierWithLocals_Factory extends NodeCopier_Factory {
public NodeCopierWithLocals basicNew() {
NodeCopierWithLocals newInstance = new NodeCopierWithLocals();
newInstance.initialize();
return newInstance;
}
}
public NodeCopierWithLocals addLocalName_(final String _name) {
_localNames.add(_name);
return this;
}
public NodeCopierWithLocals copy() {
try {
NodeCopierWithLocals _temp1 = (NodeCopierWithLocals) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public NodeCopierWithLocals_Factory factory() {
return factory;
}
public boolean includesLocalName_(final String _name) {
return _localNames.contains(_name);
}
@Override
public NodeCopierWithLocals initialize() {
super.initialize();
_localNames = new java.util.HashSet();
return this;
}
public NodeCopierWithLocals postCopy() {
super.postCopy();
_localNames = st.gravel.support.jvm.SetExtensions.copy(_localNames);
return this;
}
public BlockNode produceBlockNode_(final BlockNode _anObject) {
return super.visitBlockNode_(_anObject);
}
public BoundVariableDeclarationNode produceBoundVariableDeclarationNode_(final BoundVariableDeclarationNode _anObject) {
return super.visitBoundVariableDeclarationNode_(_anObject);
}
public HolderDeclarationNode produceHolderDeclarationNode_(final HolderDeclarationNode _anObject) {
return super.visitHolderDeclarationNode_(_anObject);
}
public ToDoNode produceToDoNode_(final ToDoNode _anObject) {
return super.visitToDoNode_(_anObject);
}
public VariableDeclarationNode produceVariableDeclarationNode_(final VariableDeclarationNode _anObject) {
return super.visitVariableDeclarationNode_(_anObject);
}
public NodeCopierWithLocals subconverter() {
return this.copy();
}
@Override
public BlockNode visitBlockNode_(final BlockNode _anObject) {
return this.subconverter().produceBlockNode_(_anObject);
}
@Override
public BoundVariableDeclarationNode visitBoundVariableDeclarationNode_(final BoundVariableDeclarationNode _anObject) {
this.addLocalName_(_anObject.name());
return this.produceBoundVariableDeclarationNode_(_anObject);
}
@Override
public HolderDeclarationNode visitHolderDeclarationNode_(final HolderDeclarationNode _anObject) {
this.addLocalName_(_anObject.name());
return this.produceHolderDeclarationNode_(_anObject);
}
@Override
public ToDoNode visitToDoNode_(final ToDoNode _anObject) {
NodeCopierWithLocals _temp1 = this.subconverter();
_temp1.addLocalName_(_anObject.counterName());
return _temp1.produceToDoNode_(_anObject);
}
@Override
public VariableDeclarationNode visitVariableDeclarationNode_(final VariableDeclarationNode _anObject) {
this.addLocalName_(_anObject.name());
return this.produceVariableDeclarationNode_(_anObject);
}
}