зеркало из https://github.com/github/ruby.git
parse.y: IS_lex_state_for
* parse.y (IS_lex_state_for): new macro similar to IS_lex_state() but for arbitrary variables. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38034 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
90d43225eb
Коммит
7e42e55e08
12
parse.y
12
parse.y
|
@ -96,7 +96,8 @@ enum lex_state_e {
|
||||||
EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
|
EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
|
||||||
EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
|
EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
|
||||||
};
|
};
|
||||||
#define IS_lex_state(ls) (lex_state & ( ls ))
|
#define IS_lex_state_for(x, ls) ((x) & (ls))
|
||||||
|
#define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
|
||||||
|
|
||||||
#if PARSER_DEBUG
|
#if PARSER_DEBUG
|
||||||
static const char *lex_state_name(enum lex_state_e state);
|
static const char *lex_state_name(enum lex_state_e state);
|
||||||
|
@ -6752,7 +6753,7 @@ parser_prepare(struct parser_params *parser)
|
||||||
#define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
|
#define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
|
||||||
#endif
|
#endif
|
||||||
#define warn_balanced(op, syn) ((void) \
|
#define warn_balanced(op, syn) ((void) \
|
||||||
(!(last_state & (EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG)) && \
|
(!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
|
||||||
space_seen && !ISSPACE(c) && \
|
space_seen && !ISSPACE(c) && \
|
||||||
(ambiguous_operator(op, syn), 0)))
|
(ambiguous_operator(op, syn), 0)))
|
||||||
|
|
||||||
|
@ -7812,7 +7813,7 @@ parser_yylex(struct parser_params *parser)
|
||||||
case '`': /* $`: string before last match */
|
case '`': /* $`: string before last match */
|
||||||
case '\'': /* $': string after last match */
|
case '\'': /* $': string after last match */
|
||||||
case '+': /* $+: string matches last paren. */
|
case '+': /* $+: string matches last paren. */
|
||||||
if (last_state == EXPR_FNAME) {
|
if (IS_lex_state_for(last_state, EXPR_FNAME)) {
|
||||||
tokadd('$');
|
tokadd('$');
|
||||||
tokadd(c);
|
tokadd(c);
|
||||||
goto gvar;
|
goto gvar;
|
||||||
|
@ -7829,7 +7830,7 @@ parser_yylex(struct parser_params *parser)
|
||||||
c = nextc();
|
c = nextc();
|
||||||
} while (c != -1 && ISDIGIT(c));
|
} while (c != -1 && ISDIGIT(c));
|
||||||
pushback(c);
|
pushback(c);
|
||||||
if (last_state == EXPR_FNAME) goto gvar;
|
if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
|
||||||
tokfix();
|
tokfix();
|
||||||
set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
|
set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
|
||||||
return tNTH_REF;
|
return tNTH_REF;
|
||||||
|
@ -8018,7 +8019,8 @@ parser_yylex(struct parser_params *parser)
|
||||||
ID ident = TOK_INTERN(!ENC_SINGLE(mb));
|
ID ident = TOK_INTERN(!ENC_SINGLE(mb));
|
||||||
|
|
||||||
set_yylval_name(ident);
|
set_yylval_name(ident);
|
||||||
if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
|
if (!IS_lex_state_for(last_state, EXPR_DOT) &&
|
||||||
|
is_local_id(ident) && lvar_defined(ident)) {
|
||||||
lex_state = EXPR_END;
|
lex_state = EXPR_END;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче