зеркало из https://github.com/github/ruby.git
prelude.c.tmpl: optimize
* 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:
Родитель
68e16ddd79
Коммит
2c42aac9fb
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче