diff --git a/parse.y b/parse.y index d4462dd691..e187f8c519 100644 --- a/parse.y +++ b/parse.y @@ -8458,16 +8458,16 @@ parser_yylex(struct parser_params *parser) if (IS_BEG()) { c = tLPAREN; } - else if (IS_SPCARG(-1)) { + else if (!space_seen) { + /* foo( ... ) => method call, no ambiguity */ + } + else if (IS_ARG() || IS_lex_state_all(EXPR_END|EXPR_LABEL)) { c = tLPAREN_ARG; } - else if (IS_lex_state(EXPR_ENDFN) && space_seen && !lambda_beginning_p()) { + else if (IS_lex_state(EXPR_ENDFN) && !lambda_beginning_p()) { rb_warning0("parentheses after method name is interpreted as " "an argument list, not a decomposed argument"); } - else if (lex_state == (EXPR_END|EXPR_LABEL) && space_seen) { - c = tLPAREN_ARG; - } paren_nest++; COND_PUSH(0); CMDARG_PUSH(0);