* template/prelude.c.tmpl: enable tail call optimization.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-11-12 07:16:23 +00:00
Родитель 68e16ddd79
Коммит 2c42aac9fb
2 изменённых файлов: 24 добавлений и 3 удалений

Просмотреть файл

@ -1,3 +1,7 @@
Thu Nov 12 16:16:20 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* template/prelude.c.tmpl: enable tail call optimization.
Thu Nov 12 14:17:01 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (parser_yylex): ANDDOT at the head of the line denote

Просмотреть файл

@ -73,6 +73,7 @@ Prelude.new(output && output[/\w+(?=_prelude.c\b)/] || 'prelude', ARGV, vpath).i
#include "ruby/ruby.h"
#include "internal.h"
#include "vm_core.h"
#include "iseq.h"
% preludes = @preludes.values.sort
% preludes.each {|i, prelude, lines, sub|
@ -105,9 +106,25 @@ prelude_prefix_path(VALUE self)
% unless preludes.empty?
static void
prelude_eval(VALUE code, VALUE name, VALUE line)
prelude_eval(VALUE code, VALUE name, int line)
{
rb_iseq_eval(rb_iseq_compile_with_option(code, name, Qnil, line, 0, Qtrue));
static const rb_compile_option_t optimization = {
TRUE, /* int inline_const_cache; */
TRUE, /* int peephole_optimization; */
TRUE, /* int tailcall_optimization */
TRUE, /* int specialized_instruction; */
TRUE, /* int operands_unification; */
TRUE, /* int instructions_unification; */
TRUE, /* int stack_caching; */
FALSE, /* int trace_instruction */
TRUE,
FALSE,
};
NODE *node = rb_parser_compile_string_path(rb_parser_new(), name, code, line);
if (!node) rb_exc_raise(rb_errinfo());
rb_iseq_eval(rb_iseq_new_with_opt(node, name, name, Qnil, INT2FIX(line),
NULL, ISEQ_TYPE_TOP, &optimization));
}
% end
@ -134,7 +151,7 @@ prelude_require(VALUE self, VALUE nth)
default:
return Qfalse;
}
prelude_eval(code, name, INT2FIX(1));
prelude_eval(code, name, 1);
return Qtrue;
}