summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-28 12:18:17 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-02-19 15:46:26 +0900
commitf0b815dc670b61eba1daaa67a8613ac431d32b16 (patch)
treebd32191e8fdfb34701afce748c5d1ed8f1e6347a
parent90d082e374abb2f76075ec143b255e3a53157b41 (diff)
`Proc` made by `Symbol#to_proc` should be a lambda [Bug #16260]
-rw-r--r--NEWS.md8
-rw-r--r--proc.c1
-rw-r--r--spec/ruby/core/proc/shared/to_s.rb2
3 files changed, 10 insertions, 1 deletions
diff --git a/NEWS.md b/NEWS.md
index 1d5bd6adb8..203fa08f78 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -34,6 +34,13 @@ sufficient information, see the ChangeLog file or Redmine
* Hash#transform_keys now accepts a hash that maps keys to new
keys. [[Feature #16274]]
+* Symbol
+
+ * Modified method
+
+ * Symbol#to_proc now returns a lambda Proc.
+ [[Feature #16260]]
+
## Stdlib updates (outstanding ones only)
* Net::HTTP
@@ -71,6 +78,7 @@ sufficient information, see the ChangeLog file or Redmine
[Feature #8948]: https://bugs.ruby-lang.org/issues/8948
[Feature #15575]: https://bugs.ruby-lang.org/issues/15575
[Feature #16131]: https://bugs.ruby-lang.org/issues/16131
+[Feature #16260]: https://bugs.ruby-lang.org/issues/16260
[Feature #16274]: https://bugs.ruby-lang.org/issues/16274
[Feature #16377]: https://bugs.ruby-lang.org/issues/16377
[Feature #16555]: https://bugs.ruby-lang.org/issues/16555
diff --git a/proc.c b/proc.c
index 83ec61d0f5..e0cba7109b 100644
--- a/proc.c
+++ b/proc.c
@@ -697,6 +697,7 @@ sym_proc_new(VALUE klass, VALUE sym)
GetProcPtr(procval, proc);
vm_block_type_set(&proc->block, block_type_symbol);
+ proc->is_lambda = TRUE;
RB_OBJ_WRITE(procval, &proc->block.as.symbol, sym);
return procval;
}
diff --git a/spec/ruby/core/proc/shared/to_s.rb b/spec/ruby/core/proc/shared/to_s.rb
index 8b9c83927f..7edd11b1e1 100644
--- a/spec/ruby/core/proc/shared/to_s.rb
+++ b/spec/ruby/core/proc/shared/to_s.rb
@@ -46,7 +46,7 @@ describe :proc_to_s, shared: true do
describe "for a proc created with Symbol#to_proc" do
it "returns a description including '(&:symbol)'" do
proc = :foobar.to_proc
- proc.send(@method).should =~ /^#<Proc:0x\h+\(&:foobar\)>$/
+ proc.send(@method).should.include?('(&:foobar)')
end
it "has a binary encoding" do