protected void consumeAssignment() {
	// Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression
	//optimize the push/pop

	int op = this.intStack[this.intPtr--] ; //<--the encoded operator

	this.expressionPtr -- ; this.expressionLengthPtr -- ;
	checkComment();

	if(op != EQUAL) {
		CompoundAssignment compoundAssignment = new CompoundAssignment(
			this.expressionStack[this.expressionPtr] ,
			this.expressionStack[this.expressionPtr+1],
			op,
			this.scanner.startPosition - 1);
		if (this.javadoc != null) {
//			compoundAssignment.javadoc = this.javadoc;
			this.javadoc = null;
		}
		this.expressionStack[this.expressionPtr] = compoundAssignment;
	}
	else {
		Assignment assignment = new Assignment(
			this.expressionStack[this.expressionPtr] ,
			this.expressionStack[this.expressionPtr+1],
			this.scanner.startPosition - 1);
		if (this.javadoc != null) {
//			assignment.javadoc = this.javadoc;
			this.javadoc = null;
		}
		this.expressionStack[this.expressionPtr] = assignment;
	}	

				if (this.pendingRecoveredType != null) {
					// Used only in statements recovery.
					// This is not a real assignment but a placeholder for an existing anonymous type.
					// The assignment must be replace by the anonymous type.
					if (this.pendingRecoveredType.allocation != null &&
							this.scanner.startPosition - 1 <= this.pendingRecoveredType.declarationSourceEnd) {
						this.expressionStack[this.expressionPtr] = this.pendingRecoveredType.allocation;
						this.pendingRecoveredType = null;
						return;
					}
					this.pendingRecoveredType = null;
				}
}