1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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:
nobu 2015-11-12 07:16:23 +00:00
parent 68e16ddd79
commit 2c42aac9fb
2 changed files with 24 additions and 3 deletions

View file

@ -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> 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 * parse.y (parser_yylex): ANDDOT at the head of the line denote

View file

@ -73,6 +73,7 @@ Prelude.new(output && output[/\w+(?=_prelude.c\b)/] || 'prelude', ARGV, vpath).i
#include "ruby/ruby.h" #include "ruby/ruby.h"
#include "internal.h" #include "internal.h"
#include "vm_core.h" #include "vm_core.h"
#include "iseq.h"
% preludes = @preludes.values.sort % preludes = @preludes.values.sort
% preludes.each {|i, prelude, lines, sub| % preludes.each {|i, prelude, lines, sub|
@ -105,9 +106,25 @@ prelude_prefix_path(VALUE self)
% unless preludes.empty? % unless preludes.empty?
static void 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 % end
@ -134,7 +151,7 @@ prelude_require(VALUE self, VALUE nth)
default: default:
return Qfalse; return Qfalse;
} }
prelude_eval(code, name, INT2FIX(1)); prelude_eval(code, name, 1);
return Qtrue; return Qtrue;
} }