package polyglot.ext.jl.ast;

import polyglot.ast.*;
import polyglot.types.*;
import polyglot.visit.*;
import polyglot.util.*;
import java.util.*;

/**
 * A <code>AmbAssign</code> represents a Java assignment expression to
 * an as yet unknown expression.
 */
public class AmbAssign_c extends Assign_c implements AmbAssign
{
  public AmbAssign_c(Position pos, Expr left, Operator op, Expr right) {
    super(pos, left, op, right);
  }

  public Term entry() {
    if (operator() != Assign.ASSIGN) {
      return left();
    }

    return right().entry();
  }
  
  protected void acceptCFGAssign(CFGBuilder v) {
      v.visitCFG(right(), this);
  }
  
  protected void acceptCFGOpAssign(CFGBuilder v) {
      v.edge(left(), right().entry());
      v.visitCFG(right(), this);
  }
  
  public Node disambiguate(AmbiguityRemover ar) throws SemanticException {
      Assign n = (Assign) super.disambiguate(ar);
      
      if (n.left() instanceof Local) {
          return ar.nodeFactory().LocalAssign(n.position(), (Local)left(), operator(), right());
      }
      else if (n.left() instanceof Field) {
          return ar.nodeFactory().FieldAssign(n.position(), (Field)left(), operator(), right());
      } 
      else if (n.left() instanceof ArrayAccess) {
          return ar.nodeFactory().ArrayAccessAssign(n.position(), (ArrayAccess)left(), operator(), right());
      }

      new Exception().printStackTrace();
      throw new SemanticException("Could not disambiguate left side of assignment!", n.position());
  }
  
}

package polyglot.ext.jl.ast;

import polyglot.ast.*;
import polyglot.types.*;
import polyglot.visit.*;
import polyglot.util.*;
import java.util.*;

/**
 * A <code>AmbAssign</code> represents a Java assignment expression to
 * an as yet unknown expression.
 */
public class AmbAssign_c extends Assign_c implements AmbAssign
{
  public AmbAssign_c(Position pos, Expr left, Operator op, Expr right) {
    super(pos, left, op, right);
  }

  public Term entry() {
    if (operator() != Assign.ASSIGN) {
      return left();
    }

    return right().entry();
  }
  
  protected void acceptCFGAssign(CFGBuilder v) {
      v.visitCFG(right(), this);
  }
  
  protected void acceptCFGOpAssign(CFGBuilder v) {
      v.edge(left(), right().entry());
      v.visitCFG(right(), this);
  }
  
  public Node disambiguate(AmbiguityRemover ar) throws SemanticException {
      Assign n = (Assign) super.disambiguate(ar);
      
      if (n.left() instanceof Local) {
          return ar.nodeFactory().LocalAssign(n.position(), (Local)left(), operator(), right());
      }
      else if (n.left() instanceof Field) {
          return ar.nodeFactory().FieldAssign(n.position(), (Field)left(), operator(), right());
      } 
      else if (n.left() instanceof ArrayAccess) {
          return ar.nodeFactory().ArrayAccessAssign(n.position(), (ArrayAccess)left(), operator(), right());
      }

      throw new SemanticException("Could not disambiguate left side of assignment!", n.position());
  }
  
}

Remove stacktrace printout. (oops -- this was my fault)