+ ": found directive #elifndef after #else branch.");
+ ": found directive #elif after #else branch.");
	private boolean processIfVariations(boolean conditionFulfilled, StringList lines, String className )	throws BuildException	{		this.ifDirectiveCount++;		int currentIfDirectiveCount = this.ifDirectiveCount;		boolean endifFound = false;		boolean elseFound = false;		int commandStartLine = lines.getCurrentIndex();		boolean processed = false;		while (lines.next()) {			String line = lines.getCurrent();			String trimmedLine = line.trim();			int result = NOT_CHANGED; 			if (conditionFulfilled) {				result = processSingleLine( className, lines, line, trimmedLine );			}			if (result == CHANGED ) {				processed = true;			} else if ( result == DIRECTIVE_FOUND ) {				// another directive was found and processed, but no changes were made			} else if ( trimmedLine.startsWith("//#ifdef ") ) {				// we are currently in a branch which is not true (conditionFulfilled == false)				this.ifDirectiveCount++;			} else if ( trimmedLine.startsWith("//#if ") ) {				// we are currently in a branch which is not true (conditionFulfilled == false)				this.ifDirectiveCount++;			} else if (trimmedLine.startsWith("//#else") && (this.ifDirectiveCount == currentIfDirectiveCount)) {				conditionFulfilled = !conditionFulfilled;				elseFound = true;			} else if ( trimmedLine.startsWith("//#elifdef") && (this.ifDirectiveCount == currentIfDirectiveCount)) {				if (elseFound) {					throw new BuildException( className + " line " + (lines.getCurrentIndex() +1) 							+ ": found directive #elifdef after #else branch.");				}				String symbol = line.substring( 10 ).trim();				conditionFulfilled = (this.symbols.get( symbol ) != null);			} else if (trimmedLine.startsWith("//#elifndef") && (this.ifDirectiveCount == currentIfDirectiveCount)) {				if (elseFound) {					throw new BuildException( className + " line " + (lines.getCurrentIndex() +1) 							+ ": found directive #elifndef after #else branch.");				}				String symbol = line.substring( 11 ).trim();				conditionFulfilled = (this.symbols.get( symbol ) == null);			} else if (trimmedLine.startsWith("//#elif") && (this.ifDirectiveCount == currentIfDirectiveCount)) {				if (elseFound) {					throw new BuildException( className + " line " + (lines.getCurrentIndex() +1) 							+ ": found directive #elifndef after #else branch.");				}				String argument = line.substring( 8 ).trim();				conditionFulfilled = checkIfCondition( argument, className, lines );			} else if (trimmedLine.startsWith("//#endif")) {				if (this.ifDirectiveCount == currentIfDirectiveCount ) {					endifFound = true;					break;				} else {					this.ifDirectiveCount--;				}			} else {				// this line has to be either commented out or to be uncommented:				boolean changed = false;				if (conditionFulfilled) {					changed = uncommentLine( line, lines );				} else {					changed = commentLine( line, trimmedLine, lines );				}				if (changed) {					processed = true;				}			}		} // loop until endif is found		if (!endifFound) {			throw new BuildException(className + " line " + (commandStartLine +1) 					+": #ifdef is not terminated with #endif!" );		}		this.ifDirectiveCount--;		return processed;	}