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

* compile.c (iseq_set_sequence): raise SyntaxError instead of rb_bug

since this function can be called from VM::InstructionSequence.load.

* compile.c (insn_set_sc_state, iseq_set_sequence_stackcaching): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2007-07-20 07:30:33 +00:00
parent 39c56c3349
commit 644d3a650f
2 changed files with 23 additions and 8 deletions

View file

@ -1,3 +1,10 @@
Fri Jul 20 16:30:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* compile.c (iseq_set_sequence): raise SyntaxError instead of rb_bug
since this function can be called from VM::InstructionSequence.load.
* compile.c (insn_set_sc_state, iseq_set_sequence_stackcaching): ditto.
Fri Jul 20 16:11:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org> Fri Jul 20 16:11:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* compile.c, compile.h (DECL_ANCHOR, INIT_ANCHOR): split not to * compile.c, compile.h (DECL_ANCHOR, INIT_ANCHOR): split not to

View file

@ -867,8 +867,8 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
if (iseq->arg_post_start == 0) { if (iseq->arg_post_start == 0) {
iseq->arg_post_start = iseq->arg_rest + 1; iseq->arg_post_start = iseq->arg_rest + 1;
}
} }
}
if (block_id) { if (block_id) {
iseq->arg_block = get_dyna_var_idx_at_raw(iseq, block_id); iseq->arg_block = get_dyna_var_idx_at_raw(iseq, block_id);
@ -987,7 +987,8 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
default: default:
dump_disasm_list(FIRST_ELEMENT(anchor)); dump_disasm_list(FIRST_ELEMENT(anchor));
dump_disasm_list(list); dump_disasm_list(list);
rb_bug("error: set_sequence"); rb_compile_error(RSTRING_PTR(iseq->filename), line,
"error: set_sequence");
break; break;
} }
list = list->next; list = list->next;
@ -1031,7 +1032,9 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
/* operand check */ /* operand check */
if (iobj->operand_size != len - 1) { if (iobj->operand_size != len - 1) {
dump_disasm_list(list); dump_disasm_list(list);
rb_bug("operand size miss! (%d for %d)", iobj->operand_size, len - 1); rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"operand size miss! (%d for %d)",
iobj->operand_size, len - 1);
return 0; return 0;
} }
@ -1044,7 +1047,8 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
/* label(destination position) */ /* label(destination position) */
lobj = (LABEL *)operands[j]; lobj = (LABEL *)operands[j];
if (lobj->set != Qtrue) { if (lobj->set != Qtrue) {
rb_bug("unknown label"); rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unknown label");
} }
if (lobj->sp == -1) { if (lobj->sp == -1) {
lobj->sp = sp; lobj->sp = sp;
@ -1068,7 +1072,8 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
lobj = (LABEL *)(lv & ~1); lobj = (LABEL *)(lv & ~1);
if (lobj->set != Qtrue) { if (lobj->set != Qtrue) {
rb_bug("unknown label"); rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unknown label");
} }
rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len))); rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len)));
} }
@ -1117,7 +1122,8 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
} }
break; break;
default: default:
rb_bug("unknown operand type: %c", type); rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unknown operand type: %c", type);
return 0; return 0;
} }
} }
@ -1617,7 +1623,8 @@ insn_set_sc_state(rb_iseq_t *iseq, INSN *iobj, int state)
dump_disasm_list((LINK_ELEMENT *)iobj); dump_disasm_list((LINK_ELEMENT *)iobj);
dump_disasm_list((LINK_ELEMENT *)lobj); dump_disasm_list((LINK_ELEMENT *)lobj);
printf("\n-- %d, %d\n", lobj->sc_state, nstate); printf("\n-- %d, %d\n", lobj->sc_state, nstate);
rb_bug("insn_set_sc_state error\n"); rb_compile_error(RSTRING_PTR(iseq->filename), iobj->lineno,
"insn_set_sc_state error\n");
return 0; return 0;
} }
} }
@ -1718,7 +1725,8 @@ iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
case SCS_XX: case SCS_XX:
goto normal_insn; goto normal_insn;
default: default:
rb_bug("unreachable"); rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unreachable");
} }
/* remove useless pop */ /* remove useless pop */
REMOVE_ELEM(list); REMOVE_ELEM(list);