protected void consumeEmptyStatement() {
	this.intPtr--;
	// EmptyStatement ::= ';'
	char[] source = this.scanner.source;
	if (this.endStatementPosition >= source.length) {
		// this would be inserted as a fake empty statement
		pushOnAstStack(new EmptyStatement(this.endStatementPosition, this.endStatementPosition));
		return;
	}
	int sourceStart = this.endStatementPosition;
	
	if (source[this.endStatementPosition] != ';') {
		if(source.length > 5) {
			int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
			int pos = this.endStatementPosition - 4;
			while (source[pos] == 'u') {
				pos--;
			}
			if (source[pos] == '\\' &&
					!((c1 = ScannerHelper.getNumericValue(source[this.endStatementPosition - 3])) > 15
						|| c1 < 0
						|| (c2 = ScannerHelper.getNumericValue(source[this.endStatementPosition - 2])) > 15
						|| c2 < 0
						|| (c3 = ScannerHelper.getNumericValue(source[this.endStatementPosition - 1])) > 15
						|| c3 < 0
						|| (c4 = ScannerHelper.getNumericValue(source[this.endStatementPosition])) > 15
						|| c4 < 0) &&
					((char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4)) == ';'){
				// we have a Unicode for the ';' (/u003B)
				sourceStart = pos;
			}
		}
	}
	if (this.astPtr > -1) {
		if (this.astStack[this.astPtr] instanceof IDoStatement) {
			ASTNode node = this.astStack[this.astPtr];
			node.setSourceEnd(this.endStatementPosition);
			pushOnAstLengthStack(0);
			return;
		}
	}
	pushOnAstStack(new EmptyStatement(sourceStart, this.endStatementPosition));
}