Expression *ExpressionBuilder::unary_expression() { switch (next()) { case '+': return createUnaryExpression('+', unary_expression()); case '-': return createUnaryExpression('-', unary_expression()); case '!': return createUnaryExpression('!', unary_expression()); case '~': return createUnaryExpression('~', unary_expression()); case Token_defined: { int identifierIndex = 0; if (test(Token_identifier)) { identifierIndex = i - 1; } else if (test('(')) { if (test(Token_identifier)) identifierIndex = i -1; test(')'); } return createMacroReference(MacroReference::DefinedRef, createTokenList(identifierIndex)); } default: prev(); return primary_expression(); } }
struct memorycontainer* createNotExpression(struct memorycontainer* expression) { return createUnaryExpression(NOT_TOKEN, expression); }