MagLev / maglev

GemStone Maglev Ruby Repository
http://maglev.github.io
517 stars 41 forks source link

Including a module into itself should not be allowed #314

Open matthias-springer opened 11 years ago

matthias-springer commented 11 years ago

On MRI (1.9):

irb(main):001:0> module M
irb(main):002:1> include M
irb(main):003:1> end
ArgumentError: cyclic include detected
    from (irb):2:in `append_features'
    from (irb):2:in `include'
    from (irb):2:in `<module:M>'
    from (irb):1
    from /home/matthias/.rbenv/versions/1.9/bin/irb:12:in `<main>'

On MagLev:

irb(main):001:0> module M
irb(main):002:1> include M
irb(main):003:1> end
=> M
irb(main):004:0> M.singleton_class
=> #<Class:M>
irb(main):005:0> M.singleton_class.superclass
=> #<Class:M>
irb(main):006:0> M.singleton_class.superclass.object_id == M.singleton_class.object_id
=> false

Implementation of this is in Module>>_rubyModuleIncludeSelfEnv:, not sure why/if we need this.