mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* iseq.h, iseq.c (rb_iseq_new_main): add a type ISEQ_TYPE_MAIN.
[ruby-dev:37619] * compile.c (rb_dvar_defined, ruby_iseq_compile): ditto. * iseq.c (iseq_data_to_ary, iseq_load): ditto. * compile.c (iseq_compile_each): fix to check ip->compile_data. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5effdad2cd
commit
6c08b4522d
4 changed files with 40 additions and 3 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
Sat Dec 27 14:48:26 2008 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* iseq.h, iseq.c (rb_iseq_new_main): add a type ISEQ_TYPE_MAIN.
|
||||
[ruby-dev:37619]
|
||||
|
||||
* compile.c (rb_dvar_defined, ruby_iseq_compile): ditto.
|
||||
|
||||
* iseq.c (iseq_data_to_ary, iseq_load): ditto.
|
||||
|
||||
* compile.c (iseq_compile_each): fix to check ip->compile_data.
|
||||
|
||||
Sat Dec 27 14:29:33 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/open-uri.rb (OpenURI.redirectable?): permit https redirection.
|
||||
|
|
23
compile.c
23
compile.c
|
@ -469,6 +469,7 @@ ruby_iseq_compile(VALUE self, NODE *node)
|
|||
case ISEQ_TYPE_CLASS:
|
||||
case ISEQ_TYPE_BLOCK:
|
||||
case ISEQ_TYPE_EVAL:
|
||||
case ISEQ_TYPE_MAIN:
|
||||
case ISEQ_TYPE_TOP:
|
||||
rb_compile_error(ERROR_ARGS "compile/should not be reached: %s:%d",
|
||||
__FILE__, __LINE__);
|
||||
|
@ -3265,6 +3266,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
|||
else {
|
||||
rb_iseq_t *ip = iseq->parent_iseq;
|
||||
while (ip) {
|
||||
if (!ip->compile_data) {
|
||||
ip = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
level++;
|
||||
if (ip->compile_data->redo_label != 0) {
|
||||
level = 0x8000;
|
||||
|
@ -3281,6 +3287,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
|||
else if (ip->type == ISEQ_TYPE_EVAL) {
|
||||
goto break_in_eval;
|
||||
}
|
||||
|
||||
ip = ip->parent_iseq;
|
||||
}
|
||||
COMPILE_ERROR((ERROR_ARGS "Invalid break"));
|
||||
|
@ -3322,6 +3329,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
|||
rb_iseq_t *ip;
|
||||
ip = iseq;
|
||||
while (ip) {
|
||||
if (!ip->compile_data) {
|
||||
ip = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
level = 0x8000 | 0x4000;
|
||||
if (ip->compile_data->redo_label != 0) {
|
||||
/* while loop */
|
||||
|
@ -3333,6 +3345,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
|||
else if (ip->type == ISEQ_TYPE_EVAL) {
|
||||
goto next_in_eval;
|
||||
}
|
||||
|
||||
ip = ip->parent_iseq;
|
||||
}
|
||||
if (ip != 0) {
|
||||
|
@ -3383,6 +3396,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
|||
level = 0x8000 | 0x4000;
|
||||
ip = iseq;
|
||||
while (ip) {
|
||||
if (!ip->compile_data) {
|
||||
ip = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ip->compile_data->redo_label != 0) {
|
||||
break;
|
||||
}
|
||||
|
@ -3392,6 +3410,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
|||
else if (ip->type == ISEQ_TYPE_EVAL) {
|
||||
goto redo_in_eval;
|
||||
}
|
||||
|
||||
ip = ip->parent_iseq;
|
||||
}
|
||||
if (ip != 0) {
|
||||
|
@ -5291,7 +5310,9 @@ rb_dvar_defined(ID id)
|
|||
while (iseq->type == ISEQ_TYPE_BLOCK ||
|
||||
iseq->type == ISEQ_TYPE_RESCUE ||
|
||||
iseq->type == ISEQ_TYPE_ENSURE ||
|
||||
iseq->type == ISEQ_TYPE_EVAL) {
|
||||
iseq->type == ISEQ_TYPE_EVAL ||
|
||||
iseq->type == ISEQ_TYPE_MAIN
|
||||
) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < iseq->local_table_size; i++) {
|
||||
|
|
6
iseq.c
6
iseq.c
|
@ -316,7 +316,7 @@ rb_iseq_new_main(NODE *node, VALUE filename)
|
|||
rb_thread_t *th = GET_THREAD();
|
||||
VALUE parent = th->base_block->iseq->self;
|
||||
return rb_iseq_new_with_opt(node, rb_str_new2("<main>"), filename,
|
||||
parent, ISEQ_TYPE_EVAL, &COMPILE_OPTION_DEFAULT);
|
||||
parent, ISEQ_TYPE_MAIN, &COMPILE_OPTION_DEFAULT);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -411,6 +411,7 @@ iseq_load(VALUE self, VALUE data, VALUE parent, VALUE opt)
|
|||
st_insert(type_map, ID2SYM(rb_intern("rescue")), ISEQ_TYPE_RESCUE);
|
||||
st_insert(type_map, ID2SYM(rb_intern("ensure")), ISEQ_TYPE_ENSURE);
|
||||
st_insert(type_map, ID2SYM(rb_intern("eval")), ISEQ_TYPE_EVAL);
|
||||
st_insert(type_map, ID2SYM(rb_intern("main")), ISEQ_TYPE_MAIN);
|
||||
st_insert(type_map, ID2SYM(rb_intern("defined_guard")), ISEQ_TYPE_DEFINED_GUARD);
|
||||
}
|
||||
|
||||
|
@ -1028,6 +1029,7 @@ iseq_data_to_ary(rb_iseq_t *iseq)
|
|||
DECL_SYMBOL(rescue);
|
||||
DECL_SYMBOL(ensure);
|
||||
DECL_SYMBOL(eval);
|
||||
DECL_SYMBOL(main);
|
||||
DECL_SYMBOL(defined_guard);
|
||||
|
||||
if (sym_top == 0) {
|
||||
|
@ -1042,6 +1044,7 @@ iseq_data_to_ary(rb_iseq_t *iseq)
|
|||
INIT_SYMBOL(rescue);
|
||||
INIT_SYMBOL(ensure);
|
||||
INIT_SYMBOL(eval);
|
||||
INIT_SYMBOL(main);
|
||||
INIT_SYMBOL(defined_guard);
|
||||
}
|
||||
|
||||
|
@ -1054,6 +1057,7 @@ iseq_data_to_ary(rb_iseq_t *iseq)
|
|||
case ISEQ_TYPE_RESCUE: type = sym_rescue; break;
|
||||
case ISEQ_TYPE_ENSURE: type = sym_ensure; break;
|
||||
case ISEQ_TYPE_EVAL: type = sym_eval; break;
|
||||
case ISEQ_TYPE_MAIN: type = sym_main; break;
|
||||
case ISEQ_TYPE_DEFINED_GUARD: type = sym_defined_guard; break;
|
||||
default: rb_bug("unsupported iseq type");
|
||||
};
|
||||
|
|
3
iseq.h
3
iseq.h
|
@ -30,7 +30,8 @@ struct st_table *ruby_insn_make_insn_table(void);
|
|||
#define ISEQ_TYPE_RESCUE INT2FIX(5)
|
||||
#define ISEQ_TYPE_ENSURE INT2FIX(6)
|
||||
#define ISEQ_TYPE_EVAL INT2FIX(7)
|
||||
#define ISEQ_TYPE_DEFINED_GUARD INT2FIX(8)
|
||||
#define ISEQ_TYPE_MAIN INT2FIX(8)
|
||||
#define ISEQ_TYPE_DEFINED_GUARD INT2FIX(9)
|
||||
|
||||
#define CATCH_TYPE_RESCUE INT2FIX(1)
|
||||
#define CATCH_TYPE_ENSURE INT2FIX(2)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue