summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-02-20 19:34:50 +0900
committerKevin Newton <kddnewton@gmail.com>2026-02-15 14:12:15 -0500
commit116d402067c1d01ed67b16ec93fb523bd5109d07 (patch)
tree9ed0f81052e64934218586ae691dd4d2d1fbec8d /parse.y
parent2065b55980a0fc6386d58e4ede37d60c50e5b62f (diff)
[Feature #19979] Method definition with `&nil`
Allow methods to declare that they don't accept a block via `&nil`.
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y9
1 files changed, 9 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index b874e4f8dc..6e0c610a7c 100644
--- a/parse.y
+++ b/parse.y
@@ -6562,6 +6562,11 @@ f_block_arg : blkarg_mark tIDENTIFIER
$$ = $2;
/*% ripper: blockarg!($:2) %*/
}
+ | blkarg_mark keyword_nil
+ {
+ $$ = idNil;
+ /*% ripper: blockarg!(ID2VAL(idNil)) %*/
+ }
| blkarg_mark
{
arg_var(p, idFWD_BLOCK);
@@ -14474,6 +14479,10 @@ new_args_tail(struct parser_params *p, rb_node_kw_arg_t *kw_args, ID kw_rest_arg
struct rb_args_info *args = &node->nd_ainfo;
if (p->error_p) return node;
+ if (block == idNil) {
+ block = 0;
+ args->no_blockarg = TRUE;
+ }
args->block_arg = block;
args->kw_args = kw_args;