Package st.gravel.support.compiler.ast

Source Code of st.gravel.support.compiler.ast.VariableAccessToFieldAccessConverter$VariableAccessToFieldAccessConverter_Factory

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

Related Classes of st.gravel.support.compiler.ast.VariableAccessToFieldAccessConverter$VariableAccessToFieldAccessConverter_Factory

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.