path: root/object.c
AgeCommit message (Collapse)Author
47 hoursAdjust styles [ci skip]Nobuyoshi Nakada
* --braces-after-func-def-line * --dont-cuddle-else * --procnames-start-lines * --space-after-for * --space-after-if * --space-after-while
2021-06-02Implemented some NilClass method in Ruby code is faster [Feature #17054] (#3366)S.H
Notes: Merged-By: k0kubun <>
2021-05-18Object whats here (#4503)Burdette Lamar
What's Here section for class Object. Notes: Merged-By: BurdetteLamar <>
2021-05-13What's Here for BasicObject (#4499)Burdette Lamar
* What's Here for BasicObject Notes: Merged-By: BurdetteLamar <>
2021-05-13What's Here for Kernel (#4488)Burdette Lamar
Notes: Merged-By: BurdetteLamar <>
2021-05-03Eagerly allocate instance variable tables along with objectAaron Patterson
This allows us to allocate the right size for the object in advance, meaning that we don't have to pay the cost of ivar table extension later. The idea is that if an object type ever became "extended" at some point, then it is very likely it will become extended again. So we may as well allocate the ivar table up front. Notes: Merged:
2021-04-01[Doc] Update to FrozenError from RuntimeError in Object#freezeKenichi Kamiya
Notes: Merged:
2021-02-07[DOC] Modified prefixes to get rid of conflictsNobuyoshi Nakada
2021-02-07[DOC] make individual names so that rdoc can find each documentsNobuyoshi Nakada
2021-02-07[DOC] Module#method_undefinedNobuyoshi Nakada
2020-12-24[DOC] Fix typosMarcus Stollsteimer
2020-12-22rb_cData: no longer exists卜部昌平
Commit 8918a9cf6c65409ae1ffcdea324a1b97c6e5bb70 introduced macro `#define rb_cData rb_cData()`. This deleting `VALUE rb_cData;` declaration was then macro-expanded into `VALUE rb_cData();`. This worked by accident because the expanded expression happen to be a K&R style function declaration. This is rather complicated and I guess unintended. Just delete the line to keep things simple straight forward.
2020-12-22Removed rb_cData entityNobuyoshi Nakada
* Use the wrapper of rb_cObject instead of data access * Replaced rest of extentions * Updated the version guard for Data * Added the version guard of rb_cData Notes: Merged:
2020-12-22Data: delete卜部昌平
Has been deprecated since 684bdf6171b76f5bc5e4f05926a5ab01ec2b4fd5. Matz says in [ruby-core:83954] that Data should be an alias of Object. Because rb_cData has not been deprecated, let us deprecate the constant to make it a C-level synonym of rb_cObject. Notes: Merged:
2020-12-19Use rb_id_attrset without intermediate stringsNobuyoshi Nakada
2020-12-19Feature 17314: update docs and NEWS about attr* methods returning array of ↵Radosław Bułat
2020-12-19Revert "Revert "Use rb_id_attrset without intermediate strings""Yusuke Endoh
This reverts commit 41c208d4a463183fddca250026e5f1cd759d2604. Reintroduce 66090b9d10cdaed917b525225e59d1c19e399248.
2020-12-19attr_reader, attr_writer, attr_accessor and attr methods returns array of ↵Radosław Bułat
symbols (#3935) Co-authored-by: Yusuke Endoh <> Notes: Merged-By: mame <>
2020-12-18Use category: :deprecated in warnings that are related to deprecationJeremy Evans
Also document that both :deprecated and :experimental are supported :category option values. The locations where warnings were marked as deprecation warnings was previously reviewed by shyouhei. Comment a couple locations where deprecation warnings should probably be used but are not currently used because deprecation warning enablement has not occurred at the time they are called (RUBY_FREE_MIN, RUBY_HEAP_MIN_SLOTS, -K). Add assert_deprecated_warn to test assertions. Use this to simplify some tests, and fix failing tests after marking some warnings with deprecated category. Notes: Merged:
2020-12-18Revert "Better cooperation between public/protected/private with attr* and ↵Yusuke Endoh
alias_method" This reverts commit 81739ad4fdfcc86a769056fec352f27c686fba1b.
2020-12-18Revert "Use rb_id_attrset without intermediate strings"Yusuke Endoh
This reverts commit 66090b9d10cdaed917b525225e59d1c19e399248.
2020-12-18Use rb_id_attrset without intermediate stringsNobuyoshi Nakada
2020-12-17Better cooperation between public/protected/private with attr* and alias_methodRadosław Bułat
Notes: Merged:
2020-12-16[DOC] Described "numeric representation" more precisely [ci skip]Nobuyoshi Nakada
[Bug #17395]
2020-12-05Protoized old pre-ANSI K&R style definitionsNobuyoshi Nakada
2020-10-28`dest` is always embedded so we can remove this checkAaron Patterson
Notes: Merged:
2020-10-21Don't redefine #rb_intern over and over againStefan Stüben
Notes: Merged:
2020-10-17remove rb_obj_iv_index_tblKoichi Sasada
(1) nobody uses it (gem-codesearch) (2) the data strucuture will be changed. Notes: Merged:
2020-10-10Improve doc in rb_class_real doc (#3637)S.H
Notes: Merged-By: marcandre <>
2020-09-02Initialize new T_OBJECT as ROBJECT_EMBEDJohn Hawthorn
Previously, when an object is first initialized, ROBJECT_EMBED isn't set. This means that for brand new objects, ROBJECT_NUMIV(obj) is 0 and ROBJECT_IV_INDEX_TBL(obj) is NULL. Previously, this combination meant that the inline cache would never be initialized when setting an ivar on an object for the first time since iv_index_tbl was NULL, and if it were it would never be used because ROBJECT_NUMIV was 0. Both cases always fell through to the generic rb_ivar_set which would then set the ROBJECT_EMBED flag and initialize the ivar array. This commit changes rb_class_allocate_instance to set the ROBJECT_EMBED flag on the object initially and to initialize all members of the embedded array to Qundef. This allows the inline cache to be set correctly on first use and to be used on future uses. This moves rb_class_allocate_instance to gc.c, so that it has access to newobj_of. This seems appropriate given that there are other allocating methods in this file (ex. rb_data_object_wrap, rb_imemo_new). Notes: Merged:
2020-08-19ROBJECT_IV_INDEX_TBL: convert into an inline function卜部昌平
Former ROBJECT_IV_INDEX_TBL macro included RCLASS_IV_INDEX_TBL, which is not disclosed to extension libraies. The macro was kind of broken. Why not just deprecate it, and convert the internal use into an inline function. Notes: Merged:
2020-07-30[skip-ci] Clarification for dup vs clone docsEspartaco Palma
Both clone & dup returns a new object when executed on the documentation looks like they are returning the same object cloned or dup'ed which is true for method as extend, but not for the above mentioned. Notes: Merged:
2020-07-13inline Primitive.cexpr!卜部昌平
We can obtain the verbatim source code of Primitive.cexpr!. Why not paste that content into the JITed program. Notes: Merged:
2020-07-03Make Kernel#then, #yield_self, #frozen? builtin (#3283)Takashi Kokubun
* Make Kernel#then, #yield_self, #frozen? builtin * Fix test_jit Notes: Merged-By: k0kubun <>
2020-07-03Rewrite Kernel#tap with Ruby (#3281)Takashi Kokubun
* Rewrite Kernel#tap with Ruby This was good for VM too, but of course my intention is to unblock JIT's inlining of a block over yield (inlining invokeyield has not been committed though). * Fix test_settracefunc About the :tap deletions, the :tap events are actually traced (we already have a TracePoint test for builtin methods), but it's filtered out by tp.path == "xyzzy" (it became "<internal:kernel>"). We could trace tp.path == "<internal:kernel>" cases too, but the lineno is impacted by kernel.rb changes and I didn't want to make it fragile for kernel.rb lineno changes. Notes: Merged-By: k0kubun <>
2020-06-29add UNREACHABLE_RETURN卜部昌平
Not every compilers understand that rb_raise does not return. When a function does not end with a return statement, such compilers can issue warnings. We would better tell them about reachabilities. Notes: Merged:
2020-06-29rb_cstr_to_dbl_raise: do not goto into a branch卜部昌平
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. Notes: Merged:
2020-06-29rb_convert_to_integer: do not goto into a branch卜部昌平
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. Notes: Merged:
2020-06-29rb_mod_const_location: do not goto into a branch卜部昌平
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. Notes: Merged:
2020-06-29rb_mod_const_defined: do not goto into a branch卜部昌平
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. Notes: Merged:
2020-06-29rb_mod_const_get: do not goto into a branch卜部昌平
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. Notes: Merged:
2020-06-29class_or_module_required: do not goto into a branch卜部昌平
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. Notes: Merged:
2020-06-23Annotate Kernel#class as inline (#3250)Takashi Kokubun
``` $ benchmark-driver -v --rbenv 'before;after;before --jit;after --jit' benchmark/mjit_class.yml --repeat-count=4 before: ruby 2.8.0dev (2020-06-23T07:09:54Z master 37a2e48d76) [x86_64-linux] after: ruby 2.8.0dev (2020-06-23T17:29:56Z inline-class 0ff147c007) [x86_64-linux] before --jit: ruby 2.8.0dev (2020-06-23T07:09:54Z master 37a2e48d76) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-06-23T17:29:56Z inline-class 0ff147c007) +JIT [x86_64-linux] Calculating ------------------------------------- before after before --jit after --jit mjit_class(self) 39.219M 40.060M 53.502M 69.202M i/s - 40.000M times in 1.019915s 0.998495s 0.747631s 0.578021s mjit_class(1) 39.567M 41.242M 52.100M 68.895M i/s - 40.000M times in 1.010935s 0.969885s 0.767749s 0.580591s Comparison: mjit_class(self) after --jit: 69201690.7 i/s before --jit: 53502336.4 i/s - 1.29x slower after: 40060289.1 i/s - 1.73x slower before: 39218939.2 i/s - 1.76x slower mjit_class(1) after --jit: 68895358.6 i/s before --jit: 52100353.0 i/s - 1.32x slower after: 41241993.6 i/s - 1.67x slower before: 39567314.0 i/s - 1.74x slower ``` Notes: Merged-By: k0kubun <>
2020-06-10Fix a typo in instance_variable_set documentationJean byroot Boussier
Notes: Merged:
2020-06-10Change language used in instance_variable_set documentation [ci skip]Jeremy Evans
This uses less harsh language recommended by duerst. Fixes [Misc #15265] Fixes [Misc #15748]
2020-05-11sed -i 's|ruby/impl|ruby/internal|'卜部昌平
To fix build failures. Notes: Merged:
2020-05-11sed -i s|ruby/3|ruby/impl|g卜部昌平
This shall fix compile errors. Notes: Merged:
2020-05-08Classes made from Struct should have default `new` singleton method.Marc-Andre Lafortune
[Bug #16465] [Bug #16801] [Fix GH-2795] [Fix GH-2944] [Fix GH-3045] [Fix GH-3093] Note: Backporting shouldn't modify object.h and instead can use struct_new_kw which is basically a duplicate implementation of rb_class_new_instance_pass_kw Co-authored-by: Yusuke Endoh <> Co-authored-by: John Hawthorn <> Co-authored-by: Adam Hess <> Co-authored-by: Jose Cortinas <> Co-authored-by: Jean Boussier <> Notes: Merged:
2020-05-07Share logically equivalent functionsNobuyoshi Nakada
2020-05-06[DOC] Removed no longer meaningful part [ci skip]Nobuyoshi Nakada
As now `Object#===` document is separated from `rb_equal`, this note no longer makes sense.