Commits on Jan 28, 2018
  1. method.h: VM_METHOD_TYPE_MINIMUM_BITS

    nobu committed Jan 28, 2018
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62080 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. method.h: BITFIELD in rb_method_definition_t

    nobu committed Jan 28, 2018
    * method.h (rb_method_definition_struct): use BITFIELD for
      rb_method_type_t.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62078 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jan 27, 2018
  1. internal.h: add BITFIELD macro to aid C99 users

    normal
    normal committed Jan 27, 2018
    I plan to use this macro to pack other enums in the VM.
    
    * internal.h: add BITFIELD macro
    * method.h: use BITFIELD for rb_method_visibility_t
      [ruby-core:85074] [Misc #14395]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jan 7, 2018
  1. Speedup `block.call` [Feature #14330]

    ko1 committed Jan 7, 2018
    * insns.def (getblockparamproxy): introduce new instruction to return
      the `rb_block_param_proxy` object if possible. This object responds
      to `call` method and invoke given block (completely similar to `yield`).
    
    * method.h (OPTIMIZED_METHOD_TYPE_BLOCK_CALL): add new optimized call type
      which is for `rb_block_param_proxy.cal`.
    
    * vm_insnhelper.c (vm_call_method_each_type): ditto.
    
    * vm_insnhelper.c (vm_call_opt_block_call): ditto.
    
    * vm_core.h (BOP_CALL, PROC_REDEFINED_OP_FLAG): add check for `Proc#call`
      redefinition.
    
    * compile.c (iseq_compile_each0): compile to use new insn
      `getblockparamproxy` for method call.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jan 2, 2018
  1. bit-fields other than int is a C99ism

    shyouhei committed Jan 2, 2018
    To be precise C90 says "A bit-field may have type int, unsigned
    int, or signed int". It is clear that char or enum are NG.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61554 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Dec 5, 2017
  1. vm_core.h (rb_iseq_locatoin_t): add a field `code_range`

    mame committed Dec 5, 2017
    This change makes each ISeq keep NODE's code range.  This information is
    needed for method coverage.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61025 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. Revamp method coverage to support define_method

    mame committed Dec 5, 2017
    Traditionally, method coverage measurement was implemented by inserting
    `trace2` instruction to the head of method iseq.  So, it just measured
    methods defined by `def` keyword.
    
    This commit drastically changes the measuring mechanism of method
    coverage; at `RUBY_EVENT_CALL`, it keeps a hash from rb_method_entry_t*
    to runs (i.e., it counts the runs per method entry), and at
    `Coverage.result`, it creates the result hash by enumerating all
    `rb_method_entry_t*` objects (by `ObjectSpace.each_object`).
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61023 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 16, 2017
  1. make a func static.

    ko1 committed Nov 16, 2017
    * vm_method.c (rb_resolve_refined_method_callable): make it static.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60808 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. remove unused function.

    ko1 committed Nov 16, 2017
    * vm_method.c (rb_method_entry_with_refinements): removed.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 21, 2017
  1. Add doxygen comments

    sonots committed Oct 21, 2017
    * include/ruby/ruby.h (enum ruby_value_type): add doxygen comments
    * internal.h (enum imemo_type, struct vm_svar): add doxygen comments
    * method.h (rb_method_type_t, rb_method_iseq_t): add doxygen comments
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 6, 2017
  1. proc.c: super_method of included method

    nobu committed Oct 6, 2017
    * proc.c (method_super_method): search the next super method along
      the included ancestor chain.  [ruby-core:83114] [Bug #13973]
    
    * vm_method.c (rb_callable_method_entry_without_refinements):
      return the defined class.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60127 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Aug 17, 2017
  1. Revert r59612

    nobu committed Aug 17, 2017
    * method.h (rb_method_definition_t): rb_method_type_t should be
      unsigned as it needs 5bits at least for signed extension.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. method.h: enum rb_method_definition_t::type

    nobu committed Aug 17, 2017
    * method.h (rb_method_definition_t): define type as an enum for
      debugging.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on May 19, 2017
  1. specify unsigned (fix r58784).

    ko1 committed May 19, 2017
    * method.h (rb_method_definition_t#type): specify unsigned explicitly.
     Some compilers (includes VC) returns negative value.
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58788 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. method.h: pack rb_method_definition_t struct

    normal
    normal committed May 19, 2017
    We only have 12 method types, so 4 bits is enough for
    rb_method_type_t.
    
    Size reductions:
    
    - x86-64     48 => 40 bytes
    - x86        28 => 24 bytes
    
    * method.h (enum method_optimized_type): split out for CPP
      (struct rb_method_definition struct): pack on unaligned systems
      (rb_method_definition_t): split typedef to help ctags
      [ruby-core:81236] [Feature #13494]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 5, 2016
  1. * eval.c, method.h, proc.c, vm.c, vm_eval.c, vm_insnhelper.c, vm_meth…

    k-tsj committed Nov 5, 2016
    …od.c:
    
      TracePoint#method_id should return method_id, not callee_id.
      [ruby-core:77241] [Feature #12747]
    
    * test/ruby/test_settracefunc.rb: change accordingly.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56592 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 18, 2015
  1. * method.h: introduce the folliwing field and macros.

    ko1 committed Nov 18, 2015
      * rb_method_definition_t::complemented_count to count shared method
        entries because of complemented method entries and separate from
        alias_count.
    
        Shared `def' only by complemented method entries should not prevent
        method re-definition warning.
    
      * METHOD_ENTRY_COMPLEMENTED(me) to represent complemented method entry.
      * METHOD_ENTRY_COMPLEMENTED_SET(me) to check it as  complemented me.
    
    * vm_insnhelper.c (aliased_callable_method_entry): should also
      check me->def->complemented_count.
    
    * vm_method.c (method_definition_addref_complement): add to count
      complemented method entries number.
    
    * vm_method.c (rb_method_definition_release): release `def' iff
      alias_count == 0 and complemented_count == 0.
    
    * test/ruby/test_module.rb: add a test.
    
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 17, 2015
  1. revert r52614, r52615, r52617 because they cause serious errors

    ko1 committed Nov 17, 2015
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. * method.h (METHOD_ENTRY_COMPLEMENTED(_SET)): introduced to recognize

    ko1 committed Nov 17, 2015
      complemented method entries or not. There are some cases that callabe
      method entries do not have defined_class.
    
    * vm_method.c (rb_method_entry_complement_defined_class):
      use METHOD_ENTRY_COMPLEMENTED_SET().
    
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  3. * method.h: introduce rb_method_definition_t::complemented_count.

    ko1 committed Nov 17, 2015
    * vm_method.c (method_definition_addref_complement): introduced.
    
      def->alias_count is used to decide warn or do not warn at method
      redefinition. Complented methods should not prevent redefiniton
      warnings.
    
    * vm_method.c (rb_method_definition_release): release def iff
      alias_count == 0 && complemented_count == 0.
    
    * test/ruby/test_module.rb: add a test.
    
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 13, 2015
  1. * method.h: constify rb_cref_t::scope_visi;

    ko1 committed Nov 13, 2015
    * eval_intern.h (CREF_SCOPE_VISI_COPY): catch up this fix.
    
    * vm_method.c: ditto.
    
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52561 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 8, 2015
  1. method.h: suppress warnings

    nobu committed Nov 8, 2015
    * method.h (METHOD_ENTRY_{VISI,BASIC,FLAGS}_SET): suppress
      shift-op-parentheses warnings.  [Fix GH-1082]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Nov 4, 2015
  1. * method.h: fix typo. Patch by @davydovanton

    hsbt committed Nov 4, 2015
      [fix GH-1076][ci skip]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52444 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 28, 2015
  1. NameError#receiver of uninitialized constant

    nobu committed Oct 28, 2015
    * error.c (name_err_mesg_to_str): quote the name if unprintable.
    * object.c (check_setter_id): use rb_check_id to convert names.
    * variable.c (uninitialized_constant): use NameError::message to
      keep the receiver of uninitialized constant.  [Feature #10881]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Oct 6, 2015
  1. * method.h: IMEMO_FL_USER3 and IMEMO_FL_USER4 is not needed any more.

    ko1 committed Oct 6, 2015
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52059 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. * method.h: remove METHOD_ENTRY_SAFE(me) and related code

    ko1 committed Oct 6, 2015
      because $SAFE = 3 and 4 is not available.
      Now, $SAFE is not checked on method dispatch at all.
    * vm_eval.c, vm_insnhelper.c, vm_method.c: ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  3. * method.h: typo fix. Patch by @davydovanton [fix GH-1032][ci skip]

    hsbt committed Oct 6, 2015
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Sep 19, 2015
  1. iseq.h: rb_iseq_t

    nobu committed Sep 19, 2015
    * iseq.h (rb_iseq_t): also should be defined here for prototype
      declarations arguments.
    
    * method.h (rb_iseq_t): get rid of redefinition.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. iseq.h, method.h: fix include guards [ci skip]

    nobu committed Sep 19, 2015
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Aug 19, 2015
  1. vm_method.c: reuse method entry

    nobu committed Aug 19, 2015
    * vm_method.c (rb_obj_respond_to): reuse found method entry
      instead of searching same entry repeatedly.
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Aug 14, 2015
  1. method.h: cast checks to int for >= 0 checks

    normal
    normal committed Aug 14, 2015
    Setting VM_CHECK_MODE to 1 in vm_core.h makes noisy warnings
    otherwise.  AFAIK, the signedness of enums is
    implementation-dependent, and GCC considers them unsigned and
    warns.
    
    Tested on gcc 4.7.2 (Debian 4.7.2-5)
    
    * method.h (METHOD_ENTRY_VISI_SET): cast visi to int
      (METHOD_ENTRY_FLAGS_SET): ditto
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51577 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jul 21, 2015
  1. * make rb_iseq_t T_IMEMO object (type is imemo_iseq).

    ko1 committed Jul 21, 2015
      All contents of previous rb_iseq_t is in rb_iseq_t::body.
      Remove rb_iseq_t::self because rb_iseq_t is an object.
      RubyVM::InstructionSequence is wrapper object points T_IMEMO/iseq.
      So RubyVM::ISeq.of(something) method returns different wrapper
      objects but they point the same T_IMEMO/iseq object.
      This patch is big, but most of difference is replacement of
      iseq->xxx to iseq->body->xxx.
      (previous) rb_iseq_t::compile_data is also located to
      rb_iseq_t::compile_data.
      It was moved from rb_iseq_body::compile_data.
      Now rb_iseq_t has empty two pointers.
      I will split rb_iseq_body data into static data and dynamic data.
    * compile.c: rename some functions/macros.
      Now, we don't need to separate iseq and iseqval (only VALUE).
    * eval.c (ruby_exec_internal): `n' is rb_iseq_t (T_IMEMO/iseq).
    * ext/objspace/objspace.c (count_imemo_objects): count T_IMEMO/iseq.
    * gc.c: check T_IMEMO/iseq.
    * internal.h: add imemo_type::imemo_iseq.
    * iseq.c: define RubyVM::InstructionSequnce as T_OBJECT.
      Methods are implemented by functions named iseqw_....
    * load.c (rb_load_internal0): rb_iseq_new_top() returns
      rb_iseq_t (T_IMEMO/iesq).
    * method.h (rb_add_method_iseq): accept rb_iseq_t (T_IMEMO/iseq).
    * vm_core.h (GetISeqPtr): removed because it is not T_DATA now.
    * vm_core.h (struct rb_iseq_body): remove padding for
      [Bug #10037][ruby-core:63721].
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  2. * method.h: constify rb_method_iseq_t::iseqptr.

    ko1 committed Jul 21, 2015
    * proc.c (rb_method_entry_min_max_arity): catch up this fix.
    * vm_insnhelper.c (def_iseq_ptr): constify.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51322 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jul 6, 2015
  1. * method.h, proc.c (rb_method_entry_location): make it static

    ko1 committed Jul 6, 2015
      and remoev prefix `rb_' because it is used only in proc.c.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51159 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Commits on Jul 3, 2015
  1. * method.h: introduce rb_callable_method_entry_t to remove

    ko1 committed Jul 3, 2015
      rb_control_frame_t::klass.
      [Bug #11278], [Bug #11279]
      rb_method_entry_t data belong to modules/classes.
      rb_method_entry_t::owner points defined module or class.
        module M
          def foo; end
        end
      In this case, owner is M.
      rb_callable_method_entry_t data belong to only classes.
      For modules, MRI creates corresponding T_ICLASS internally.
      rb_callable_method_entry_t can also belong to T_ICLASS.
      rb_callable_method_entry_t::defined_class points T_CLASS or
      T_ICLASS.
      rb_method_entry_t data for classes (not for modules) are also
      rb_callable_method_entry_t data because it is completely same data.
      In this case, rb_method_entry_t::owner == rb_method_entry_t::defined_class.
      For example, there are classes C and D, and incldues M,
        class C; include M; end
        class D; include M; end
      then, two T_ICLASS objects for C's super class and D's super class
      will be created.
      When C.new.foo is called, then M#foo is searcheed and
      rb_callable_method_t data is used by VM to invoke M#foo.
      rb_method_entry_t data is only one for M#foo.
      However, rb_callable_method_entry_t data are two (and can be more).
      It is proportional to the number of including (and prepending)
      classes (the number of T_ICLASS which point to the module).
      Now, created rb_callable_method_entry_t are collected when
      the original module M was modified. We can think it is a cache.
      We need to select what kind of method entry data is needed.
      To operate definition, then you need to use rb_method_entry_t.
      You can access them by the following functions.
      * rb_method_entry(VALUE klass, ID id);
      * rb_method_entry_with_refinements(VALUE klass, ID id);
      * rb_method_entry_without_refinements(VALUE klass, ID id);
      * rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
      To invoke methods, then you need to use rb_callable_method_entry_t
      which you can get by the following APIs corresponding to the
      above listed functions.
      * rb_callable_method_entry(VALUE klass, ID id);
      * rb_callable_method_entry_with_refinements(VALUE klass, ID id);
      * rb_callable_method_entry_without_refinements(VALUE klass, ID id);
      * rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
      VM pushes rb_callable_method_entry_t, so that rb_vm_frame_method_entry()
      returns rb_callable_method_entry_t.
      You can check a super class of current method by
      rb_callable_method_entry_t::defined_class.
    * method.h: renamed from rb_method_entry_t::klass to
      rb_method_entry_t::owner.
    * internal.h: add rb_classext_struct::callable_m_tbl to cache
      rb_callable_method_entry_t data.
      We need to consider abotu this field again because it is only
      active for T_ICLASS.
    * class.c (method_entry_i): ditto.
    * class.c (rb_define_attr): rb_method_entry() does not takes
      defiend_class_ptr.
    * gc.c (mark_method_entry): mark RCLASS_CALLABLE_M_TBL() for T_ICLASS.
    * cont.c (fiber_init): rb_control_frame_t::klass is removed.
    * proc.c: fix `struct METHOD' data structure because
      rb_callable_method_t has all information.
    * vm_core.h: remove several fields.
      * rb_control_frame_t::klass.
      * rb_block_t::klass.
      And catch up changes.
    * eval.c: catch up changes.
    * gc.c: ditto.
    * insns.def: ditto.
    * vm.c: ditto.
    * vm_args.c: ditto.
    * vm_backtrace.c: ditto.
    * vm_dump.c: ditto.
    * vm_eval.c: ditto.
    * vm_insnhelper.c: ditto.
    * vm_method.c: ditto.
    
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e