Package st.gravel.support.compiler.ast

Source Code of st.gravel.support.compiler.ast.NonLocalReturnRewriter

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 st.gravel.support.compiler.ast.MethodNode;
import st.gravel.support.compiler.ast.BlockNode;
import st.gravel.support.compiler.ast.NonLocalReturnNode;
import st.gravel.support.compiler.ast.Statement;
import st.gravel.support.compiler.ast.ReturnNode;
import st.gravel.support.compiler.ast.Expression;

public class NonLocalReturnRewriter extends NodeCopier implements Cloneable {

  public static NonLocalReturnRewriter_Factory factory = new NonLocalReturnRewriter_Factory();

  boolean _isInBlockNode;

  String _nlrMarker;

  String _oldNlrMarker;

  public static class NonLocalReturnRewriter_Factory extends NodeCopier_Factory {

    public NonLocalReturnRewriter basicNew() {
      NonLocalReturnRewriter newInstance = new NonLocalReturnRewriter();
      newInstance.initialize();
      return newInstance;
    }

    public NonLocalReturnRewriter nlrMarker_(final String _aString) {
      return this.basicNew().initializeNlrMarker_(_aString);
    }
  }

  static public NonLocalReturnRewriter _nlrMarker_(Object receiver, final String _aString) {
    return factory.nlrMarker_(_aString);
  }

  public NonLocalReturnRewriter copy() {
    try {
      NonLocalReturnRewriter _temp1 = (NonLocalReturnRewriter) this.clone();
      _temp1.postCopy();
      return _temp1;
    } catch (CloneNotSupportedException e) {
      throw new RuntimeException(e);
    }
  }

  public NonLocalReturnRewriter_Factory factory() {
    return factory;
  }

  @Override
  public NonLocalReturnRewriter initialize() {
    super.initialize();
    _isInBlockNode = false;
    return this;
  }

  public NonLocalReturnRewriter initializeNlrMarker_(final String _aString) {
    _nlrMarker = _aString;
    this.initialize();
    return this;
  }

  public String nlrMarker() {
    return _nlrMarker;
  }

  @Override
  public String produceNlrMarkerDefinition_for_(final String _aString, final MethodNode _aMethodNode) {
    _oldNlrMarker = _aString;
    return _aMethodNode.hasNonLocalReturns() ? _nlrMarker : null;
  }

  @Override
  public BlockNode visitBlockNode_(final BlockNode _anObject) {
    final boolean _old;
    final BlockNode _bn;
    _old = _isInBlockNode;
    _isInBlockNode = true;
    _bn = super.visitBlockNode_(_anObject);
    _isInBlockNode = _old;
    return _bn;
  }

  @Override
  public Statement visitNonLocalReturnNode_(final NonLocalReturnNode _anObject) {
    if (st.gravel.support.jvm.StringExtensions.equals_(_oldNlrMarker, _anObject.marker())) {
      if (!_isInBlockNode) {
        return ReturnNode.factory.value_(((Expression) NonLocalReturnRewriter.this.visit_(_anObject.value())));
      }
      return NonLocalReturnNode.factory.marker_value_(_nlrMarker, ((Expression) NonLocalReturnRewriter.this.visit_(_anObject.value())));
    }
    return NonLocalReturnNode.factory.marker_value_(_anObject.marker(), ((Expression) this.visit_(_anObject.value())));
  }

  @Override
  public Statement visitReturnNode_(final ReturnNode _aReturnNode) {
    if (_isInBlockNode) {
      return NonLocalReturnNode.factory.marker_value_(_nlrMarker, ((Expression) NonLocalReturnRewriter.this.visit_(_aReturnNode.value())));
    }
    return super.visitReturnNode_(_aReturnNode);
  }
}
TOP

Related Classes of st.gravel.support.compiler.ast.NonLocalReturnRewriter

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.