From: nobu@... Date: 2014-04-25T06:23:27+00:00 Subject: [ruby-core:62156] [ruby-trunk - Bug #9626] [Rejected] alias, prepend and super cause unexpected SystemStackError Issue #9626 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Rejected It differs from #7842, since you overwrites `C#foo` itself. `C#orig_foo` is an alias of `M#foo`, but not of the former `C#foo`. ---------------------------------------- Bug #9626: alias, prepend and super cause unexpected SystemStackError https://bugs.ruby-lang.org/issues/9626#change-46311 * Author: Kohei Suzuki * Status: Rejected * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- ```ruby module M def foo super end end class C def foo 'C#foo' end prepend M alias_method :orig_foo, :foo def foo orig_foo end end C.new.foo ``` I expect: `M#foo` -> `C#foo` -> `C#orig_foo` and get `'C#foo'` Actual: `M#foo` -> `C#foo` -> `M#foo` -> ... and get `stack level too deep (SystemStackError)` If I swap the order of `alias_method` and `prepend`, it works as I expect. I think it's closely related to #7842. -- https://bugs.ruby-lang.org/