This re-introduces r60485.
This reverts commit 5a176b75b1.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
NODEs in AST are no longer objects managed by GC. This change will
remove the restriction imposed by the GC. For example, a NODE can use
more than five words (this is my primary purpose; we want to store the
position data for each NODE, for coverage library), or even a NODE can
have variable length (some kinds of NODEs have unused fields).
To do this, however, we need more work, since Ripper still uses T_NODE
objects managed by the GC.
The life time of NODEs is more obvious than other kinds of objects; they
are created at parsing, and they become disused immediately after
compilation. This change releases all NODEs by a few `xfree`s after
compilation, so performance will be improved a bit. In extreme example,
`eval("x=1;" * 10000000)` runs much faster (40 sec. -> 7.8 sec. on my
machine).
The most important part of this change is `ast_t` struct, which has
three contents: (1) NODE buffer (malloc'ed memory), (2) a reference to
the root NODE, and (3) an array that contains objects that must be
marked during parsing (such as literal objects). Some functions that
had received `NODE*` arguments, must now receive `ast_t*`.
* node.c, node.h: defines `ast_t` struct and related operations.
* gc.c, internal.h: defines `imemo_ast`.
* parse.y: makes `parser_params` struct have a reference to `ast_t`.
Instead of `rb_node_newnode`, use `rb_ast_newnode` to create a NODE.
* iseq.c, load.c, ruby.c, template/prelude.c.tmpl: modifies some
functions to handle `ast_t*` instead of `NODE*`.
* test/ruby/test_gc.rb: ad-hoc fix for a failed test. The test assumes
GC eden is increased at startup by NODE object creation. However,
this change now create no NODE object, so GC eden is not necessarily
increased.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac (LIBRUBY_SO): get rid of referrence to
LIBRUBY_SONAME which is not present in ruby.pc.
* template/ruby.pc.in (RUBY_API_VERSION, SOEXT): add new
variables. [ruby-core:83208] [Bug #14002]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/verconf.h.tmpl: disable site and vendor directories
when removed. based on the path by arnoldwald (arnold w) at
[ruby-core:81563]. [Bug #13631]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/sizes.c.tmpl (Init_limits): turned a K&R style
declaration into a prototype declaration.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60065 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ruby-runner.c (insert_env_path): extracted the function which
insert path list to an environment variable.
* ruby-runner.c (main): append library paths to RUBYLIB.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60006 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/insns.inc.tmpl (ASSERT_VM_INSTRUCTION_SIZE): static
assertion for VM instruction info tables.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/exts.mk.tmpl: get rid of making multiple rubies
simultaneously. it can cause making libruby in parallel.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58711 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/extmk.rb: split notes into header and footer, which are
common, from bodies which are unique for each extensions.
* template/exts.mk.tmpl: now each notes are not one line, should
not unique.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58425 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (build-ext): separate note from building extensions,
not to be intermingled. [ruby-core:80759] [Feature #13302]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58414 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/extmk.rb: fail if a mandatory extension library failed to
configure. [ruby-core:80759] [Feature #13302]
* template/exts.mk.tmpl: move `exit` at the end.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/limits.c.tmpl (Init_limits): rename RbConfig::Limits as
RbConfig::LIMITS, constants other than class or module are all
uppercase with underscores by convention.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/exts.mk.tmpl: place note footer message at the end.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58226 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/configure-ext.mk.tmpl (EXTMK_ARGS): add MINIRUBY for
cross-compling, which is used in extmk.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57764 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y (TOKEN2ID): add macro which maps static tokens to IDs.
* template/id.h.tmpl (TOKEN2*ID, DEFINE_*ID_FROM_TOKEN): separate
into macros, token to ID mapping and enum definitions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57598 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (mflags): pass make flags to sub-makes, for nmake
which cannot pass them by the environment variable.
* defs/gmake.mk (mflags): filter out -j option for sub-makes.
* template/exts.mk.tmpl (MFLAGS): extract MFLAGS from sub extmk
files for nmake.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
It is unnecessary to pass MFLAGS to sub-makes, because it is
evaluated implicitly if set by make. GNU make 4.2 sets both of
-jN and --jobserver-auth (or --jobserver-fds in older versions)
options which conflict. And it is useless for command line macros
since Microsoft NMAKE does not set them.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57489 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/limits.c.tmpl (ULLONG_MAX): add a fallback definition.
On old CentOS lacks ULLONG_MAX.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Because our tests now have several places where FIXNUM_MAX is needed,
we decided to provide it along with several other constants.
* template/limits.c.tmpl: new file, defining RbConfig::Limits
* ext/rbconfig/sizeof/depend (limits.c): rule to generate limits.c
* test/-ext-/num2int/test_num2int.rb: use RbConfig::Limits
* bootstraptest/test_insns.rb: ditto.
* .gitignore: ignore new generated file.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/exts.mk.tmpl: use `cd` then `make` instead of `make -C`
when not GNU make.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57438 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/configure-ext.mk.tmpl: fixed inverted names of target
and directory, and chomp the last slash.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/configure-ext.mk.tmpl: embed MINIRUBY and SCRIPT_ARGS
to get rid of quoting problems of nmake.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57404 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (EXT_MK): use double-quotes and remove SCRIPT_ARGS
which contains both types of quotes.
* template/configure-ext.mk.tmpl (all): use single-quotes for MAKE
which is set by nmake and contains spaces in the path. do not
use SCRIPT_ARGS.
* template/exts.mk.tmpl (all, static): separate dependency lines,
not to become a default target unintentionally.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57403 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/configure-ext.mk: configure each directories underneath ext
in parallel.
* template/exts.mk.tmpl: then collect the results.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/extinit.c.tmpl: drop rest from the first dot in the
base name of a feature is ignored since r30464.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* {cygwin,template}/GNUmakefile.in (MAKEFLAGS): remove -jN option
from MAKEFLAGS as well as MFLAGS.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/rbconfig/sizeof/extconf.rb: just check the existence of each
types, to reduce configuration time, especially cross-compiling.
* template/sizes.c.tmpl: calculate sizes of checked types at
compilation time.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54759 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/ruby-runner.h.in: separate configured part from
ruby-runner.c.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54572 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
* compile.c (iseq_peephole_optimize): peephole optimization for
branchnil jumps.
* compile.c (iseq_compile_each): generate save navigation operator
code.
* insns.def (branchnil): new opcode to pop the tos and branch if
it is nil.
* parse.y (NEW_QCALL, call_op, parser_yylex): parse token '.?'.
[Feature #11537]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52214 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
* template/unicode_norm_gen.tmpl: pragma needs the end marker too,
not only the beginning marker.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51972 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
get rid of many .freeze commands by using frozen_string_literal
pragma.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/verconf.h.tmpl: load rbconfig.rb into a separate
namespace get rid of conflict with the default RbConfig, to run
with BASERUBY.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk ($(arch)-fake.rb): read from STDIN instead of creating
version.i, to get rid of conflict with tool/update-deps.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/sizes.c.tmpl: extract RUBY_DEFINT to define sizes of
types checked by configure.in, and fix size of intptr_t in
universal binary.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
and x86_64 ABI.
* template/sizes.c.tmpl: Relax a pattern for types.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/fake.rb.in: scan MKSTR and MKINT from version.c and
then extract the value for them from version.i.
* version.c (Init_version): use MKINT as the marker.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/fake.rb.in: expanded macro result may have spaces
between tokens. [ruby-dev:49047] [Bug #11243]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/fake.rb.in (builddir): expand __FILE__ first which may
contain symblic links.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/fake.rb.in: suppress "useless use of a literal in void
context" warning.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/fake.rb.in (top_srcdir): expand for the case @srcdir@
is not a relative path.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/fake.rb.in: add RUBY_PATCHLEVEL and include it in
RUBY_DESCRIPTION.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (fake.rb): generate from same template on all
platforms including win32.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49884 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
* template/prelude.c.tmpl (Prelude#translate): support for
require_relative and comments followed by #.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/prelude.c.tmpl: no code if no prelude code is given.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48605 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
It is not used now.
* common.mk: prelude.c and golf_prelude.c doesn't depend on rbconfig.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48566 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
* 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