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