From: mame@... Date: 2018-02-22T02:27:35+00:00 Subject: [ruby-core:85740] [Ruby trunk Bug#14506][Assigned] Possible bug in cmdarg_stack Issue #14506 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to nobu (Nobuyoshi Nakada) I think that this is not a bug, and that your patch is for refactoring. Am I right? Please clarify your motivation if any. I understand that you want this change [for ease of backporting from parser.y to the parser gem](https://github.com/whitequark/parser/issues/452). I'm neutral to this. Anyway, your patch looks good to me as a refactoring. Nobu, what do you think? ---------------------------------------- Bug #14506: Possible bug in cmdarg_stack https://bugs.ruby-lang.org/issues/14506#change-70582 * Author: ibylich (Ilya Bylich) * Status: Assigned * Priority: Normal * Assignee: nobu (Nobuyoshi Nakada) * Target version: * ruby -v: ruby 2.6.0dev (2018-02-19 trunk 62484) [x86_64-darwin17] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- cmdarg stack is a stack of bytes that has 1 on top of it when the parser is in the command mode. But for this code: ~~~ ruby a b(c d), "x" do end ~~~ And this line in parse.y: ~~~ c > SHOW_BITSTACK(p->cmdarg_stack, "BEFORE kDO_BLOCK"); if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG)) return keyword_do_block; ~~~ It prints: ~~~ text $ dev-ruby -vye 'a b(c d), "x" do end' | grep -E "kDO_BLOCK" BEFORE kDO_BLOCK: 10 at line 7461 ~~~ So CMDARG_P is false. I understand that 'keyword_do_block" is handled later in the "if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))" section, but is it possible to change parser to rely only on cmdarg stack? -- https://bugs.ruby-lang.org/ Unsubscribe: