diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-09-27 14:22:33 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-09-27 14:22:33 +0000 |
commit | 3d2e45d3195ea8ad896e3a48d5cff29bfc032fff (patch) | |
tree | 9a5ba84aa549bb31d53289892733531dbbd7a57a /parse.y | |
parent | 0e547e6392581acac939fdfba6b730e0480c5fd6 (diff) |
parse.y: fix up r56198
* parse.y (symbol, dsym, parser_set_number_literal): set state to
ENDARG, so that `do` after a literal should be `do_block` and
bound to the outer method. [ruby-core:72482] [Bug #11873]
* parse.y (parse_ident): revert r56198.
* parse.y (warn_balanced): the state of symbol and numeric
literals is now EXPR_ENDARG, do not exclude it.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -4261,7 +4261,7 @@ string_dvar : tGVAR symbol : tSYMBEG sym { - SET_LEX_STATE(EXPR_END); + SET_LEX_STATE(EXPR_ENDARG); /*%%%*/ $$ = $2; /*% @@ -4278,7 +4278,7 @@ sym : fname dsym : tSYMBEG xstring_contents tSTRING_END { - SET_LEX_STATE(EXPR_END); + SET_LEX_STATE(EXPR_ENDARG); /*%%%*/ $$ = dsym_node($2); /*% @@ -6637,6 +6637,7 @@ parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int s type = tIMAGINARY; } set_yylval_literal(v); + SET_LEX_STATE(EXPR_ENDARG); return type; } @@ -7228,7 +7229,7 @@ parser_prepare(struct parser_params *parser) #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn)) #endif #define warn_balanced(op, syn) ((void) \ - (!IS_lex_state_for(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) && \ space_seen && !ISSPACE(c) && \ (ambiguous_operator(op, syn), 0))) @@ -7921,7 +7922,7 @@ parse_ident(struct parser_params *parser, int c, int cmd_state) if (COND_P()) return keyword_do_cond; if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG)) return keyword_do_block; - if (IS_lex_state_for(state, (EXPR_BEG | EXPR_END | EXPR_ENDARG))) + if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG))) return keyword_do_block; return keyword_do; } |