aboutsummaryrefslogtreecommitdiffstats
path: root/object.c
Commit message (Collapse)AuthorAgeFilesLines
* Deprecate taint/trust and related methods, and make the methods no-opsJeremy Evans2019-11-181-101/+21
| | | | | | This removes the related tests, and puts the related specs behind version guards. This affects all code in lib, including some libraries that may want to support older versions of Ruby.
* Prohibit calling undefined allocator [Bug #16297]Nobuyoshi Nakada2019-11-061-2/+29
|
* [EXPERIMENTAL] Make NilClass#to_s, TrueClass#to_s and FalseClass#to_s return ↵Jean Boussier2019-09-271-3/+13
| | | | | | | | a frozen String * Always the same frozen String for each of these values. * Avoids extra allocations whenever calling these 3 methods. * See [Feature #16150]
* Make passing empty keywords to dig pass empty keywords to next dig methodJeremy Evans2019-09-201-2/+5
| | | | | | | | | | | | | | | | If defined in Ruby, dig would be defined as def dig(arg, *rest) end, it would not use keywords. If the last dig argument was an empty hash, it could be treated as keyword arguments by the next dig method. Allow dig to pass along the empty keyword flag if called with an empty keyword, to suppress the previous behavior and force treating the hash as a positional argument and not keywords. Also handle the case where dig calls method_missing, passing the empty keyword flag to that as well. This requires adding rb_check_funcall_with_hook_kw functions, so that dig can specify how arguments are treated. It also adds kw_splat arguments to a couple static functions.
* Only set RB_PASS_CALLED_KEYWORDS in C functions called directly from RubyJeremy Evans2019-09-141-2/+19
| | | | | | | | | | | It is not safe to set this in C functions that can be called from other C functions, as in the non argument-delegation case, you can end up calling a Ruby method with a flag indicating keywords are set without passing keywords. Introduce some new *_kw functions that take a kw_splat flag and use these functions to set RB_PASS_CALLED_KEYWORDS in places where we know we are delegating methods (e.g. Class#new, Method#call)
* drop-in type check for rb_define_private_method卜部昌平2019-08-291-12/+24
| | | | | | | We can check the function pointer passed to rb_define_private_method like how we do so in rb_define_method. Doing so revealed some problematic usages of rb_obj_dummy. They had to be split according to their arity.
* move docs around [ci skip]卜部昌平2019-08-291-0/+261
| | | | To properly generate documents.
* drop-in type check for rb_define_global_function卜部昌平2019-08-291-2/+8
| | | | | | We can check the function pointer passed to rb_define_global_function like we do so in rb_define_method. It turns out that almost anybody is misunderstanding the API.
* Minor documentation fixes [ci skip]Jeremy Evans2019-08-241-5/+5
| | | | | | From zverok (Victor Shepelev) Fixes [Misc #16126]
* Move Object#hash rdoc to hash.c [ci skip]Jeremy Evans2019-08-241-20/+1
| | | | | | This gets RDoc to pick up the documentation correctly. Problem pointed out by zverok (Victor Shepelev).
* Fix doc in Object#respond_to_missing? (#2239)songhuangcn2019-08-161-1/+1
|
* Revert "Revert "Add a specialized instruction for `.nil?` calls""Yusuke Endoh2019-08-021-1/+1
| | | | | | This reverts commit a0980f2446c0db735b8ffeb37e241370c458a626. Retry for macOS Mojave.
* Revert "Add a specialized instruction for `.nil?` calls"Yusuke Endoh2019-08-021-1/+1
| | | | | | | | | | This reverts commit 9faef3113fb4331524b81ba73005ba13fa0ef6c6. It seemed to cause a failure on macOS Mojave, though I'm unsure how. https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1014/ruby-master/log/20190802T034503Z.fail.html.gz This tentative revert is to check if the issue is actually caused by the change or not.
* Update object.cAaron Patterson2019-07-311-1/+1
| | | | Co-Authored-By: Takashi Kokubun <takashikkbn@gmail.com>
* Add a specialized instruction for `.nil?` callsAaron Patterson2019-07-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a specialized instruction for called to `.nil?`. It is about 27% faster than master in the case where the object is nil or not nil. In the case where an object implements `nil?`, I think it may be slightly slower. Here is a benchmark: ```ruby require "benchmark/ips" class Niller def nil?; true; end end not_nil = Object.new xnil = nil niller = Niller.new Benchmark.ips do |x| x.report("nil?") { xnil.nil? } x.report("not nil") { not_nil.nil? } x.report("niller") { niller.nil? } end ``` On Ruby master: ``` [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 429.195k i/100ms not nil 437.889k i/100ms niller 437.935k i/100ms Calculating ------------------------------------- nil? 20.166M (± 8.1%) i/s - 100.002M in 5.002794s not nil 20.046M (± 7.6%) i/s - 99.839M in 5.020086s niller 22.467M (± 6.1%) i/s - 112.111M in 5.013817s [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 449.660k i/100ms not nil 433.836k i/100ms niller 443.073k i/100ms Calculating ------------------------------------- nil? 19.997M (± 8.8%) i/s - 99.375M in 5.020458s not nil 20.529M (± 7.0%) i/s - 102.385M in 5.020689s niller 21.796M (± 8.0%) i/s - 108.110M in 5.002300s [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 402.119k i/100ms not nil 438.968k i/100ms niller 398.226k i/100ms Calculating ------------------------------------- nil? 20.050M (±12.2%) i/s - 98.519M in 5.008817s not nil 20.614M (± 8.0%) i/s - 102.280M in 5.004531s niller 22.223M (± 8.8%) i/s - 110.309M in 5.013106s ``` On this branch: ``` [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 468.371k i/100ms not nil 456.517k i/100ms niller 454.981k i/100ms Calculating ------------------------------------- nil? 27.849M (± 7.8%) i/s - 138.169M in 5.001730s not nil 26.417M (± 8.7%) i/s - 131.020M in 5.011674s niller 21.561M (± 7.5%) i/s - 107.376M in 5.018113s [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 477.259k i/100ms not nil 428.712k i/100ms niller 446.109k i/100ms Calculating ------------------------------------- nil? 28.071M (± 7.3%) i/s - 139.837M in 5.016590s not nil 25.789M (±12.9%) i/s - 126.470M in 5.011144s niller 20.002M (±12.2%) i/s - 98.144M in 5.001737s [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 467.676k i/100ms not nil 445.791k i/100ms niller 415.024k i/100ms Calculating ------------------------------------- nil? 26.907M (± 8.0%) i/s - 133.755M in 5.013915s not nil 25.319M (± 7.9%) i/s - 125.713M in 5.007758s niller 19.569M (±11.8%) i/s - 96.286M in 5.008533s ``` Co-Authored-By: Ashe Connor <kivikakk@github.com>
* Add more documentation on #eql?/#hash relationship [ci skip]Jeremy Evans2019-07-261-1/+5
| | | | Fixes [Bug #14263]
* Restore documentation for Object#hash [ci skip]Jeremy Evans2019-07-261-0/+19
| | | | | Object#hash documentation was removed (probably by accident) in 7b19e6f3fdf8b0238752cb1561dfe42a283f5308.
* Check exception flag as a bool [Bug #15987]Nobuyoshi Nakada2019-07-111-8/+21
|
* Moved error messagesNobuyoshi Nakada2019-07-091-13/+15
|
* * expand tabs.git2019-06-231-57/+57
|
* Module#constant_source_location [Feature #10771]Nobuyoshi Nakada2019-06-231-0/+100
|
* remove 2 redundant calls to rb_str_dupLuke Gruber2019-06-131-1/+1
| | | | | | Because `rb_class_path` calls `rb_str_dup` already. Closes: https://github.com/ruby/ruby/pull/2232
* Avoid triggering autoload in Module#const_defined?(String)Jean Boussier2019-05-071-0/+3
| | | | [Bug #15780]
* object.c: fix searching nested const pathsnobu2019-04-081-7/+30
| | | | | | | | * object.c (rb_mod_const_get, rb_mod_const_defined): nested const paths should not search from toplevel constants. [ruby-core:92202] [Bug #15758] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] fix markups [ci skip]nobu2019-03-221-78/+75
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Fix `Module#const_defined?` on inherited constantsnobu2019-01-281-1/+0
| | | | | | | | [Fix GH-2061] From: manga_osyo <manga.osyo@gmail.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* No FloatDomainError at non-finitive number if exception: falsenobu2019-01-121-0/+1
| | | | | | [ruby-core:91021] [Bug #15525] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66797 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] Add `or nil` to call-seq [ci skip]kazu2019-01-031-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c (rb_obj_match): use rb_warn for deprecation warningmame2018-12-261-2/+2
| | | | | | Now the warning is printed even without -w option. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* complex.c, object.c: [DOC] improve "exception: false" docsstomar2018-12-241-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* {complex,object,rational}.c: document exception: falsenormal2018-12-221-5/+15
| | | | | | | | From: Victor Shepelev <zverok.offline@gmail.com> [ruby-core:90673] [Bug #15452] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Use idExceptionnobu2018-12-221-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] Update Object#=~ [ci skip]kazu2018-12-161-3/+4
| | | | | | see r65989 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66420 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Show the class of the receiver [Feature #15231]nobu2018-12-061-1/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Prefer rb_check_arity when 0 or 1 argumentsnobu2018-12-051-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66205 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: Deprecate Object#=~ and add NilClass#=~`mame2018-11-261-0/+15
| | | | | | | | | | Object#=~ always returns nil. This behavior is not only unuseful but also troublesome because it may hide a type error. This change deprecates Object#=~. For compatibility, NilClass#=~ is newly introduced. [Feature #15231] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Always inline rb_to_integer to prevent a method call penaltyk0kubun2018-11-031-1/+2
| | | | | | | | | | for integer types Close https://github.com/ruby/ruby/pull/2001 Co-Authored-By: methodmissing <lourens@methodmissing.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65516 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: [DOC] fix typos in doc for yield_selfstomar2018-10-261-5/+4
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Improve doc of yield_selfaycabta2018-10-211-0/+19
| | | | | | * object.c: Add code samples for yield_self. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Get rid of calling to_f in rat2dbl_without_to_fnobu2018-10-021-6/+5
| | | | | | [Bug #15189] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Fix Rational of Floatnobu2018-10-021-3/+12
| | | | | | [ruby-core:89239] [Bug #15189] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: prefer base optargnobu2018-07-221-8/+16
| | | | | | | | * object.c (rb_f_integer): prefer `base` optional argument over keyword arguments. this issue should be resolved more generally by separating keyword arguments from hashes in the future. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Don't copy FL_USER* on Kernel#clone. [Bug #14847]ko12018-07-091-2/+0
| | | | | | | | | * object.c (mutable_obj_clone): `Kernel#clone` should not copy FL_USER* flags because they are copied unexpectedly. Unexpected copy will break internal data consistency. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: Add a new alias `then` to `Kernel#yield_self`; [Feature #14594]matz2018-05-301-1/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: raise on long invalid float stringnobu2018-05-041-1/+25
| | | | | | | | * object.c (rb_cstr_to_dbl_raise): check long invalid float string more precisely when truncating insignificant part. [ruby-core:86800] [Bug #14729] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63334 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: fix exponent with underscorenobu2018-05-021-1/+5
| | | | | | | | * object.c (rb_cstr_to_dbl_raise): do not ignore exponent part when the input string longer than internal buffer contains underscore(s). [ruby-core:86836] [Bug #14731] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63322 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* symbol.c: non-ASCII constant namesnobu2018-04-101-2/+2
| | | | | | | | | | * symbol.c (rb_sym_constant_char_p): support for non-ASCII constant names. [Feature #13770] * object.c (rb_mod_const_get, rb_mod_const_defined): support for non-ASCII constant names. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Add `exception:` keyword in Kernel#Float()mrkn2018-03-151-81/+136
| | | | | | | | | | Support `exception:` keyword argument in `Kernel#Float()`. If `exception:` is `false`, `Kernel#Float()` returns `nil` if the given value cannot be interpreted as a float value. The default value of `exception:` is `true`. This is part of [Feature #12732]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Add `exception:` keyword in Kernel#Integer()mrkn2018-03-151-27/+56
| | | | | | | | | | Support `exception:` keyword argument in Kernel#Integer(). If `exception:` is `false`, `Kernel#Integer()` returns `nil` if the given value cannot be interpreted as an integer value. The default value of `exception:` is `true`. This is part of [Feature #12732]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62757 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c: conversions with IDnobu2018-03-071-7/+11
| | | | | | | * object.c (rb_to_integer, rb_check_to_int): convert to Integer with method ID. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e