From: merch-redmine@... Date: 2020-09-22T19:07:32+00:00 Subject: [ruby-core:100075] [Ruby master Bug#17007] SystemStackError when using super inside Module included and lexically inside refinement Issue #17007 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Closed to Assigned To restore compatibility with Ruby 2.7 and fix #17182, I've reverted commit:eeef16e190cdabc2ba474622720f8e3df7bac43b at commit:179384a66862d5ef7413b6f4850b97d0becf4ec9. @shugo, I would appreciate your input here on how refinements should be handled in this case. ---------------------------------------- Bug #17007: SystemStackError when using super inside Module included and lexically inside refinement https://bugs.ruby-lang.org/issues/17007#change-87628 * Author: Eregon (Benoit Daloze) * Status: Assigned * Priority: Normal * Assignee: shugo (Shugo Maeda) * ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- ```ruby class C def foo ["C"] end end refinement = Module.new do R = refine C do def foo ["R"] + super end include Module.new { def foo ["M"] + super end } end end using refinement p C.new.foo ``` gives ``` $ ruby bug_refine_super.rb Traceback (most recent call last): 10920: from bug_refine_super.rb:22:in `
' 10919: from bug_refine_super.rb:10:in `foo' 10918: from bug_refine_super.rb:15:in `foo' 10917: from bug_refine_super.rb:10:in `foo' 10916: from bug_refine_super.rb:15:in `foo' 10915: from bug_refine_super.rb:10:in `foo' 10914: from bug_refine_super.rb:15:in `foo' 10913: from bug_refine_super.rb:10:in `foo' ... 10908 levels... 4: from bug_refine_super.rb:15:in `foo' 3: from bug_refine_super.rb:10:in `foo' 2: from bug_refine_super.rb:15:in `foo' 1: from bug_refine_super.rb:10:in `foo' bug_refine_super.rb:15:in `foo': stack level too deep (SystemStackError) ``` OTOH defining the module lexically outside of `refine` works: ```ruby m = Module.new { def foo ["M"] + super end } refinement = Module.new do R = refine C do def foo ["R"] + super end include m end end # result: ["R", "M", "C"] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: