if (!(stmt.getRHS() instanceof ExprFunCall)) {  makeCopy(stmt.getRHS(), stmt.getLHS());  } else {      Expression copy = assignToTemp(stmt.getRHS(),
Expression copy = assignToTemp(stmt.getRHS(),
    public Object visitStmtAssign(StmtAssign stmt)    {	//System.out.println("GenCopies::visitStmtAssign"+	//		   " lhs: "+getType(stmt.getLHS())+	//		   " rhs: "+getType(stmt.getRHS())+" \n");        // recurse:        Statement result = (Statement)super.visitStmtAssign(stmt);        if (result instanceof StmtAssign) // it probably is:        {            stmt = (StmtAssign)result;	    	    //System.out.println("GenCopies::visitStmtAssign take2 "+	    //		       " lhs: "+getType(stmt.getLHS())+	    //		       " rhs: "+getType(stmt.getRHS())+	    //		       " needs-copy: "+needsCopy(stmt.getRHS())+" \n");            if (needsCopy(stmt.getRHS()))            {		if (!(stmt.getRHS() instanceof ExprFunCall)) {		    makeCopy(stmt.getRHS(), stmt.getLHS());		    		} else {		    // make a copy of the RHS in the event that it is a		    // function call.  We don't want to call the function		    // multiple times for each element.		    Expression copy = assignToTemp(stmt.getRHS(), 					       // "true" as deep					       // argument will cause					       // bugs; need more					       // sophisticated					       // framework to do					       // nested structures					       // correctly					       false);		    		    // drops op!  If there are compound assignments		    // like "a += b" here, we lose.  There shouldn't be,		    // though, since those operators aren't well-defined		    // for structures and arrays and this should be run		    // after complex prop.                		    makeCopy(copy, stmt.getLHS());                		}				return null;            }        }        return result;    }