1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/include/ruby
shugo 7ef16d224a * fix the behavior when a module is included into a refinement.
This change is a little tricky, so it might be better to prohibit
  module inclusion to refinements.

* include/ruby/ruby.h (RMODULE_INCLUDED_INTO_REFINEMENT): new flag
  to represent that a module (iclass) is included into a refinement.

* class.c (include_modules_at): set RMODULE_INCLUDED_INTO_REFINEMENT
  if klass is a refinement.

* eval.c (rb_mod_refine): set the superclass of a refinement to the
  refined class for super.

* eval.c (rb_using_refinement): skip the above superclass (the
  refined class) when creating iclasses for refinements.  Otherwise,
  `using Refinement1; using Refinement2' creates iclasses:
  <Refinement2> -> <RefinedClass> -> <Refinement1> -> RefinedClass,
  where <Module> is an iclass for Module, so RefinedClass is
  searched before Refinement1.  The correct iclasses should be
  <Refinement2> -> <Refinement1> -> RefinedClass.

* vm_insnhelper.c (vm_search_normal_superclass): if klass is an
  iclass for a refinement, use the refinement's superclass instead
  of the iclass's superclass.  Otherwise, multiple refinements are
  searched by super.  For example, if a refinement Refinement2
  includes a module M (i.e., Refinement2 -> <M> -> RefinedClass,
  and if refinements iclasses are <Refinement2> -> <M>' ->
  <Refinement1> -> RefinedClass, then super in <Refinement2> should
  use Refinement2's superclass <M> instead of <Refinement2>'s
  superclass <M>'.

* vm_insnhelper.c (vm_search_super_method): do not raise a
  NotImplementError if current_defind_class is a module included
  into a refinement.  Because of the change of
  vm_search_normal_superclass(), the receiver might not be an
  instance of the module('s iclass).

* test/ruby/test_refinement.rb: related test.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-10 16:05:45 +00:00
..
backward [Bug #6607] 2012-06-19 09:43:53 +00:00
debug.h [EXPERIMENTAL: NEED DISCUSS] 2012-11-29 22:28:16 +00:00
defines.h * fix ANSI C compliance of r33757 2011-11-15 05:05:35 +00:00
encoding.h * parse.y (rb_check_id_cstr): new function to check if ID is 2012-04-11 13:31:23 +00:00
intern.h * include/ruby/intern.h: Restore rb_enumeratorize as it was before r37497 2012-11-07 19:46:16 +00:00
io.h process.c: try conversion at redirection 2012-07-27 09:25:54 +00:00
missing.h * include/ruby/missing.h: include math.h before checking INFINITY 2012-06-19 21:24:31 +00:00
oniguruma.h * Merge Onigmo-5.13.1. [ruby-dev:45057] [Feature #5820] 2012-02-17 07:42:23 +00:00
re.h * configure.in (XCFLAGS): use -fvisibility=hidden if possible. 2010-07-21 21:38:25 +00:00
regex.h * configure.in (XCFLAGS): use -fvisibility=hidden if possible. 2010-07-21 21:38:25 +00:00
ruby.h * fix the behavior when a module is included into a refinement. 2012-12-10 16:05:45 +00:00
st.h * st.c (st_update): pass pointer to key to the callback function. 2012-03-29 14:50:20 +00:00
subst.h * include/ruby/{subst.h,win32.h}, ext/socket/rubysocket.h: revert 2011-12-05 05:29:31 +00:00
thread.h * include/ruby/thread.h (rb_thread_call_without_gvl2): change 2012-11-28 13:01:25 +00:00
util.h * include/ruby/util.h: removed extra semicolon in definition of 2012-11-21 12:42:11 +00:00
version.h * include/ruby/version.h: RUBY_API_VERSION 2.0.0 2012-01-06 14:13:27 +00:00
vm.h * vm.c (ruby_vm_at_exit): new API. This enables extension libs to 2010-12-02 11:06:32 +00:00
win32.h win32.h: fstat on mingw32 2012-10-27 01:05:06 +00:00