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.VariableDeclarationNode; import st.gravel.support.compiler.ast.Expression; import st.gravel.support.compiler.ast.Reference; import st.gravel.support.compiler.ast.AbsoluteReference; import st.gravel.support.compiler.ast.AssignmentNode; import st.gravel.support.compiler.ast.LocalWriteNode; import st.gravel.support.compiler.ast.FieldWriteNode; import st.gravel.support.compiler.ast.GlobalWriteNode; import st.gravel.support.compiler.ast.VariableNode; import st.gravel.support.compiler.ast.SelfNode; import st.gravel.support.compiler.ast.SuperNode; import st.gravel.support.compiler.ast.LocalReadNode; import st.gravel.support.compiler.ast.FieldReadNode; import st.gravel.support.compiler.ast.GlobalReadNode; import java.util.HashSet; public class VariableAccessToFieldAccessConverter extends NodeCopierWithLocals implements Cloneable { public static VariableAccessToFieldAccessConverter_Factory factory = new VariableAccessToFieldAccessConverter_Factory(); VariableDeclarationNode[] _instVars; AbsoluteReference _namespace; Expression _owner; Reference _ownerReference; public static class VariableAccessToFieldAccessConverter_Factory extends NodeCopierWithLocals_Factory { public VariableAccessToFieldAccessConverter basicNew() { VariableAccessToFieldAccessConverter newInstance = new VariableAccessToFieldAccessConverter(); newInstance.initialize(); return newInstance; } public VariableAccessToFieldAccessConverter instVars_owner_ownerReference_(final VariableDeclarationNode[] _instVars, final Expression _owner, final Reference _ownerReference) { return ((VariableAccessToFieldAccessConverter) this.instVars_owner_ownerReference_namespace_(_instVars, _owner, _ownerReference, _ownerReference.nonmeta())); } public VariableAccessToFieldAccessConverter instVars_owner_ownerReference_namespace_(final VariableDeclarationNode[] _anArray, final Expression _anExpression, final Reference _anObject1, final AbsoluteReference _anObject) { return ((VariableAccessToFieldAccessConverter) this.basicNew().initializeInstVars_owner_ownerReference_namespace_(_anArray, _anExpression, _anObject1, _anObject)); } } static public VariableAccessToFieldAccessConverter _instVars_owner_ownerReference_(Object receiver, final VariableDeclarationNode[] _instVars, final Expression _owner, final Reference _ownerReference) { return factory.instVars_owner_ownerReference_(_instVars, _owner, _ownerReference); } static public VariableAccessToFieldAccessConverter _instVars_owner_ownerReference_namespace_(Object receiver, final VariableDeclarationNode[] _anArray, final Expression _anExpression, final Reference _anObject1, final AbsoluteReference _anObject) { return factory.instVars_owner_ownerReference_namespace_(_anArray, _anExpression, _anObject1, _anObject); } @Override public VariableAccessToFieldAccessConverter addLocalName_(final String _name) { _localNames.add(_name); return this; } public VariableAccessToFieldAccessConverter copy() { try { VariableAccessToFieldAccessConverter _temp1 = (VariableAccessToFieldAccessConverter) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } public VariableAccessToFieldAccessConverter_Factory factory() { return factory; } @Override public VariableAccessToFieldAccessConverter initialize() { super.initialize(); _localNames = new java.util.HashSet(); return this; } public VariableAccessToFieldAccessConverter initializeInstVars_owner_ownerReference_namespace_(final VariableDeclarationNode[] _anArray, final Expression _anExpression, final Reference _anObject2, final AbsoluteReference _anObject) { _instVars = _anArray; _owner = _anExpression; _namespace = _anObject; _ownerReference = _anObject2; this.initialize(); return this; } public VariableDeclarationNode instVarAt_(final String _varName) { return ((VariableDeclarationNode) st.gravel.support.jvm.ArrayExtensions.detect_ifNone_(_instVars, new st.gravel.support.jvm.Predicate1<VariableDeclarationNode>() { @Override public boolean value_(final VariableDeclarationNode _node) { return st.gravel.support.jvm.StringExtensions.equals_(_node.name(), _varName); } }, ((st.gravel.support.jvm.Block0<VariableDeclarationNode>) (new st.gravel.support.jvm.Block0<VariableDeclarationNode>() { @Override public VariableDeclarationNode value() { return (VariableDeclarationNode) null; } })))); } public VariableDeclarationNode[] instVars() { return _instVars; } public Expression owner() { return _owner; } public Reference ownerReference() { return _ownerReference; } @Override public VariableAccessToFieldAccessConverter postCopy() { super.postCopy(); _localNames = st.gravel.support.jvm.SetExtensions.copy(_localNames); return this; } @Override public VariableAccessToFieldAccessConverter subconverter() { return this.copy(); } @Override public Expression visitAssignmentNode_(final AssignmentNode _anObject) { final VariableDeclarationNode _instVar; if (this.includesLocalName_(_anObject.variable().name())) { return LocalWriteNode.factory.name_value_(_anObject.variable().name(), ((Expression) VariableAccessToFieldAccessConverter.this.visit_(_anObject.value()))); } _instVar = this.instVarAt_(_anObject.variable().name()); if (_instVar != null) { return FieldWriteNode.factory.owner_field_type_value_(_owner, _instVar.name(), _instVar.type(), ((Expression) VariableAccessToFieldAccessConverter.this.visit_(_anObject.value()))); } return GlobalWriteNode.factory.namespace_name_value_(_namespace, _anObject.variable().name(), ((Expression) this.visit_(_anObject.value()))); } @Override public Expression visitVariableNode_(final VariableNode _anObject) { final VariableDeclarationNode _instVar; if (st.gravel.support.jvm.StringExtensions.equals_(_anObject.name(), "self")) { return SelfNode.factory.basicNew(); } if (st.gravel.support.jvm.StringExtensions.equals_(_anObject.name(), "super")) { return SuperNode.factory.reference_(_ownerReference); } if (this.includesLocalName_(_anObject.name())) { return LocalReadNode.factory.name_(_anObject.name()); } _instVar = this.instVarAt_(_anObject.name()); if (_instVar != null) { return FieldReadNode.factory.owner_field_type_(_owner, _instVar.name(), _instVar.type()); } return GlobalReadNode.factory.namespace_name_(_namespace, _anObject.name()); } }