mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
make rb_iseq_new* accept rb_ast_body_t instead of NODE*
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
503b858cef
commit
92b81dc597
8 changed files with 31 additions and 24 deletions
|
@ -1224,9 +1224,13 @@ new_child_iseq(rb_iseq_t *iseq, const NODE *const node,
|
||||||
VALUE name, const rb_iseq_t *parent, enum iseq_type type, int line_no)
|
VALUE name, const rb_iseq_t *parent, enum iseq_type type, int line_no)
|
||||||
{
|
{
|
||||||
rb_iseq_t *ret_iseq;
|
rb_iseq_t *ret_iseq;
|
||||||
|
rb_ast_body_t ast;
|
||||||
|
|
||||||
|
ast.root = node;
|
||||||
|
ast.reserved = 0;
|
||||||
|
|
||||||
debugs("[new_child_iseq]> ---------------------------------------\n");
|
debugs("[new_child_iseq]> ---------------------------------------\n");
|
||||||
ret_iseq = rb_iseq_new_with_opt(node, name,
|
ret_iseq = rb_iseq_new_with_opt(&ast, name,
|
||||||
rb_iseq_path(iseq), rb_iseq_realpath(iseq),
|
rb_iseq_path(iseq), rb_iseq_realpath(iseq),
|
||||||
INT2FIX(line_no), parent, type, ISEQ_COMPILE_DATA(iseq)->option);
|
INT2FIX(line_no), parent, type, ISEQ_COMPILE_DATA(iseq)->option);
|
||||||
debugs("[new_child_iseq]< ---------------------------------------\n");
|
debugs("[new_child_iseq]< ---------------------------------------\n");
|
||||||
|
|
19
iseq.c
19
iseq.c
|
@ -476,24 +476,24 @@ make_compile_option_value(rb_compile_option_t *option)
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_iseq_t *
|
rb_iseq_t *
|
||||||
rb_iseq_new(const NODE *node, VALUE name, VALUE path, VALUE realpath,
|
rb_iseq_new(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath,
|
||||||
const rb_iseq_t *parent, enum iseq_type type)
|
const rb_iseq_t *parent, enum iseq_type type)
|
||||||
{
|
{
|
||||||
return rb_iseq_new_with_opt(node, name, path, realpath, INT2FIX(0), parent, type,
|
return rb_iseq_new_with_opt(ast, name, path, realpath, INT2FIX(0), parent, type,
|
||||||
&COMPILE_OPTION_DEFAULT);
|
&COMPILE_OPTION_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_iseq_t *
|
rb_iseq_t *
|
||||||
rb_iseq_new_top(const NODE *node, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent)
|
rb_iseq_new_top(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent)
|
||||||
{
|
{
|
||||||
return rb_iseq_new_with_opt(node, name, path, realpath, INT2FIX(0), parent, ISEQ_TYPE_TOP,
|
return rb_iseq_new_with_opt(ast, name, path, realpath, INT2FIX(0), parent, ISEQ_TYPE_TOP,
|
||||||
&COMPILE_OPTION_DEFAULT);
|
&COMPILE_OPTION_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_iseq_t *
|
rb_iseq_t *
|
||||||
rb_iseq_new_main(const NODE *node, VALUE path, VALUE realpath, const rb_iseq_t *parent)
|
rb_iseq_new_main(const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent)
|
||||||
{
|
{
|
||||||
return rb_iseq_new_with_opt(node, rb_fstring_cstr("<main>"),
|
return rb_iseq_new_with_opt(ast, rb_fstring_cstr("<main>"),
|
||||||
path, realpath, INT2FIX(0),
|
path, realpath, INT2FIX(0),
|
||||||
parent, ISEQ_TYPE_MAIN, &COMPILE_OPTION_DEFAULT);
|
parent, ISEQ_TYPE_MAIN, &COMPILE_OPTION_DEFAULT);
|
||||||
}
|
}
|
||||||
|
@ -513,10 +513,11 @@ iseq_translate(rb_iseq_t *iseq)
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_iseq_t *
|
rb_iseq_t *
|
||||||
rb_iseq_new_with_opt(const NODE *node, VALUE name, VALUE path, VALUE realpath,
|
rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath,
|
||||||
VALUE first_lineno, const rb_iseq_t *parent,
|
VALUE first_lineno, const rb_iseq_t *parent,
|
||||||
enum iseq_type type, const rb_compile_option_t *option)
|
enum iseq_type type, const rb_compile_option_t *option)
|
||||||
{
|
{
|
||||||
|
const NODE *node = ast ? ast->root : 0;
|
||||||
/* TODO: argument check */
|
/* TODO: argument check */
|
||||||
rb_iseq_t *iseq = iseq_alloc();
|
rb_iseq_t *iseq = iseq_alloc();
|
||||||
|
|
||||||
|
@ -716,7 +717,7 @@ rb_iseq_compile_with_option(VALUE src, VALUE file, VALUE realpath, VALUE line, c
|
||||||
INITIALIZED VALUE label = parent ?
|
INITIALIZED VALUE label = parent ?
|
||||||
parent->body->location.label :
|
parent->body->location.label :
|
||||||
rb_fstring_cstr("<compiled>");
|
rb_fstring_cstr("<compiled>");
|
||||||
iseq = rb_iseq_new_with_opt(ast->body.root, label, file, realpath, line,
|
iseq = rb_iseq_new_with_opt(&ast->body, label, file, realpath, line,
|
||||||
parent, type, &option);
|
parent, type, &option);
|
||||||
rb_ast_dispose(ast);
|
rb_ast_dispose(ast);
|
||||||
}
|
}
|
||||||
|
@ -937,7 +938,7 @@ iseqw_s_compile_file(int argc, VALUE *argv, VALUE self)
|
||||||
|
|
||||||
make_compile_option(&option, opt);
|
make_compile_option(&option, opt);
|
||||||
|
|
||||||
ret = iseqw_new(rb_iseq_new_with_opt(ast->body.root, rb_fstring_cstr("<main>"),
|
ret = iseqw_new(rb_iseq_new_with_opt(&ast->body, rb_fstring_cstr("<main>"),
|
||||||
file,
|
file,
|
||||||
rb_realpath_internal(Qnil, file, 1),
|
rb_realpath_internal(Qnil, file, 1),
|
||||||
line, NULL, ISEQ_TYPE_TOP, &option));
|
line, NULL, ISEQ_TYPE_TOP, &option));
|
||||||
|
|
2
load.c
2
load.c
|
@ -604,7 +604,7 @@ rb_load_internal0(rb_execution_context_t *ec, VALUE fname, int wrap)
|
||||||
VALUE parser = rb_parser_new();
|
VALUE parser = rb_parser_new();
|
||||||
rb_parser_set_context(parser, NULL, FALSE);
|
rb_parser_set_context(parser, NULL, FALSE);
|
||||||
ast = (rb_ast_t *)rb_parser_load_file(parser, fname);
|
ast = (rb_ast_t *)rb_parser_load_file(parser, fname);
|
||||||
iseq = rb_iseq_new_top(ast->body.root, rb_fstring_cstr("<top (required)>"),
|
iseq = rb_iseq_new_top(&ast->body, rb_fstring_cstr("<top (required)>"),
|
||||||
fname, rb_realpath_internal(Qnil, fname, 1), NULL);
|
fname, rb_realpath_internal(Qnil, fname, 1), NULL);
|
||||||
rb_ast_dispose(ast);
|
rb_ast_dispose(ast);
|
||||||
}
|
}
|
||||||
|
|
2
ruby.c
2
ruby.c
|
@ -1749,7 +1749,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
base_block = toplevel_context(toplevel_binding);
|
base_block = toplevel_context(toplevel_binding);
|
||||||
iseq = rb_iseq_new_main(ast->body.root, opt->script_name, path, vm_block_iseq(base_block));
|
iseq = rb_iseq_new_main(&ast->body, opt->script_name, path, vm_block_iseq(base_block));
|
||||||
rb_ast_dispose(ast);
|
rb_ast_dispose(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,7 @@ prelude_eval(VALUE code, VALUE name, int line)
|
||||||
rb_ast_dispose(ast);
|
rb_ast_dispose(ast);
|
||||||
rb_exc_raise(rb_errinfo());
|
rb_exc_raise(rb_errinfo());
|
||||||
}
|
}
|
||||||
rb_iseq_eval(rb_iseq_new_with_opt(ast->body.root, name, name, Qnil, INT2FIX(line),
|
rb_iseq_eval(rb_iseq_new_with_opt(&ast->body, name, name, Qnil, INT2FIX(line),
|
||||||
NULL, ISEQ_TYPE_TOP, &optimization));
|
NULL, ISEQ_TYPE_TOP, &optimization));
|
||||||
rb_ast_dispose(ast);
|
rb_ast_dispose(ast);
|
||||||
}
|
}
|
||||||
|
|
14
vm.c
14
vm.c
|
@ -937,7 +937,8 @@ rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const I
|
||||||
const rb_env_t *env;
|
const rb_env_t *env;
|
||||||
rb_execution_context_t *ec = GET_EC();
|
rb_execution_context_t *ec = GET_EC();
|
||||||
const rb_iseq_t *base_iseq, *iseq;
|
const rb_iseq_t *base_iseq, *iseq;
|
||||||
NODE *node = 0, tmp_node;
|
rb_ast_body_t ast;
|
||||||
|
NODE tmp_node;
|
||||||
ID minibuf[4], *dyns = minibuf;
|
ID minibuf[4], *dyns = minibuf;
|
||||||
VALUE idtmp = 0;
|
VALUE idtmp = 0;
|
||||||
|
|
||||||
|
@ -950,17 +951,18 @@ rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const I
|
||||||
|
|
||||||
dyns[0] = dyncount;
|
dyns[0] = dyncount;
|
||||||
MEMCPY(dyns + 1, dynvars, ID, dyncount);
|
MEMCPY(dyns + 1, dynvars, ID, dyncount);
|
||||||
node = &tmp_node;
|
rb_node_init(&tmp_node, NODE_SCOPE, (VALUE)dyns, 0, 0);
|
||||||
rb_node_init(node, NODE_SCOPE, (VALUE)dyns, 0, 0);
|
ast.root = &tmp_node;
|
||||||
|
ast.reserved = 0;
|
||||||
|
|
||||||
if (base_iseq) {
|
if (base_iseq) {
|
||||||
iseq = rb_iseq_new(node, base_iseq->body->location.label, path, realpath, base_iseq, ISEQ_TYPE_EVAL);
|
iseq = rb_iseq_new(&ast, base_iseq->body->location.label, path, realpath, base_iseq, ISEQ_TYPE_EVAL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
VALUE tempstr = rb_fstring_cstr("<temp>");
|
VALUE tempstr = rb_fstring_cstr("<temp>");
|
||||||
iseq = rb_iseq_new_top(node, tempstr, tempstr, tempstr, NULL);
|
iseq = rb_iseq_new_top(&ast, tempstr, tempstr, tempstr, NULL);
|
||||||
}
|
}
|
||||||
node->nd_tbl = 0; /* reset table */
|
tmp_node.nd_tbl = 0; /* reset table */
|
||||||
ALLOCV_END(idtmp);
|
ALLOCV_END(idtmp);
|
||||||
|
|
||||||
vm_set_eval_stack(ec, iseq, 0, base_block);
|
vm_set_eval_stack(ec, iseq, 0, base_block);
|
||||||
|
|
|
@ -884,10 +884,10 @@ typedef enum {
|
||||||
RUBY_SYMBOL_EXPORT_BEGIN
|
RUBY_SYMBOL_EXPORT_BEGIN
|
||||||
|
|
||||||
/* node -> iseq */
|
/* node -> iseq */
|
||||||
rb_iseq_t *rb_iseq_new (const NODE *node, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
|
rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
|
||||||
rb_iseq_t *rb_iseq_new_top (const NODE *node, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
|
rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
|
||||||
rb_iseq_t *rb_iseq_new_main (const NODE *node, VALUE path, VALUE realpath, const rb_iseq_t *parent);
|
rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent);
|
||||||
rb_iseq_t *rb_iseq_new_with_opt(const NODE *node, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
|
rb_iseq_t *rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
|
||||||
const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
|
const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
|
||||||
rb_iseq_t *rb_iseq_new_ifunc(const struct vm_ifunc *ifunc, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
|
rb_iseq_t *rb_iseq_new_ifunc(const struct vm_ifunc *ifunc, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
|
||||||
const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
|
const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
|
||||||
|
|
|
@ -1273,7 +1273,7 @@ eval_make_iseq(VALUE src, VALUE fname, int line, const rb_binding_t *bind,
|
||||||
rb_parser_set_context(parser, base_block, FALSE);
|
rb_parser_set_context(parser, base_block, FALSE);
|
||||||
ast = rb_parser_compile_string_path(parser, fname, src, line);
|
ast = rb_parser_compile_string_path(parser, fname, src, line);
|
||||||
if (ast->body.root) {
|
if (ast->body.root) {
|
||||||
iseq = rb_iseq_new_with_opt(ast->body.root,
|
iseq = rb_iseq_new_with_opt(&ast->body,
|
||||||
parent->body->location.label,
|
parent->body->location.label,
|
||||||
fname, realpath, INT2FIX(line),
|
fname, realpath, INT2FIX(line),
|
||||||
parent, ISEQ_TYPE_EVAL, NULL);
|
parent, ISEQ_TYPE_EVAL, NULL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue