aboutsummaryrefslogtreecommitdiffstats
path: root/proc.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2020-06-10 17:50:35 -0700
committerJeremy Evans <code@jeremyevans.net>2020-06-11 07:30:48 -0700
commit2188d6d160d3ba82432c87277310a4d417e136d5 (patch)
treef885cb534dc38c06db3431076719436563f96fb9 /proc.c
parent5349506eb4c0668fa1d6f512e4dae1021a9a7460 (diff)
downloadruby-2188d6d160d3ba82432c87277310a4d417e136d5.tar.gz
Warn when passing a non-literal block to Kernel#lambda
Implements [Feature #15973]
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/proc.c b/proc.c
index ffc87b7ea3..94722dd8e2 100644
--- a/proc.c
+++ b/proc.c
@@ -855,6 +855,19 @@ rb_block_lambda(void)
static VALUE
f_lambda(VALUE _)
{
+ VALUE block_handler = rb_vm_frame_block_handler(GET_EC()->cfp);
+
+ if (block_handler != VM_BLOCK_HANDLER_NONE) {
+ switch (vm_block_handler_type(block_handler)) {
+ case block_handler_type_proc:
+ case block_handler_type_symbol:
+ case block_handler_type_ifunc:
+ rb_warn_deprecated("lambda without a literal block", "the proc without lambda");
+ default:
+ break;
+ }
+ }
+
return rb_block_lambda();
}