* sprintf.c (rb_str_format): format exact number more exactly.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* variable.c (rb_f_global_variables): add $1..$9 only if $~ is
set. fix the condition removed at r14014.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53530 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This further avoids class name resolution issues which came
about due to relying on hash table ordering before r53376.
Pre-caching the class name when it is never used raises memory
use, but the overall gain from moving away from st still gives
us a small gain. Reverting r53376 and this patch and testing with
"valgrind -v ./ruby -rrdoc -eexit" on x86 (32-bit) shows:
before:
in use at exit: 1,662,239 bytes in 25,286 blocks
total heap usage: 49,514 allocs, 24,228 frees, 6,005,561 bytes allocated
after, with this change:
in use at exit: 1,646,529 bytes in 24,572 blocks
total heap usage: 48,891 allocs, 24,319 frees, 6,003,921 bytes allocated
* class.c (Init_class_hierarchy): resolve name for rb_cObject ASAP
* object.c (rb_mod_const_set): move name resolution to rb_const_set
* variable.c (rb_const_set): do class resolution here
[ruby-core:72807] [Bug #11977]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* iseq.c (iseqw_mark): as wrapped iseq is isolated from the call
stack, it needs to take care of its parent and ancestors, so
that they do not become orphans. [ruby-core:72620] [Bug #11928]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
r53381 changed to accept only Symbol or String for accessors, but
there are several rubygems that pass classes (e.g. Array,
Hash, ...) as accessors. Prior r53381, it was accepted because Class#to_s
returns its class name. After r53381 given accessors are checked
with define_method, but it accepts only Symbol or String, otherwise
raises TypeError.
def_delegator Foo, :some_method
This change is to revert unwanted incompatibility. But this behavior
may change in the future.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
parsing/checking for upcase/downcase/capitalize/swapcase
(see r53503; with Kimihito Matsui)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in: check if the API version number is consistent with
the program version number.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* compile.c (compile_massign_lhs): when index ends with splat,
append rhs value to it like POSTARG, since VM_CALL_ARGS_SPLAT
splats the last argument only. [ruby-core:72777] [Bug #11970]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* include/ruby/missing.h (explicit_bzero_by_memset_s): remove
inline implementation by memset_s, which needs a macro before
including headers and can cause problems in extension libraries
by the order of the macro and headers.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53493 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This was made obsolete by r4190 back in July 2003. Furthermore,
this existed less than 3 months as it was only introduced in
r3782.
So with absolutely no references to rb_deferr, I doubt any vim
plugin would care anymore.
ChangeLog: fixup indent of my previous commit, oops :X
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* symbol.h (is_attrset_id): ASET is an attrset ID. fix
unexpected safe call instead of an ordinary ASET.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in, win32/setup.mak: extract RUBY_PROGRAM_VERSION from
RUBY_VERSION in version.h instead of RUBY_API_VERSION numbers in
include/ruby/version.h, and cut it into version numbers.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Revert "* tool/make-snapshot: fix for the changes of version.h in r53314."
Revert "* version.h (RUBY_BUILD_VERSION_STR_3): Workaround for old version of"
Revert "program version from API version"
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Keys of GC::INTERNAL_CONSTANTS are also renamed.
* test/ruby/test_gc.rb: catch up this fix.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
`page_length' is not clear (we may understand with length of
a page).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53464 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
whether a page is in a tomb or not. Instead of this field,
heap_page:🎏:in_tomb (1 bit field) is added.
Also type of heap_page::(total|free|final)_slots are changed from
int to short. 2B is enough for them.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53461 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
and HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P on C++.
[ruby-core:72736] [Bug #11962]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* doc/marshal.rdoc: Clarify object references example, that the
reference is same object. [Fix GH-1156]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53438 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This should match the behavior of IO#binmode as far
as treating content as ASCII-8BIT (binary).
* ext/stringio/stringio.c (strio_binmode): implement to set encoding
* test/stringio/test_stringio.rb (test_binmode): new test
[ruby-core:72699] [Bug #11945]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
The position of `/* fall through */` was moved by r52931.
* insns.def (opt_case_dispatch): Move a comment to the
appropriate position.
[ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/rubygems/security.rb (DIGEST_ALGORITHM, KEY_ALGORITHM):
should check same name as the used constants.
[ruby-core:72674] [Bug #11940]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* acinclude.m4: rename aclocal.m4, which should be generated by
aclocal. [ruby-core:72675] [Bug #11941]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53414 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
"Qfalse" and "(VALUE)0" are equivalent, and do not matter
for an ignored argument, either.
Additionally, there's no reason to cast the pointer to
rb_thread_sleep_deadly when we already have a queue_sleep
wrapper.
* thread_sync.c (queue_do_pop): avoid cast with Qfalse
(rb_szqueue_push): ditto, use queue_sleep wrapper
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53413 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y (set_yylval_num): should be used as nd_state, set to u3.
[ruby-core:72638] [Bug #11932]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/mkconfig.rb (RbConfig): prefix SDKROOT to oldincludedir
not includedir, the latter is outside the ruby installation.
[ruby-core:72496] [Bug #11881]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test/ruby/test_lazy_enumerator.rb (test_take_bad_arg): Add test
code in case of Enumerator::Lazy#take called with negative number.
[ruby-dev:49467] [Bug #11933]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y (parser_here_document): update indent for each line in
indented here document with single-quotes.
[ruby-core:72479] [Bug #11871]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/ostruct.rb (freeze): define deferred accessors before
freezing to get rid of an error when just reading frozen
OpenStruct.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/forwardable.rb (def_instance_delegator): adjust backtrace of
method body by tail call optimization. adjusting the delegated
target is still done by deleting backtrace.
* lib/forwardable.rb (def_single_delegator): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/forwardable.rb (def_instance_delegator) fix delegating to
'args' and 'block', clashing with local variables in generated
methods. [ruby-core:72579] [Bug #11916]
* lib/forwardable.rb (def_single_delegator): ditto.
If you have a class that uses Forwardable to delegate a method to
another object, and the method that returns the delegate object is
called `args` or `block`, then Forwardable will fail to work.
Here's a simple example:
class ModelCreator
extend Forwardable
attr_reader :args
def_delegator :args, :model_name
def initialize(args)
@args = args
end
end
ModelCreator.new.model_name
If you run the last line above, then you'll get:
NoMethodError: undefined method `model_name' for []:Array
This error occurs because `def_delegator` -- as it is written in Ruby --
uses metaprogramming to add methods to the class that will then delegate
to the delegate object. So it's as if we had written:
class ModelCreator
extend Forwardable
attr_reader :args
def model_name(*args, &block)
args.model_name(*args, &block)
end
def initialize(args)
@args = args
end
end
As you can see, `def_delegator` will not only forward the method call
onto the delegate object, it will also forward any arguments provided as
well. It is here that the bug arises: it splats all of the arguments
into a variable which is called `args`, and because of how variable
scope works in Ruby, it then attempts to call `model_name` on *this*
variable and *not* our delegate object method.
The fix is to call the delegate object method manually using `__send__`.
(This assumes, of course, that the given receiver is, in fact, the name
of a method and not the name of an instance variable, which is also a
possibility.) We use `__send__` because the delegate object method could
be private.
So, that looks like this:
def model_name(*args, &block)
__send__(:args).model_name(*args, &block)
end
Because `def_delegators` and `delegate` use `def_delegator` internally,
they also get this fix as well.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53381 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c (rb_class_inherited_p): search the corresponding
ancestor to prepended module from prepending class itself.
[ruby-core:72493] [Bug #11878]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53380 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test/stringio/test_io.rb (test_flag): add assertion for error when
text and binary mode are mixed.
[ruby-dev:49465] [Feature #11921]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This fixes an occasional [ASYNC BUG] failure in
bootstraptest/test_fork.rb '[ruby-dev:37934]'
which tests fork/pthread_create failure by setting
RLIMIT_NPROC to 1 and triggering EAGAIN on pthread_create
when attempting to recreate the timer thread.
The problem timeline is as follows:
thread 1 thread 2
---------------------------------------------------------------
rb_thread_create_timer_thread
setup_communication_pipe
rb_thread_wakeup_timer_thread_low
pthread_create fails pipe looks valid, write!
CLOSE_INVALIDATE (x4) EBADF -> ASYNC BUG
The checks in rb_thread_wakeup_timer_thread_low only tried to
guarantee proper ordering with native_stop_timer_thread, not
rb_thread_create_timer_thread :x
Now, this should allow rb_thread_create_timer_thread to
synchronize properly with rb_thread_wakeup_timer_thread_low by
delaying the validation marking of the timer_thread_pipe until
we are certain the timer thread is alive.
In this version, rb_thread_wakeup_timer_thread_low becomes a
noop. Threading is still completely broken with NPROC==1, but
there's not much we can do about it beside warn the user.
We no longer spew a scary [ASYNC BUG] message or dump core
on them.
* thread_pthread.c (setup_communication_pipe): delay setting owner
(rb_thread_create_timer_thread): until thread creation succeeds
[ruby-core:72590] [Bug #11922]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ruby.c (proc_options): -W command line option should be able to
override -w in RUBYOPT environment variable.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* eval.c (ignored_block): warn if a block is given to `using`,
which is probably for `Module.new`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53368 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/ostruct.rb (OpenStruct): make respond_to? working on
just-allocated objects for workaround of Psych.
[ruby-core:72501] [Bug #11884]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53366 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Add assertion to examine the existence of HAVE_RUBY_INIT.
* test/mkmf/test_have_func.rb (test_not_have_func):
Add assertion to examine the absence of HAVE_RUBY_INIT.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53365 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
We do not want to waste space by exposing globals to other
objects.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Sometimes a sleepy developer will want to swap read_nonblock
for readpartial forget to remove "exception: false"
* io.c (io_getpartial): remove unused kwarg from template
* test/ruby/test_io.rb (test_readpartial_bad_args): new
[Bug #11885]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test/ruby/test_string.rb (test_rstrip, test_lstrip): Add tests
for String#lstrip and rstrip. The test cases are used from
string.c ruby-doc comments. [Fix GH-1174]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53328 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test/ruby/test_string.rb (test_insert): The test cases are
written in string.c comments as a reference. [Fix GH-1173]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* enc/depend (enc, trans): fix version dependency, shared object
files depend on the RUBY_SO_NAME value for runtime link.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in, version.h (RUBY_PROGRAM_VERSION): extract version
numbers from API version in include/ruby/version.h except for
TEENY, to save matz job next year.
* win32/setup.mak (-version-): use program version.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
supported on IO.popen
* tool/vcs.rb (IO.popen): Fix NoMethodError. I guess r49705 was not
tested... :/
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/io/console/extconf.rb: fix gem build failure on Windows.
only win32_vk.inc is included in the gem and no dependencies for
the header, so that gperf will not be mandatory.
[ruby-core:72453] [Bug #11866]
* ext/io/console/io-console.gemspec: include depend file and
win32_vk header.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* io.c (rb_readwrite_syserr_fail): works with the given errno than
thread local errno.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* file.c, io.c, util.c: prefer rb_syserr_fail with saved errno
over setting errno then call rb_sys_fail, not to be clobbered
potentially and to reduce thread local errno accesses.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
argument of `String#split` is not `$;` but `nil`.
When `nil` is passed as first argument, `$;` is used.
[ci skip] [Bug #11729] [ruby-dev:49378]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
I'm not sure how fstat on fd=-1 can succeed on some systems...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in (__STDC_WANT_LIB_EXT1__): necessary to use memset_s
in strict C99 mode.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53252 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* regexec.c (match_at): move direct threaded VM code to get rid of
mixed declarations and code, and enable it only for gcc since it
depends on a gcc extension.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53251 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* doc/contributing.rdoc: [DOC] remove an extra word "here".
[Fix GH-1169]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* regexec.c (USE_DIRECT_THREADED_VM): enable direct threaded VM by
the default.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53248 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c (internal_object_p): should not expose singleton classes
without a metaclass. based on patches by ko1 and shugo.
[Bug #11740]
* class.c (rb_singleton_class_object_p): added.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53243 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
functions) to the latter location.
This moving recovers performance a little.
[Bug #11829]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53236 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* string.c (str_compat_and_valid): as scrub does nothing for dummy
encoding string now, incompatible encoding is not a matter.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53235 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/cgi/escape/escape.c (preserve_original_state): Preserve
original state for tainted and frozen. [Fix GH-1166]
[ruby-dev:49451] [Bug #11855]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53233 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
to avoid name conflict with /usr/include/floatingpoint.h on
Solaris. [Bug #11853] [ruby-dev:49448]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53230 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
We should try with Ruby 2.4 or 3.0.
[Bug #11842][ruby-core:72374]
* lib/rdoc/erb_partial.rb: ditto.
* template/verconf.h.tmpl: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53216 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* proc.c (rb_proc_get_iseq): proc made from symbol does not have
iseq. fix infinite loop. [ruby-core:72381] [Bug #11845]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53206 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
use WEBrick::Utils::TimeoutHandler::Thread, which is ignored by
LeakChecker#find_threads, instead of ::Thread to get rid of
thread leak checker. since this TimeoutHandler is resident
during tests because of Singleton, it waits for the next timeout
if it has any schedules. in the case of nested timeouts, inner
timeout does not cancel outer timeouts and then those schedules
still remain.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
from ISO-8859-2 to fix 0x80..0x9e range (from Kimihito Matsui)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
potential deadlocks, Queue is used to tell update of @timeout_info
instead of sleep and wakeup. [Bug #11742] [ruby-dev:49387]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/stringio/stringio.c (strio_set_encoding): add StringIO's own
encoding and separate it from the buffer string to override the
encoding of string when reading. [ruby-core:72189] [Bug #11827]
note that setting the encoding of its buffer string may cause
unpredictable behavior.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/stringio/stringio.c (strio_unget_bytes): extract from
strio_ungetbyte to share with strio_ungetc.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53185 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/stringio/stringio.c (strio_ungetbyte): pad with \000 when
the current position is after the end.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53181 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
should check whether a newly created method override a optimize
method in case the method is defined in a prepended module of a
built-in class.
[ruby-core:72226] [Bug #11836]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
class instead of the origin iclass.
[ruby-core:72188] [Bug #11826]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53173 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* string.c (rb_str_scrub): the result should be infected by the
original string.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53169 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* transcode.c (rb_econv_substr_append, econv_primitive_convert):
the result should be infected by the original string.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
with keyword arguments for VM_METHOD_TYPE_ATTRSET type methods.
Normally, we can not use keyword arguments for this kind of methods,
(obj.foo = 1), but we can set alias names for them.
[Bug #11657]
* test/ruby/test_keyword.rb: add a test for this fix.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53164 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Patch provided by tenderlove and nobu.
* test/fiddle/test_handle.rb (class TestHandle): add test for above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53153 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
[Bug #11750]
* vm.c (vm_make_proc_from_block): should return a Proc object
if block is given. Previous implementation returns
a Proc object only when corresponding Proc object is not
available.
* vm.c (vm_make_env_each): ditto.
* test/ruby/test_proc.rb: add a test for this bug.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
TimeoutMutex only when accessing @timeout_info for avoiding
potential deadlock. [Bug #11742] [ruby-dev:49387]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53134 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
TimeoutMutex should be acquired when accessing @timeout_info.
To avoid deadlock, interrupt() calls are delayed.
Due to the mutex, it is safe to treat ary without ary.dup.
[Bug #11742] [ruby-dev:49387]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Suppress "syntax error: empty declaration" warnings by
Oracle Solaris Studio 12.x on Solaris. [Bug #11821]
* hash.c: ditto, after NOINSERT_UPDATE_CALLBACK().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53129 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
test/ruby/test_transcode.rb: Fixed encoding name
to the correct one in the IANA registry (IBM037)
and added an alias (ebcdic-cp-us)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* enc/trans/ebcdic.trans: transcodings between EBCDIC-US
and iso-8859-1 [with code from Andrea Ribuoli]
* test/ruby/test_transcode.rb: tests for above
* tool/transcode_tablegen.rb: additional argument for
method transcode_tblgen
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53112 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y (trace_lex_state): trace lex_state changes if yydebug is
set, and send the messages to rb_stdout.
* parse.y (rb_parser_printf): store YYPRINTF messages per lines
so that lex_state traces do not mix.
* tool/ytab.sed: add parser argument to yy_stack_print too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y (build_lex_state_name, trace_lex_state): lex_state is
now bit flags and can be set 2 bits or more.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53094 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Add new names to follow r51617; Indices ffs(2) returns are 1-origin.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/fiddle/function.c (initialize): check all arguments first.
reported by Marcin 'Icewall' Noga of Cisco Talos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53082 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/fiddle/conversions.h (PTR2NUM): use signed integer to make
Fixnum for negative values.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* pack.c (pack_pack): always check index range against the
receiver array length, which can be shortened by elements
conversion. reported by Marcin 'Icewall' Noga of Cisco Talos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53080 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/tk/tkutil/tkutil.c (tk_hash_kv): check types of array
argument. reported by Marcin 'Icewall' Noga of Cisco Talos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/tk/tkutil/tkutil.c (cbsubst_table_setup): check length of
argument arrays for each access, as callback methods can modify
them. reported by Marcin 'Icewall' Noga of Cisco Talos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/tk/tkutil/tkutil.c (cbsubst_table_setup): check types of
argument elements. reported by Marcin 'Icewall' Noga of Cisco
Talos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53075 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/win32ole/win32ole.c (ole_vstr2wc): check argument type, vstr
must be a String here. reported by Marcin 'Icewall' Noga of
Cisco Talos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in (BOOTSTRAPRUBY): make BASERUBY full path before
building ruby to get rid of unexpectedly invoking built ruby.
[ruby-core:72065] [Bug #11807]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53073 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
protocol list.
The protocol list from OpenSSL is not null-terminated.
patched by Kazuki Yamaguchi [Bug #11810] [ruby-core:72082]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* object.c (rb_obj_dig): raise TypeError if an element does not
have #dig method. [ruby-core:71798] [Bug #11762]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
As it is just a hint the kernel is free to ignore,
IO#advise already succeeds when posix_fadvise is not
available build time at all. Following that, if posix_fadvise
was available at build time but not implemented in the running
kernel, we should also ignore it.
* io.c (do_io_advise): do not raise on ENOSYS
* test/ruby/test_io.rb (test_advise): do not skip on Errno::ENOSYS
(test_advise_pipe): ditto
[ruby-core:72066] [Feature #11806]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* enc/windows_1252.c: separate from ISO-8859-1 to fix 0x80..0x9e
range. [ruby-core:64049] [Bug #10097]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
See https://github.com/tric/trick2015 for the contest outline.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53041 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Infinity cannot be written as an optimizable literal,
so it can never match a key in a CDHASH.
Avoid converting it to prevent FloatDomainError.
* insns.def (opt_case_dispatch): avoid converting Infinity
* test/ruby/test_optimization.rb (test_opt_case_dispatch_inf): new
[ruby-dev:49423] [Bug #11804]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53039 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
The OR-ing itself is bad for a hash function, and shifting 3 bits
left was not enough to undo the damage done by shifting
(RUBY_SPECIAL_SHIFT+3) bits right. Experimentally, shifting 16-17
bits seemed to work well in preparing the number for murmur hash.
Add a few more benchmarks to based on bm_hash_shift to ensure
we don't hurt performance too much with tweaks.
I'm pretty confident about this change and commiting it now;
especially since we're still using Murmur behind it (but perhaps
we can update to a newer hash from Murmur...)
[ruby-core:72028] [Feature #11405]
target 0: a (ruby 2.3.0dev (2015-12-11 trunk 53027) [x86_64-linux]) at "/home/ew/rrrr/b/ruby"
target 1: b (ruby 2.3.0dev (2015-12-11 master 53027) [x86_64-linux]) at "/home/ew/ruby/b/ruby"
benchmark results:
minimum results in each 5 measurements.
Execution time (sec)
name a b
hash_aref_dsym 0.279 0.276
hash_aref_dsym_long 4.951 4.936
hash_aref_fix 0.281 0.283
hash_aref_flo 0.060 0.060
hash_aref_miss 0.409 0.410
hash_aref_str 0.387 0.385
hash_aref_sym 0.275 0.270
hash_aref_sym_long 0.410 0.411
hash_flatten 0.252 0.237
hash_ident_flo 0.035 0.032
hash_ident_num 0.254 0.251
hash_ident_obj 0.252 0.256
hash_ident_str 0.250 0.252
hash_ident_sym 0.259 0.270
hash_keys 0.267 0.267
hash_shift 0.016 0.015
hash_shift_u16 0.074 0.072
hash_shift_u24 0.071 0.071
hash_shift_u32 0.073 0.072
hash_to_proc 0.008 0.008
hash_values 0.263 0.264
Speedup ratio: compare with the result of `a' (greater is better)
name b
hash_aref_dsym 1.009
hash_aref_dsym_long 1.003
hash_aref_fix 0.993
hash_aref_flo 1.001
hash_aref_miss 0.996
hash_aref_str 1.006
hash_aref_sym 1.017
hash_aref_sym_long 0.998
hash_flatten 1.061
hash_ident_flo 1.072
hash_ident_num 1.012
hash_ident_obj 0.987
hash_ident_str 0.993
hash_ident_sym 0.959
hash_keys 0.997
hash_shift 1.036
hash_shift_u16 1.039
hash_shift_u24 1.001
hash_shift_u32 1.017
hash_to_proc 1.001
hash_values 0.995
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
instead of raising Encoding::CompatibilityError. [Feature #11801]
* string.c (rb_str_escape): added to dump given string like
rb_str_inspect without quotes and always dump in US-ASCII
like rb_str_dump.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53027 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
There is no need to dup the fstring unless we want to set the
debug ivar for it.
[ruby-core:72018] <5668DB6E.8000101@ruby-lang.org>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/mkconfig.rb: rbconfig must not be fronzen-string-literal to
expand CONFIG hash. [ruby-core:72006] [Bug #11798]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
We do not need to maintain empty functions for GC,
gc_mark_children will not attempt to dereference NULL
dmark callbacks.
* ext/socket/ifaddr.c (ifaddr_mark): remove empty function
(ifaddr_type): pass zero to rb_data_type_t.function.dmark
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53016 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
bm_free no longer has special handling of unlinked method
entries since r50728 when method entries were made VALUEs
for GC safety.
* proc.c (bm_free): remove, use default free
(method_data_type): use RUBY_TYPED_DEFAULT_FREE
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
without --debug or --debug=frozen-string-literal option
because String#dup slows down with debug information.
[Feature #11725]
* NEWS: apply about it.
* test/ruby/test_rubyoptions.rb: catch up this fix with refactoring.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53009 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* regparse.h (SET_NTYPE): get rid of breaking strict aliasing.
patch by Zarko Todorovski in [ruby-core:71953]. [Bug #11790]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52999 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
expression should be public.
[Bug #11754]
* test/ruby/test_method.rb: add a test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e