- } else {
- token->type = '.';
- }
- break;
- case '&':
- MAYBE1('&', T_ANDAND)
- MAYBE('=', T_ANDEQUAL)
- ELSE('&')
- case '*':
- MAYBE1('=', T_ASTERISKEQUAL)
- ELSE('*')
- case '+':
- MAYBE1('+', T_PLUSPLUS)
- MAYBE('=', T_PLUSEQUAL)
- ELSE('+')
- case '-':
- MAYBE1('-', T_MINUSMINUS)
- MAYBE('=', T_MINUSEQUAL)
- ELSE('-')
- case '!':
- MAYBE1('=', T_EXCLAMATIONMARKEQUAL)
- ELSE('!')
- case '/':
- MAYBE1('=', T_SLASHEQUAL)
- case '*':
- next_char(this);
- skip_multiline_comment(this);
- lexer_next_token(this, token);
- return;
- case '/':
- next_char(this);
- skip_line_comment(this);
- lexer_next_token(this, token);
- return;
- ELSE('/')
- case '%':
- MAYBE1('=', T_PERCENTEQUAL)
- case ':':
- /* TODO find trigraphs... */
- next_char(this);
- if(this->c == '%') {
- next_char(this);
- if(this->c == ':') {
- next_char(this);
- token->type = T_PERCENTCOLONPERCENTCOLON;
- } else {
- put_back(this, '%');
- token->type = T_PERCENTCOLON;
- }
+ return;
+
+ case '.':
+ MAYBE_PROLOG
+ case '.':
+ MAYBE_PROLOG
+ MAYBE('.', T_DOTDOTDOT)
+ ELSE_CODE(
+ put_back(c);
+ c = '.';
+ lexer_token.type = '.';
+ return;
+ )
+ ELSE('.')
+ case '&':
+ MAYBE_PROLOG
+ MAYBE('&', T_ANDAND)
+ MAYBE('=', T_ANDEQUAL)
+ ELSE('&')
+ case '*':
+ MAYBE_PROLOG
+ MAYBE('=', T_ASTERISKEQUAL)
+ ELSE('*')
+ case '+':
+ MAYBE_PROLOG
+ MAYBE('+', T_PLUSPLUS)
+ MAYBE('=', T_PLUSEQUAL)
+ ELSE('+')
+ case '-':
+ MAYBE_PROLOG
+ MAYBE('-', T_MINUSMINUS)
+ MAYBE('=', T_MINUSEQUAL)
+ ELSE('-')
+ case '!':
+ MAYBE_PROLOG
+ MAYBE('=', T_EXCLAMATIONMARKEQUAL)
+ ELSE('!')
+ case '/':
+ MAYBE_PROLOG
+ MAYBE('=', T_SLASHEQUAL)
+ case '*':
+ next_char();
+ skip_multiline_comment();
+ lexer_next_preprocessing_token();