* tool/mdoc2man.rb (parse_macro): colon should not pop quotes.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52411 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/generic_erb.rb, tool/ifchange: no colorization if tput
returned nothing or dump terminal.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52395 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
vm_call_iseq_setup_normal_0start() is simple, however it has
some loops/conditions depends on ISeq::param.size and
ISeq::local_size (in vm_push_frame(), inlined into this function).
There are many simple methods which has a few parameters and local
variables. So that this patch introduces several special functions
generated in vm_call_iseq_optimized.inc by
tool/mk_call_iseq_optimized.rb.
This script makes
vm_call_iseq_setup_normal_0start_Xparams_Ylocals()
where X is 0 to 3 and Y is 1 to 6 (as current setting).
In this case, X * Y = 24 functions are created.
These functions creates fast method dispatch by inlining
vm_push_frame() with immediate params/locals sizes.
On my laptop, we can have the following results.
vm2_method* 1.083 (8.3% faster)
vm2_poly_method* 0.961 (3.4% slower)
It shows 8.3% faster for inner loop method dispatch (hit inline
cache), but 3.4% slower when inline cache miss because we need
to find a suitable call handler.
* common.mk: add a rule for vm_call_iseq_optimized.inc.
* tool/mk_call_iseq_optimized.rb: added.
* vm.c: include vm_call_iseq_optimized.inc.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52254 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/generic_erb.rb: use VT100 sequence if tput does not work.
* tool/ifchange: ditto and add --color option.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52220 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/ifchange: do not exit by -e even if tput failed.
[ruby-core:71143] [Bug #11611]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52219 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/generic_erb.rb: ignore error that tput is not found.
[ruby-core:71143] [Bug #11611]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52215 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/runruby.rb: use ruby-runner only when exists and fallback
to ruby itself.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52013 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/ruby-runner.c.in: wrapper to set dynamic loading path
environment variable. /bin/sh on Mac OS X 10.11 (El Capitan)
clears DYLD_LIBRARY_PATH.
it must:
- do nothing even if current directory is not present
- do not set other environment variables, e.g. PWD, SHLVL, etc
- do not open other FDs, e.g. pipes for timer thread
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rb_call_info (ci) has compiled fixed information.
* if ci->flag & VM_CALL_KWARG, then rb_call_info is
also rb_call_info_with_kwarg. This technique reduce one word
for major rb_call_info data.
* rb_calling_info has temporary data (argc, blockptr, recv).
for each method dispatch. This data is allocated only on
machine stack.
* rb_call_cache is for inline method cache.
Before this patch, only rb_call_info_t data is passed.
After this patch, above three structs are passed.
This patch improves:
* data locarity (rb_call_info is now read-only data).
* reduce memory consumption (rb_call_info_with_kwarg,
rb_calling_info).
* compile.c: use above data.
* insns.def: ditto.
* iseq.c: ditto.
* vm_args.c: ditto.
* vm_eval.c: ditto.
* vm_insnhelper.c: ditto.
* vm_insnhelper.h: ditto.
* iseq.h: add iseq_compile_data::ci_index and
iseq_compile_data::ci_kw_indx.
* tool/instruction.rb: introduce TS_CALLCACHE operand type.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51903 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/extlibs.rb (do_patch): let "patch" command change the
working directory and open the patch file there, instead of
spawn options, so that proper error message will be shown by the
command not just "chdir" or "open".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/fake.rb: builddir should be "." if it is the current
working directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51765 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/fake.rb: get rid of use of uninitialized global variable.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/runruby.rb: rubyspec now requires other FDs not to be
closed since 7b6ce1fee.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
instead of replacing the check to `true`, for getting rid of a
warning `possibly useless use of true in void context`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (update-man-date): update last date in man pages.
* tool/vcs.rb (VCS#modified): returns last modified time.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/io/console/depend: check if VK table is modified by the
checksum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50434 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb: suppress post install messages of rdoc for
older ruby versions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (gem): share same options between normal
installer and unpacked installer.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk, tool/mkconfig.rb: check the running ruby version in
rbconfig.rb with the program version, as RUBY_VERSION has never
been affected by --with-ruby-version option.
[ruby-core:68639] [Bug #11002]
* configure.in (LIBRUBY_DLDFLAGS): compatibility_version must be
valid version numbers, not an arbitrary string.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/mkconfig.rb (RbConfig): embed substring of the version, not
at the runtime, and fall back to the version itself for the case
it does not include the teeny version.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50094 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): override variables which are not
substituted by the command line.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): override RUBY_VERSION to proceed
with different version ruby.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): substitute configuration variables
in Makefile.in instead of passing by the command line, and make
temporary Makefile instead of a pipe.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): set @ruby_version@ and
BOOTSTRAPRUBY.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (ruby_pc): without fake.rb.
* tool/expand-config.rb: no longer depends on fake.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/mkconfig.rb: use arguments instead of built-in constants
to work without fake.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/runruby.rb: use File::PATH_SEPARATOR as
DYLD_INSERT_LIBRARIES is colon-separated list.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49762 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in (PRELOADENV): platform specific environment to
pre-load the given shared libraries.
* tool/runruby.rb: use config['PRELOADENV'] instead of hardcoded
LD_PRELOAD.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (test-rubyspec): use fake script to set header
directories.
* template/fake.rb.in (RUBYOPT): set -r option to propagate to
forked processes.
* tool/fake.rb (prehook): set rubyarchhdrdir too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/runruby.rb: follow the change of RUBY_VERSION check in
rbconfig by r49740.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49747 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (IO.popen): support :chdir option.
* tool/vcs.rb (VCS::GIT.get_revisions): use :chdir option instead
of -C option which is not supported by older git.
[ruby-dev:48880] [Bug #10890]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49705 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* version.c (ruby_show_version): show last commit title, if
different than the trunk.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49638 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (bin-comm): drop batch file installation.
Windows 95 support has not been supported already.
[Feature #10806]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (bin-comm): no CR at EOF in batch files.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49456 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (PROLOG_SCRIPT): use the given symlinked
directory name.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (PROLOG_SCRIPT): ":" in "Use Alternate Value"
parameter expansion is not a path separator, but a literal colon.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49436 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS::GIT.get_revisions): omit "." to include svn
property only commits.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
of single quotes because cmd.exe doesn't handle them.
* tool/redmine-backporter.rb (done): the 2nd element of matched data
is the offset of the end of matched string, not length.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): keep VCS management files until
prerequisites build, so that revision.h can be made by make.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49357 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS.local_path?): predicate that the argument is a
local path.
* tool/vcs.rb (VCS::SVN.search_root): extract a method to search
working root directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49355 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/redmine-backporter.rb: remove garbage lines, and should not
override Kernel#readline.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49353 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/redmine-backporter.rb (readline): get rid of wrapping at
the right edge on Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49349 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/redmine-backporter.rb (readline): make binmode so that
single enter works on Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49346 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Windows because IO.console.getch is not always do as expected.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/redmine-backporter.rb (mygets): newline to finish, fix DEL
code, erase the last character at DEL/BS, and use \C escapes.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49343 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS::SVN#export): workaround for the case
wcroot-abspath is not present.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS::SVN#export): export without access to the
remote server.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/file2lastrev.rb (revision_h): do not truncate and ellipsis
names shorter than the limit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/file2lastrev.rb (revision_h): limit branch names upto 16
chars, and replace extra part with ".." not to exceed the limit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (get_revisions): branch names must not be empty.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49304 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/file2lastrev.rb, tool/vcs.rb (get_revisions): define
RUBY_BRANCH_NAME from the current branch name.
* version.h (RUBY_REVISION_STR): include the current branch name
not "trunk" always.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): clear RUBY_PLATFORM of the
building platform to suppress warnings in rbconfig.rb at
universal-darwin.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS::GIT#branch): make fake string for branch names
to suppress expanding as a path.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot: commands stored in environment variables may
contain options, so check only the first word.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb: try to load zlib before using Gem::Installer,
not to let LoadError raise during autoloading.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (extract-gems): extract gem files to install them even
if zlib is not available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (gem): install gems from unpacked directories
for platforms where zlib is not available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (RbInstall::Specs::FileCollector#built_libraries):
use configured value DLEXT instead of hardcoded suffix. shared
object suffix is system dependent.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): add fake values, rubylibprefix and
ruby_version which are necessary for Gem.default_dir.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49258 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/rbinstall.rb (gem): reuse options hash, which is invariant
for all gems.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49233 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rbinstall.rb: fix target location for installing bundled gems.
install to the prepared directory instead of default Gem.dir,
not to be affected GEM_HOME environment variable. [Fix GH-798]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/downloader.rb: now can download gems by http if openssl is not
available (this may be danger!)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/downloader.rb (Downloader.download): fix the exception to
re-raise. initialize methods of subclasses of Exception may
have different parameters. [ruby-core:67086] [Bug #10639]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48963 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): VCS#branch_list expects glob a
pattern string but not a regexp. based on the patch by Vit
Ondruch. in [ruby-core:67064]. [Bug #10636]
* tool/vcs.rb (VCS::SVN#branch_list): strip newlines.
* tool/vcs.rb (VCS::GIT.get_revisions): retrieve modified time
from toplevel log too.
* tool/vcs.rb (VCS::GIT#branch_list): yield for each lines.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48946 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
ssl_ca_certs.
* tool/downloader.rb: use certs of rubygems for downloading gems.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/extlibs.rb (do_extract): separate expansion and extraction
processes to each commands.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot: use srcdir as checked out working directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS#get_revisions, VCS::SVN.get_revisions): allow
path to be other than a string.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48839 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (VCS#get_revisions): add srcdir optional parameter
to SVN.get_revisions and GIT.get_revisions, instead of change
working directory.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/vcs.rb (get_revisions): use Time.new instead of Time.mktime
which does not accept UTC offset, and offset manually for older
versions than 1.9.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (update-gems): use ims=nil option.
* tool/downloader.rb (Downloader.download): show the message if no
need to download in verbose mode.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
version is already downloaded. A gem file is versioned and
it must be identical if the version is the same.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48494 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/prelude.c.tmpl (Prelude#translate): strip VPATH prefix
from prelude names, so that srcdir diffrences do not make the
generated code diffrent.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
I spent several minutes wondering why -save-temps=obj was
not taking effect, hopefully this saves somebody else the
trouble.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): no wait when using already
exported source without modification, assuming exported 2
seconds (the lowest timestamp resolution) ago or more.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/prelude.c.tmpl: move from tool/compile_prelude.rb and
expand by generic_erb.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot: set HAVE_BASERUBY to download Unicode data
files.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk: download Unicode files into separate directory for the
version.
* tool/downloader.rb (Downloader::Unicode.download): strip version
directory.
* tool/downloader.rb (Downloader.download): strip directory name
if download directory is given.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48196 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/unicode_norm_gen.tmpl: use generic_erb.rb to update if
changed and manage timestamp, so that source tree on read-only
filesystem works.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48129 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* tool/make-snapshot (package): call system and IO.popen with
arguments array, add macros NULLCMD and RUNRUBY to update gems,
and not subsitute string interpolations which are used in
update-gems.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48122 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
double quote ('\\\&' -> "\\\\\\\&"; double quoted string
is needed to make \& mean last match; double double
backslashes are needed because of two layers of escaping).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48089 b2dd03c8-39d4-4d8f-98ff-823fe69b080e