if (token == '&') expr = expr.createAssignRef(this, parseConditionalExpr());
if (token == '&') {  expr = expr.createAssignRef(this, parseBitOrExpr()); }
  private Expr parseAssignExpr()    throws IOException  {    Expr expr = parseTerm();    while (true) {      int token = parseToken();      switch (token) {      case '=':	token = parseToken();		try {	  if (token == '&')	    expr = expr.createAssignRef(this, parseConditionalExpr());	  else {	    _peekToken = token;	    expr = expr.createAssign(this, parseConditionalExpr());	  }	} catch (QuercusParseException e) {	  throw e;	} catch (IOException e) {	  throw error(e.getMessage());	}	break;	      case PLUS_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new AddExpr(expr.copy(),						     parseConditionalExpr()));	else // php/03d4	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case MINUS_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new SubExpr(expr.copy(),						     parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case APPEND_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, AppendExpr.create(expr.copy(),							   parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case MUL_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new MulExpr(expr.copy(),						     parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case DIV_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new DivExpr(expr.copy(),						     parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case MOD_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new ModExpr(expr.copy(),						     parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case LSHIFT_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new LeftShiftExpr(expr.copy(),							   parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case RSHIFT_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new RightShiftExpr(expr.copy(),							    parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case AND_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new BitAndExpr(expr.copy(),							parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case OR_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new BitOrExpr(expr.copy(),						       parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      case XOR_ASSIGN:	if (expr.canRead())	  expr = expr.createAssign(this, new BitXorExpr(expr.copy(),							parseConditionalExpr()));	else	  expr = expr.createAssign(this, parseConditionalExpr());	break;	      default:	_peekToken = token;	return expr;      }    }  }