while (type != null && (!typeSet.contains(type) || counter > 0));
return type;
}
protected boolean lookAheadExpressionIsTrue(Lexer baseLexer) {
IElementType type = null;
// reverse polish notation
final LinkedList<IElementType> stack = new LinkedList<IElementType>();
final LinkedList<String> rpn = new LinkedList<String>();
final int expressionStartPosition = baseLexer.getTokenStart();
do {
final LexerPosition position = baseLexer.getCurrentPosition();
type = baseLexer.getTokenType();
while (HaxeTokenTypeSets.WHITESPACES.contains(type) || HaxeTokenTypeSets.ONLY_COMMENTS.contains(type)) {
baseLexer.advance();
type = baseLexer.getTokenType();
}
final String tokenText = baseLexer.getTokenText();
if (type == ID) {
if (canCalculate(rpn, stack)) {
//revert
baseLexer.restore(position);
break;
}
rpn.addFirst(tokenText);
}
else if (type == PRPAREN) {
do {
IElementType typeOnStack = stack.pollLast();
if (typeOnStack == PLPAREN) {
break;
}
rpn.addFirst(typeOnStack.toString());
}
while (!stack.isEmpty());
while (!stack.isEmpty() && stack.getLast() == ONOT) {
rpn.addFirst(stack.pollLast().toString());
}