Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Commits on May 21, 2015
  1. @ko1

    * iseq.c: constify.

    ko1 authored
    * iseq.h: ditto.
    * method.h: ditto.
    * proc.c: ditto.
    * vm_method.c: ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on May 12, 2015
  1. @ko1

    * method.h: remove unused declaration.

    ko1 authored
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Mar 11, 2015
  1. @ko1

    * load.c: removed unused header file "node.h".

    ko1 authored
    * method.h: ditto.
    * symbol.c: ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Mar 8, 2015
  1. @ko1

    * internal.h: define rb_cref_t and change to use it.

    ko1 authored
      rb_cref_t is data type of CREF. Now, the body is still NODE.
      It is easy to understand what is CREF and what is pure NODE.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Mar 6, 2015
  1. @ko1

    * fix namespace issue on singleton class expressions. [Bug #10943]

    ko1 authored
    * vm_core.h, method.h: remove rb_iseq_t::cref_stack. CREF is stored
      to rb_method_definition_t::body.iseq_body.cref.
    * vm_insnhelper.c: modify SVAR usage.
      When calling ISEQ type method, push CREF information onto method
      frame, SVAR located place. Before this fix, SVAR is simply nil.
      After this patch, CREF (or NULL == Qfalse for not iseq methods)
      is stored at the method invocation.
      When SVAR is requierd, then put NODE_IF onto SVAR location,
      and NDOE_IF::nd_reserved points CREF itself.
    * vm.c (vm_cref_new, vm_cref_dump, vm_cref_new_toplevel): added.
    * vm_insnhelper.c (vm_push_frame): accept CREF.
    * method.h, vm_method.c (rb_add_method_iseq): added. This function
      accepts iseq and CREF.
    * class.c (clone_method): use rb_add_method_iseq().
    * gc.c (mark_method_entry): mark method_entry::body.iseq_body.cref.
    * iseq.c: remove CREF related codes.
    * insns.def (getinlinecache/setinlinecache): CREF should be cache key
      because a different CREF has a different namespace.
    * node.c (rb_gc_mark_node): mark NODE_IF::nd_reserved for SVAR.
    * proc.c: catch up changes.
    * struct.c: ditto.
    * insns.def: ditto.
    * vm_args.c (raise_argument_error): ditto.
    * vm_eval.c: ditto.
    * test/ruby/test_class.rb: add a test.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49874 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Mar 5, 2015
  1. @ko1

    * internal.h: remove struct method_table_wrapper.

    ko1 authored
      struct method_table_wrapper was introduced to avoid duplicate marking
      for method tables.
      For example, `module M1; def foo; end; end` make one method table
      (mtbl) contains a method `foo`. M1 (T_MODULE) points mtbl.
      Classes C1 and C2 includes M1, then two T_ICLASS objects are created
      and they points mtbl too. In this case, three objects (one T_MODULE
      and two T_ICLASS objects) points same mtbl. On marking phase, these
      three objects mark same mtbl. To avoid such duplication, struct
      method_table_wrapper was introduced.
      However, created two T_ICLASS objects have same or shorter lifetime
      than M1 (T_MODULE) object. So that we only need to mark mtbl from M1,
      not from T_ICLASS objects. This patch tries marking only from M1.
      Note that one `Module#prepend` call creates two T_ICLASS objects.
      One for refering to a prepending Module object, same as
      `Module#include`. We don't nedd to care this T_ICLASS.
      One for moving original mtbl from a prepending class. We need to
      mark such mtbl from this T_ICLASS object. To mark the mtbl,
      we need to use `RCLASS_ORIGIN(klass)` on marking from a prepended
      class `klass`.
    * class.c: ditto.
    * eval.c (rb_using_refinement): ditto.
    * gc.c: ditto.
    * include/ruby/ruby.h: define m_tbl directly. The definition of
      struct RClass should be moved to (srcdir)/internal.h.
    * method.h: remove decl of rb_free_m_tbl_wrapper().
    * object.c: use RCLASS_M_TBL() directly.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49862 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jan 12, 2015
  1. @nobu

    method.h: UNDEFINED_REFINED_METHOD_P

    nobu authored
    * method.h (UNDEFINED_REFINED_METHOD_P): macro to tell if refined
      original method is defined.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49222 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on May 22, 2014
  1. gc.c (rb_free_m_tbl): mark function as static

    normal authored
    * gc.c (rb_free_m_tbl): mark function as static
    * method.h (rb_free_m_tbl): remove prototype
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jan 23, 2014
  1. @charliesome

    * method.h: rearrange rb_method_definition_struct to save 8 bytes in

    charliesome authored
      padding on 64 bit platforms. Patch by Eric Wong.
    
      [Feature #9441] [ruby-core:59993]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 3, 2013
  1. @tmm1

    * include/ruby/ruby.h (struct RClass): Add wrapper struct around

    tmm1 authored
      RClass->m_tbl with serial. This prevents double marking method
      tables, since many classes/modules can share the same method table.
      This improves minor mark time in a large application by 30%.
    * internal.h (struct method_table_wrapper): Define new
      wrapper struct with additional serial.
    * internal.h (RCLASS_M_TBL_INIT): New macro for initializing method
      table wrapper and st_table.
    * method.h (void rb_sweep_method_entry): Rename rb_free_m_table to
      rb_free_m_tbl for consistentcy
    * .gdbinit (define rb_method_entry): Update rb_method_entry gdb helper
      for new method table structure.
    * class.c: Use RCLASS_M_TBL_WRAPPER and
      RCLASS_M_TBL_INIT macros.
    * class.c (rb_include_class_new): Share WRAPPER between module and
      iclass, so serial can prevent double marking.
    * eval.c (rb_prepend_module): ditto.
    * eval.c (rb_using_refinement): ditto.
    * gc.c: Mark and free new wrapper struct.
    * gc.c (obj_memsize_of): Count size of additional wrapper struct.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 22, 2013
  1. @shyouhei

    * vm_core.h (enum): avoid syntax error.

    shyouhei authored
    	* method.h: ditto.
    
    	* internal.h: ditto.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43390 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Sep 24, 2013
  1. @charliesome

    * class.c (class_alloc): remove mc_tbl

    charliesome authored
    * gc.c (obj_free): ditto
    
    * internal.h (struct rb_classext_struct): ditto
    
    * method.h (rb_method_entry): remove ent param
    
    * vm_method.c: restore the global method cache. Per class cache tables
      turned out to be far too slow.
    
      [ruby-core:57289] [Bug #8930]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43027 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Sep 10, 2013
  1. @nobu

    vm_method.c: constify

    nobu authored
    * vm_method.c (rb_resolve_refined_method): constify.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Sep 4, 2013
  1. @charliesome

    * class.c, compile.c, eval.c, gc.h, insns.def, internal.h, method.h,

    charliesome authored
      variable.c, vm.c, vm_core.c, vm_insnhelper.c, vm_insnhelper.h,
      vm_method.c: Implement class hierarchy method cache invalidation.
    
      [ruby-core:55053] [Feature #8426] [GH-387]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jun 14, 2013
  1. @ko1

    * class.c, include/ruby/ruby.h: add write barriers for T_CLASS,

    ko1 authored
      T_MODULE, T_ICLASS.
    * constant.h: constify rb_const_entry_t::value and file to detect
      assignment.
    * variable.c, internal.h (rb_st_insert_id_and_value, rb_st_copy):
      added. update table with write barrier.
    * method.h: constify some variables to detect assignment.
    * object.c (init_copy): add WBs.
    * variable.c: ditto.
    * vm_method.c (rb_add_method): ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on May 13, 2013
  1. @nobu

    vm_method.c: rb_method_entry_at

    nobu authored
    * vm_method.c (rb_method_entry_at): return the method entry for id at
      klass, without ancestors.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Feb 6, 2013
  1. @nobu

    vm_method.c: show respond_to location

    nobu authored
    * proc.c (rb_method_entry_location, rb_{mod,obj}_method_location): new
      functions to obtain source location of method definition.
    * vm_method.c (rb_obj_respond_to): show the location of old style
      respond_to? method.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39089 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 17, 2012
  1. @ko1

    * method.h: remove `VM_METHOD_TYPE_CFUNC_FRAMELESS' method type.

    ko1 authored
      This method type is for optimized CFUNC such as Fixnum#+ and so on.
      This feature is half-baked and no way to use them.
      [Background]
      Now, VM has opt_plus instructions to optimize `+' methods for
      some Classes (such as Fixnum, Float (flonum)). We call this
      type of instructions as `specialized instructions'.
      This simple technique improve simple program dramatically.
      However, we can make specialized instructions for only several
      types (classes) and selectors (method names) because a large
      instruction will be slow. In other words, this technique has no
      extensibility.
      To overcome this problem, VM_METHOD_TYPE_CFUNC_FRAMELESS was
      introduced (r37198). This type is a variant of CFUNC, but called
      their functiions directly without building a method frame.
      Any CFUNC method can be defined as frameless methods if a method
      is not needed to make method frame. Frameless methods are faster
      as specialized instructions (a bit slower, but no need to care).
      No problem described at
      http://charlie.bz/blog/why-do-singleton-methods-make-ruby-slow
      because this technique doesn't see class, but see method body
      itself. Alias is also no problem.
      [Problem]
      However, we can't set frameless method type for polymorphic methods
      such as Array#[]. Necessity for method frame depends on which
      parameter type. For example, Fixnum#+ needs method frame if
      coerce is needed. Current VM_METHOD_TYPE_CFUNC_FRAMELESS is not
      flexible and need more tuning to introduce it.
      Expected behavior of frameless method type may be:
      result = optimized_cfunc(params); /* call optimized cfunc */
      if (result == Qundef) { result = normal_cfunc(); }
      This is why I say this feature is half-baked.
      We need to learn primitive method in Smalltalk more.
      (I heard this name at RubyConf Taiwan this month. Thanks!)
      [Conclusion]
      Nobody may use this feature and there is no compatibility issue.
      This feature goes to next minor (2.1?).
    * proc.c (rb_method_entry_arity): ditto.
    * vm_eval.c, vm_insnhelper.c, vm_method.c: ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 13, 2012
  1. @nobu

    * method.h (END_OF_ENUMERATION): placeholder to put last comma.

    nobu authored
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38353 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. @ko1

    * method.h: remove "VM_METHOD_TYPE__MAX" from rb_method_type_t.

    ko1 authored
      rb_method_type_t is not a number and "_MAX" causes misunderstanding.
    * proc.c (rb_method_entry_arity): ditto.
    * vm_eval.c (vm_call0_body): ditto.
    * vm_insnhelper.c (vm_call_method): ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38349 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 12, 2012
  1. @nobu

    method.h: NOEX_SAFE_SHIFT_OFFSET

    nobu authored
    * method.h (rb_method_flag_t): name a magic number for NOEX_SAFE and
      NOEX_WITH as NOEX_SAFE_SHIFT_OFFSET.
    * method.h (rb_method_type_t, method_optimized_type): C89 forbids a
      comma after the last element in enum.
    * proc.c (rb_method_entry_arity), vm_eval.c (vm_call0_body),
      vm_insnhelper.c (vm_call_method): add VM_METHOD_TYPE__MAX case.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38340 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 9, 2012
  1. @shugo

    * vm_insnhelper.c (vm_call_opt_send): Kernel#send should not use

    shugo authored
      refinements.
    
    * proc.c (mnew): Kernel#method, Kernel#public_method,
      Module#instance_method, and Module#public_instance_method should
      not use refinements.
    
    * vm_method.c (rb_method_boundp): Kernel#respond_to? should not use
      refinements.
    
    * test/ruby/test_refinement.rb: related test.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 6, 2012
  1. @shugo

    * revised r37993 to avoid SEGV/ILL in tests. In r37993, a method

    shugo authored
      entry with VM_METHOD_TYPE_REFINED holds only the original method
      definition, so ci->me is set to a method entry allocated in the
      stack, and it causes SEGV/ILL.  In this commit, a method entry
      with VM_METHOD_TYPE_REFINED holds the whole original method entry.
      Furthermore, rb_thread_mark() is changed to mark cfp->klass to
      avoid GC for iclasses created by copy_refinement_iclass().
    
    * vm_method.c (rb_method_entry_make): add a method entry with
      VM_METHOD_TYPE_REFINED to the class refined by the refinement if
      the target module is a refinement.  When a method entry with
      VM_METHOD_TYPE_UNDEF is invoked by vm_call_method(), a method with
      the same name is searched in refinements.  If such a method is
      found, the method is invoked.  Otherwise, the original method in
      the refined class (rb_method_definition_t::body.orig_me) is
      invoked.  This change is made to simplify the normal method lookup
      and to improve the performance of normal method calls.
    
    * vm_method.c (EXPR1, search_method, rb_method_entry),
      vm_eval.c (rb_call0, rb_search_method_entry): do not use
      refinements for method lookup.
    
    * vm_insnhelper.c (vm_call_method): search methods in refinements if
      ci->me is VM_METHOD_TYPE_REFINED.  If the method is called by
      super (i.e., ci->call == vm_call_super_method), skip the same
      method entry as the current method to avoid infinite call of the
      same method.
    
    * class.c (include_modules_at): add a refined method entry for each
      method defined in a module included in a refinement.
    
    * class.c (rb_prepend_module): set an empty table to
      RCLASS_M_TBL(klass) to add refined method entries, because
      refinements should have priority over prepended modules.
    
    * proc.c (mnew): use rb_method_entry_with_refinements() to get
      a refined method.
    
    * vm.c (rb_thread_mark): mark cfp->klass for iclasses created by
      copy_refinement_iclass().
    
    * vm.c (Init_VM), cont.c (fiber_init): initialize th->cfp->klass.
    
    * test/ruby/test_refinement.rb (test_inline_method_cache): do not skip
      the test because it should pass successfully.
    
    * test/ruby/test_refinement.rb (test_redefine_refined_method): new
      test for the case a refined method is redefined.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38236 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 30, 2012
  1. @shugo

    * revert r37993 to avoid SEGV in tests.

    shugo authored
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38022 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 29, 2012
  1. @shugo

    * vm_method.c (rb_method_entry_make): add a method entry with

    shugo authored
      VM_METHOD_TYPE_REFINED to the class refined by the refinement if
      the target module is a refinement.  When a method entry with
      VM_METHOD_TYPE_UNDEF is invoked by vm_call_method(), a method with
      the same name is searched in refinements.  If such a method is
      found, the method is invoked.  Otherwise, the original method in
      the refined class (rb_method_definition_t::body.orig_def) is
      invoked.  This change is made to simplify the normal method lookup
      and to improve the performance of normal method calls.
    
    * vm_method.c (EXPR1, search_method, rb_method_entry),
      vm_eval.c (rb_call0, rb_search_method_entry): do not use
      refinements for method lookup.
    
    * vm_insnhelper.c (vm_call_method): search methods in refinements if
      ci->me is VM_METHOD_TYPE_REFINED.  If the method is called by
      super (i.e., ci->call == vm_call_super_method), skip the same
      method entry as the current method to avoid infinite call of the
      same method.
    
    * class.c (include_modules_at): add a refined method entry for each
      method defined in a module included in a refinement.
    
    * class.c (rb_prepend_module): set an empty table to
      RCLASS_M_TBL(klass) to add refined method entries, because
      refinements should have priority over prepended modules.
    
    * proc.c (mnew): use rb_method_entry_with_refinements() to get
      a refined method.
    
    * test/ruby/test_refinement.rb (test_inline_method_cache): do not skip
      the test because it should pass successfully.
    
    * test/ruby/test_refinement.rb (test_redefine_refined_method): new
      test for the case a refined method is redefined.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 13, 2012
  1. @ko1

    * vm_insnhelper.c (vm_call_cfunc_with_frame): don't use ci after

    ko1 authored
      EXEC_EVENT_HOOK because ci can be overridden.
    * vm_eval.c: ditto.
    * method.h: change invoker's parameters types.
    * vm_method.c (call_cfunc_invoker_func): ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 25, 2012
  1. @ko1

    * include/ruby/ruby.h, class.c: remove (revert)

    ko1 authored
      `rb_add_method_cfunc_frameless()' API.
      This API is not mature to become an offical API.
      For example, we can not use this API with
      `rb_define_private_method()'.
    * method.h, vm_method.c (rb_add_method_cfunc_frameless): removed.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 23, 2012
  1. @ko1

    * vm_core.h, vm_insnhelper.c, vm_eval.c (OPT_CALL_CFUNC_WITHOUT_FRAME):

    ko1 authored
      add a new otpimization and its macro `OPT_CALL_CFUNC_WITHOUT_FRAME'.
      This optimization makes all cfunc method calls `frameless', which
      is fster than ordinal cfunc method call.
      If `frame' is needed (for example, it calls another method with
      `rb_funcall()'), then build a frame. In other words, this
      optimization delays frame building.
      However, to delay the frame building, we need additional overheads:
      (1) Store the last call information.
      (2) Check the delayed frame buidling before the frame is needed.
      (3) Overhead to build a delayed frame.
      rb_thread_t::passed_ci is storage of delayed cfunc call information.
      (1) is lightweight because it is only 1 assignment to `passed_ci'.
      To achieve (2), we modify GET_THREAD() to check `passed_ci' every
      time. It causes 10% overhead on my envrionment.
      This optimization only works for cfunc methods which do not need
      their `frame'.
      After evaluation on my environment, this optimization does not
      effective every time. Because of this evaluation results, this
      optimization is disabled at default.
    * vm_insnhelper.c, vm.c: add VM_PROFILE* macros to measure behaviour
      of VM internals. I will extend this feature.
    * vm_method.c, method.h: change parameters of the `invoker' function.
      Receive `func' pointer as the first parameter.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 19, 2012
  1. @ko1

    * method.h (rb_method_cfunc_t::invoker): add new field (func ptr)

    ko1 authored
      `invoker'. `invoker' function invoke cfunc body
      (rb_method_cfunc_t::func).
      `invoker' is set at method definition timing.
      With this change, the big `switch' (branch) in `call_cfunc()'
      is no longer needed.
      However, the performance benefit is only a bit.
    * vm_core.h (rb_call_info_t::aux::func): add a new field to store
      cfunc body function pointer.
    * vm_method.c (call_cfunc_invoker_func): add a new function which
      returns a suitable invoke function.
    * vm_method.c (setup_method_cfunc_struct): added.
    * vm_method.c (rb_add_method): fix to set `invoker'.
    * vm_eval.c (vm_call0_body): catch up above changes.
    * vm_insnhelper.c (call_cfunc): removed.
    * vm_insnhelper.c (vm_call_cfunc): fix to call cfunc body
      with `invoker' function.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 18, 2012
  1. @ko1

    * class.c (rb_define_frameless_method): rename from

    ko1 authored
      rb_define_method_fast(). Defined method with this C API
      does not make a method frame. It is bit lightweight than
      ordinal C functions. Now only 0 or 1 argc are permitted.
    * method.h (VM_METHOD_TYPE_CFUNC_FRAMELESS): rename macro name
      from VM_METHOD_TYPE_CFUNC_FAST.
    * vm_insnhelper.c, vm_method.c: rename related functions.
    * proc.c (rb_method_entry_arity): catch up above changes.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37252 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 16, 2012
  1. @nagachika

    * method.h(rb_method_definition_struct): remove a comma after the las…

    nagachika authored
    …t element
    
      of enum.  fix for r37198.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37226 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 15, 2012
  1. @ko1

    * method.h: introduce new method type VM_METHOD_TYPE_CFUNC_FAST.

    ko1 authored
      This method is similar to VM_METHOD_TYPE_CFUNC methods, but
      called cfunc without building new frame (does not push new control
      frame). If error is occured in cfunc, the backtrace only shows
      caller frame and upper.
      This kind of methods can be added by rb_define_method_fast().
      This feature is similar to specialized instructions (opt_plus, etc),
      but more flexible (but a bit slower).
    * class.c (rb_define_method_fast): added.
      Maybe it will be renamed soon.
    * vm_insnhelper.c (vm_call_method): support method type
      VM_METHOD_TYPE_CFUNC_FAST.
    * proc.c (rb_method_entry_arity): catch up new method type.
    * vm_method.c (rb_add_method_cfunc_fast): added.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 8, 2012
  1. @shugo

    * eval.c, gc.c, iseq.c, node.h, vm_insnhelper.c, vm_insnhelper.h,

    shugo authored
      vm_method.c: rename omod and overlaid modules to refinements.
    
    * eval.c (hidden_identity_hash_new): renamed from identity_hash_new.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Aug 2, 2012
  1. @shugo

    * eval.c (rb_mod_using): new method Module#using. [experimental]

    shugo authored
    * eval.c (rb_mod_refine): new method Module#refine. [experimental]
    
    * eval.c (f_using): new method Kernel#using. [experimental]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. @shugo

    * class.c, insns.def, method.h, proc.c, vm.c, vm_core.h, vm_eval.c,

    shugo authored
      vm_insnhelper.c, vm_insnhelper.h, vm_method.c: add klass to
      rb_control_frame_t to implement super correctly.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36595 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Something went wrong with that request. Please try again.