From 116d402067c1d01ed67b16ec93fb523bd5109d07 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 20 Feb 2024 19:34:50 +0900 Subject: [Feature #19979] Method definition with `&nil` Allow methods to declare that they don't accept a block via `&nil`. --- parse.y | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'parse.y') 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; -- cgit v1.2.3