diff --git a/parse.y b/parse.y index 02d9412a2c..c12b80cc06 100644 --- a/parse.y +++ b/parse.y @@ -7793,7 +7793,7 @@ parse_atmark(struct parser_params *parser, const enum lex_state_e last_state) static enum yytokentype parse_ident(struct parser_params *parser, int c, int cmd_state) { - enum yytokentype result = 0; + enum yytokentype result; int mb = ENC_CODERANGE_7BIT; const enum lex_state_e last_state = lex_state; ID ident; @@ -7804,37 +7804,20 @@ parse_ident(struct parser_params *parser, int c, int cmd_state) c = nextc(); } while (parser_is_identchar()); if ((c == '!' || c == '?') && !peek('=')) { + result = tFID; + tokadd(c); + } + else if (c == '=' && IS_lex_state(EXPR_FNAME) && + (!peek('~') && !peek('>') && (!peek('=') || (peek_n('>', 1))))) { + result = tIDENTIFIER; tokadd(c); } else { + result = ISUPPER(tok()[0]) ? tCONSTANT : tIDENTIFIER; pushback(c); } tokfix(); - if (toklast() == '!' || toklast() == '?') { - result = tFID; - } - else { - if (IS_lex_state(EXPR_FNAME)) { - register int c = nextc(); - if (c == '=' && !peek('~') && !peek('>') && - (!peek('=') || (peek_n('>', 1)))) { - result = tIDENTIFIER; - tokadd(c); - tokfix(); - } - else { - pushback(c); - } - } - if (result == 0 && ISUPPER(tok()[0])) { - result = tCONSTANT; - } - else { - result = tIDENTIFIER; - } - } - if (IS_LABEL_POSSIBLE()) { if (IS_LABEL_SUFFIX(0)) { SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);