if ((left.getType()!=null && left.getType().isArrayType()) && (((right.getType()!=null && right.getType().isArrayType()) || right instanceof SIRPopExpression) && !(right instanceof JNewArrayExpression))) {
boolean arrayType = ((left.getType()!=null && left.getType().isArrayType()) || (right.getType()!=null && right.getType().isArrayType())); if (arrayType && !(right instanceof JNewArrayExpression)) {
    public void visitAssignmentExpression(JAssignmentExpression self,                                          JExpression left,                                          JExpression right) {        /*          if ((left instanceof JFieldAccessExpression) &&          ((JFieldAccessExpression)left).getField().getIdent().equals(Constants.JAV_OUTER_THIS)) {          return;          }        */        if (right instanceof JArrayInitializer &&            arrayInitializers.containsKey(right)) {            // memcpy for arrays            p.print("memcpy(");            left.accept(this);            p.print(",");            String name = (String)arrayInitializers.get(right);            p.print(name);            p.print(",");            p.print(findSize((JArrayInitializer)right) + " * sizeof(");            printType(findBaseType((JArrayInitializer)right));            p.print("))");            if (statementContext) { p.print(";"); }	    return;        } 	// copy arrays element-wise        if ((left.getType()!=null && left.getType().isArrayType()) &&	    (((right.getType()!=null && right.getType().isArrayType())	      || right instanceof SIRPopExpression) 	     && !(right instanceof JNewArrayExpression))) {            CArrayType type = (CArrayType)right.getType();	    JExpression[] dims = type.getDims();            p.print("{\n");            p.print("int ");            // print the index var decls            for (int i = 0; i < dims.length - 1; i++)                p.print(RawExecutionCode.ARRAY_COPY + i + ", ");            p.print(RawExecutionCode.ARRAY_COPY + (dims.length - 1));            p.print(";\n");            for (int i = 0; i < dims.length; i++) {                p.print("for (" + RawExecutionCode.ARRAY_COPY + i + " = 0; "                        + RawExecutionCode.ARRAY_COPY + i + " < ");		dims[i].accept(this);                p.print("; " + RawExecutionCode.ARRAY_COPY + i + "++)\n");            }            left.accept(this);            for (int i = 0; i < dims.length; i++)                p.print("[" + RawExecutionCode.ARRAY_COPY + i + "]");            p.print(" = ");            right.accept(this);            for (int i = 0; i < dims.length; i++)                p.print("[" + RawExecutionCode.ARRAY_COPY + i + "]");            p.print(";\n}\n");            return;	}	boolean oldStatementContext = statementContext;	lastLeft=left;	printLParen();	statementContext = false;	left.accept(this);	p.print(" = ");	right.accept(this);	statementContext = oldStatementContext;	printRParen();	lastLeft=null;    }