ruby/tool
tenderlove 8952964976 Add direct marking on iseq operands
Directly marking iseq operands allows us to eliminate the "mark array"
stored on ISEQ objects, which will reduce the amount of memory ISEQ
objects consume.  This patch changes the iseq mark function to:

* Directly marks ISEQ operands
* Iterate over and mark child ISEQs

It also introduces two flags on the ISEQ object.  In order to mark
instruction operands, we have to disassemble the instructions and find
the instruction parameters and types.  Instructions may also be
translated to jump addresses.  Instruction sequences may get marked by
the GC *while* they're mid flight (being compiled).  The
`ISEQ_TRANSLATED` flag is used to indicate whether or not the
instructions have been translated to jump addresses so that when we
decode the instructions we know whether or not we need to go from jump
location back to original instruction or not.

Not all ISEQ objects have any markable objects embedded in their
instructions.  We can detect whether or not an ISEQ has markable objects
in the instructions at compile time.  If the instructions contain
markable objects, we set a flag `ISEQ_MARKABLE_ISEQ` on the ISEQ object.
This means that during the mark phase, we can skip decompilation if the
flag is *not* set.  In other words, we can avoid decompilation of we
know in advance there is nothing to mark.

`once` instructions have an operand that contains the result of a
one-time compilation of a regex.  Before this patch, that operand was
called an "inline cache", even though the struct was actually an "inline
storage".  This patch changes the operand to be an "inline storage" so
that we can differentiate between caches that need marking (the inline
storage) and caches that don't need marking (inline cache).

[ruby-core:84909]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-09 20:11:45 +00:00
..
m4 tool/m4/ruby_replace_type.m4: use AC_CHECK_TYPES for HAVE_* macros 2018-02-20 08:44:38 +00:00
ruby_vm Add direct marking on iseq operands 2018-03-09 20:11:45 +00:00
test * enc/trans/EMOJI/*.src, enc/trans/emoji*, enc/x-emoji.c, test/ruby/enc/test_emoji.rb, tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb, tool/jisx0208.rb, tool/test/test_jisx0208.rb: new encodings to support emoji charsets, which are used by Japanese mobile phones [ruby-dev:40528]. Thanks Yoji Shidara for a lot of contribution. 2010-03-09 09:15:42 +00:00
asm_parse.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
bisect.sh tool/bisect.sh: extracted build part [ci skip] 2018-03-01 03:26:05 +00:00
build-transcode * enc/trans/iso2022.trans: renamed from iso2022.erb.c. 2008-08-11 07:39:52 +00:00
change_maker.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
checksum.rb checksum.rb: check the target 2015-05-07 07:09:43 +00:00
colorize.rb distinguish pass and fail by highlight [ci skip] 2017-10-14 02:17:07 +00:00
downloader.rb tool/downloader.rb: retry SocketError 2018-02-05 13:24:00 +00:00
enc-emoji-citrus-gen.rb * enc/trans/EMOJI/*.src, enc/trans/emoji*, enc/x-emoji.c, test/ruby/enc/test_emoji.rb, tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb, tool/jisx0208.rb, tool/test/test_jisx0208.rb: new encodings to support emoji charsets, which are used by Japanese mobile phones [ruby-dev:40528]. Thanks Yoji Shidara for a lot of contribution. 2010-03-09 09:15:42 +00:00
enc-emoji4unicode.rb * enc/trans/EMOJI/*.src, enc/trans/emoji*, enc/x-emoji.c, test/ruby/enc/test_emoji.rb, tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb, tool/jisx0208.rb, tool/test/test_jisx0208.rb: new encodings to support emoji charsets, which are used by Japanese mobile phones [ruby-dev:40528]. Thanks Yoji Shidara for a lot of contribution. 2010-03-09 09:15:42 +00:00
enc-unicode.rb support gperf 3.1 2017-12-08 05:51:19 +00:00
eval.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
expand-config.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
extlibs.rb downloader cache 2017-05-21 16:45:35 +00:00
fake.rb fake.rb: set libdir 2017-12-27 01:26:22 +00:00
fetch-bundled_gems.rb test-bundled-gems-fetch 2017-10-25 23:35:46 +00:00
file2lastrev.rb file2lastrev.rb: suppress_not_found 2017-12-06 11:18:53 +00:00
gem-unpack.rb * tool/downloader.rb: Removed verification of gem certification. 2016-10-12 06:24:59 +00:00
gen_dummy_probes.rb probes.dmyh: remove preprocessor directives 2016-07-06 05:03:14 +00:00
gen_ruby_tapset.rb get rid of ambiguous parentheses warnings 2016-11-29 16:06:54 +00:00
generate-backport-changelog.rb Missed `#` in usage 2017-08-09 08:17:52 +00:00
generic_erb.rb Refactor ERB version checking for keyword arguments 2018-02-27 11:12:23 +00:00
git-refresh git-refresh: fix for Solaris 2017-04-30 10:53:42 +00:00
gperf.sed gperf.sed: static declarations 2017-12-15 14:42:43 +00:00
id2token.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
ifchange ifchange: --debug option 2018-02-08 02:08:27 +00:00
insns2vm.rb insns2vm.rb: make #generate_parser private 2018-01-27 02:14:20 +00:00
install-sh configure.ac 2017-09-29 13:21:17 +00:00
jisx0208.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
make-snapshot Prefer to use %x instead of backtick. 2018-02-28 11:12:36 +00:00
make_hgraph.rb * tool/make_hgraph.rb: added. 2015-05-29 08:39:50 +00:00
mdoc2man.rb Add support for the `Lk` macro to tool/mdoc2man.rb 2016-09-23 12:40:16 +00:00
merger.rb aliases 2017-12-16 01:56:14 +00:00
mk_call_iseq_optimized.rb mk_call_iseq_optimized.rb: add mode string [ci skip] 2017-11-09 23:02:52 +00:00
mkconfig.rb mkconfig.rb: hide MJIT configurations 2018-02-08 15:19:01 +00:00
mkrunnable.rb rename ruby-runner as bin/ruby 2017-09-15 17:42:00 +00:00
node_name.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
parse.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
prereq.status extract prereq.status 2017-05-07 13:06:34 +00:00
probes_to_wiki.rb probes_to_wiki.rb: fix comment and reduce unnecessary array 2013-07-11 01:46:40 +00:00
rbinstall.rb tool/rbinstall.rb: allow owner to have write permissions 2018-01-05 09:41:21 +00:00
rbuninstall.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
redmine-backporter.rb * tool/redmine-backporter.rb (show): just report and ignore if a feature ticket 2017-07-07 02:14:57 +00:00
release.sh * tool/release.sh: BRE accepts \{m,\} expression. use it for future many-digits 2016-04-01 03:27:17 +00:00
rmdirs tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
run-gcov.rb tool/run-gcov.rb: ignore rubyspec_temp directory 2017-07-04 16:02:18 +00:00
run-lcov.rb Revamp method coverage to support define_method 2017-12-05 07:16:42 +00:00
runruby.rb tool/runruby.rb: fix RUNRUBY_USE_GDB case 2017-11-07 11:21:09 +00:00
strip-rdoc.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
sync_default_gems.rb Postponing the Bundler merge. 2017-12-22 23:08:05 +00:00
test-coverage.rb ext/coverage/coverage.c: remove COVERAGE_EXPERIMENTAL_MODE 2017-12-12 00:20:58 +00:00
transcode-tblgen.rb Refactor ERB version checking for keyword arguments 2018-02-27 11:12:23 +00:00
transform_mjit_header.rb transform_mjit_header.rb: inline ivar operations 2018-03-07 14:35:28 +00:00
update-deps mjit_compile.c: merge initial JIT compiler 2018-02-04 11:22:28 +00:00
vcs.rb vcs.rb: .git at export 2018-02-26 06:00:08 +00:00
vpath.rb prelude.c.tmpl: strip prefix 2014-11-19 01:08:00 +00:00
vtlh.rb tool: add descriptions and fix typos 2016-07-02 21:01:04 +00:00
ytab.sed more ytab.sed fixes 2018-01-15 02:39:32 +00:00