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:
parent
68e16ddd79
commit
2c42aac9fb
2 changed files with 24 additions and 3 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue