зеркало из https://github.com/github/ruby.git
parse.y: simplify parse_ident
* parse.y (parse_ident): simplified selecting identifier types by the suffix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59458 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
fb29a4dcda
Коммит
4eafec5ea6
33
parse.y
33
parse.y
|
@ -7793,7 +7793,7 @@ parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
|
||||||
static enum yytokentype
|
static enum yytokentype
|
||||||
parse_ident(struct parser_params *parser, int c, int cmd_state)
|
parse_ident(struct parser_params *parser, int c, int cmd_state)
|
||||||
{
|
{
|
||||||
enum yytokentype result = 0;
|
enum yytokentype result;
|
||||||
int mb = ENC_CODERANGE_7BIT;
|
int mb = ENC_CODERANGE_7BIT;
|
||||||
const enum lex_state_e last_state = lex_state;
|
const enum lex_state_e last_state = lex_state;
|
||||||
ID ident;
|
ID ident;
|
||||||
|
@ -7804,37 +7804,20 @@ parse_ident(struct parser_params *parser, int c, int cmd_state)
|
||||||
c = nextc();
|
c = nextc();
|
||||||
} while (parser_is_identchar());
|
} while (parser_is_identchar());
|
||||||
if ((c == '!' || c == '?') && !peek('=')) {
|
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);
|
tokadd(c);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
result = ISUPPER(tok()[0]) ? tCONSTANT : tIDENTIFIER;
|
||||||
pushback(c);
|
pushback(c);
|
||||||
}
|
}
|
||||||
tokfix();
|
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_POSSIBLE()) {
|
||||||
if (IS_LABEL_SUFFIX(0)) {
|
if (IS_LABEL_SUFFIX(0)) {
|
||||||
SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);
|
SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче