diff --git a/ChangeLog b/ChangeLog index c0b37a5d47..fcbbade408 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Thu Jul 5 19:45:55 2007 Koichi Sasada + + * yarvcore.h: rename rb_control_frame_t#magic to flag. + + * vm.h: add VM_FRAME_TYPE() and VM_FRAME_FLAG(). + + * cont.c, insnhelper.ci, insns.def, vm.c, vm_dump.c, + vm_evalbody.ci, yarvcore.c: apply above changes. + Thu Jul 5 19:16:14 2007 Koichi Sasada * test/ruby/test_basicinstructions.rb: remove an assertion using diff --git a/cont.c b/cont.c index 833182aa4e..3a7f7ee235 100644 --- a/cont.c +++ b/cont.c @@ -489,7 +489,7 @@ rb_fiber_s_new(VALUE self) *th->cfp->lfp = 0; th->cfp->dfp = th->stack; th->cfp->self = Qnil; - th->cfp->magic = 0; + th->cfp->flag = 0; th->cfp->iseq = 0; th->cfp->proc = 0; th->cfp->block_iseq = 0; diff --git a/insnhelper.ci b/insnhelper.ci index 73ea6ee09a..f3665be14f 100644 --- a/insnhelper.ci +++ b/insnhelper.ci @@ -17,7 +17,7 @@ /* control stack frame */ static inline rb_control_frame_t * -vm_push_frame(rb_thread_t *th, rb_iseq_t *iseq, VALUE magic, +vm_push_frame(rb_thread_t *th, rb_iseq_t *iseq, VALUE type, VALUE self, VALUE specval, VALUE *pc, VALUE *sp, VALUE *lfp, int local_size) { @@ -44,7 +44,7 @@ vm_push_frame(rb_thread_t *th, rb_iseq_t *iseq, VALUE magic, cfp->sp = sp + 1; cfp->bp = sp + 1; cfp->iseq = iseq; - cfp->magic = magic; + cfp->flag = VM_FRAME_FLAG(type); cfp->self = self; cfp->lfp = lfp; cfp->dfp = dfp; diff --git a/insns.def b/insns.def index 471f2a5bfb..63f1ca1153 100644 --- a/insns.def +++ b/insns.def @@ -1406,7 +1406,7 @@ throw rb_bug("VM (throw): can't find break base."); } - if (cfp->magic == FRAME_MAGIC_LAMBDA) { + if (VM_FRAME_TYPE(cfp) == FRAME_MAGIC_LAMBDA) { /* lambda{... break ...} */ is_orphan = 0; pt = dfp; @@ -1465,7 +1465,7 @@ throw */ while ((VALUE *) cfp < th->stack + th->stack_size) { if (GET_DFP() == dfp) { - if (cfp->magic == FRAME_MAGIC_LAMBDA) { + if (VM_FRAME_TYPE(cfp) == FRAME_MAGIC_LAMBDA) { /* in lambda */ is_orphan = 0; break; diff --git a/vm.c b/vm.c index fd7bd4f372..736494fe86 100644 --- a/vm.c +++ b/vm.c @@ -547,7 +547,7 @@ invoke_block(rb_thread_t *th, rb_block_t *block, VALUE self, int argc, VALUE *ar if (BUILTIN_TYPE(block->iseq) != T_NODE) { rb_iseq_t *iseq = block->iseq; int i, opt_pc; - int magic = block_proc_is_lambda(block->proc) ? + int type = block_proc_is_lambda(block->proc) ? FRAME_MAGIC_LAMBDA : FRAME_MAGIC_BLOCK; rb_vm_set_finish_env(th); @@ -559,11 +559,11 @@ invoke_block(rb_thread_t *th, rb_block_t *block, VALUE self, int argc, VALUE *ar th->cfp->sp[i] = argv[i]; } - opt_pc = vm_yield_setup_args(th, iseq, argc, th->cfp->sp, magic == FRAME_MAGIC_LAMBDA); + opt_pc = vm_yield_setup_args(th, iseq, argc, th->cfp->sp, type == FRAME_MAGIC_LAMBDA); argc = iseq->arg_size; th->cfp->sp += argc; - vm_push_frame(th, iseq, magic, + vm_push_frame(th, iseq, type, self, GC_GUARDED_PTR(block->dfp), iseq->iseq_encoded + opt_pc, th->cfp->sp, block->lfp, iseq->local_size - argc); @@ -783,7 +783,7 @@ check_svar(void) rb_thread_t *th = GET_THREAD(); rb_control_frame_t *cfp = th->cfp; while ((void *)(cfp + 1) < (void *)(th->stack + th->stack_size)) { - /* printf("cfp: %p\n", cfp->magic); */ + /* printf("cfp: %p\n", cfp->type); */ if (cfp->lfp && cfp->lfp[-1] != Qnil && TYPE(cfp->lfp[-1]) != T_VALUES) { /* dp(cfp->lfp[-1]); */ @@ -1050,12 +1050,12 @@ yarv_init_redefined_flag(void) VALUE *pc; // cfp[0] VALUE *sp; // cfp[1] VALUE *bp; // cfp[2] - rb_iseq_t *iseq; // cfp[3] - VALUE magic; // cfp[4] + rb_iseq_t *iseq; // cfp[3] + VALUE flag; // cfp[4] VALUE self; // cfp[5] VALUE *lfp; // cfp[6] VALUE *dfp; // cfp[7] - rb_iseq_t * block_iseq; // cfp[8] + rb_iseq_t * block_iseq; // cfp[8] VALUE proc; // cfp[9] always 0 }; diff --git a/vm.h b/vm.h index ae1f162c95..de8365b411 100644 --- a/vm.h +++ b/vm.h @@ -231,26 +231,25 @@ while (0) (!((th)->stack < (env) && (env) < ((th)->stack + (th)->stack_size))) #define ENV_VAL(env) ((env)[1]) -#define FRAME_MAGIC_METHOD 0xfaffff11 -#define FRAME_MAGIC_BLOCK 0xfaffff21 -#define FRAME_MAGIC_CLASS 0xfaffff31 -#define FRAME_MAGIC_TOP 0xfaffff41 -#define FRAME_MAGIC_FINISH 0xfaffff51 -#define FRAME_MAGIC_CFUNC 0xfaffff61 -#define FRAME_MAGIC_PROC 0xfaffff71 -#define FRAME_MAGIC_IFUNC 0xfaffff81 -#define FRAME_MAGIC_EVAL 0xfaffff91 -#define FRAME_MAGIC_LAMBDA 0xfaffffa1 +#define FRAME_MAGIC_METHOD 0x11 +#define FRAME_MAGIC_BLOCK 0x21 +#define FRAME_MAGIC_CLASS 0x31 +#define FRAME_MAGIC_TOP 0x41 +#define FRAME_MAGIC_FINISH 0x51 +#define FRAME_MAGIC_CFUNC 0x61 +#define FRAME_MAGIC_PROC 0x71 +#define FRAME_MAGIC_IFUNC 0x81 +#define FRAME_MAGIC_EVAL 0x91 +#define FRAME_MAGIC_LAMBDA 0xa1 +#define FRAME_MAGIC_MASK 0xff -#define CHECK_FRAME_MAGIC(magic) \ -{ \ - if((magic & 0xffffff00) != 0xfaffff00){ \ - rb_bug("YARV Stack frame error: %08x", magic); \ - } \ -} +#define VM_FRAME_FLAG(type) ((VALUE)((type) & FRAME_MAGIC_MASK)) + +#define VM_FRAME_TYPE(cfp) \ + ((cfp)->flag & FRAME_MAGIC_MASK) #define RUBYVM_CFUNC_FRAME_P(cfp) \ - ((cfp)->magic == FRAME_MAGIC_CFUNC) + (VM_FRAME_TYPE(cfp) == FRAME_MAGIC_CFUNC) /* * Excception diff --git a/vm_dump.c b/vm_dump.c index 76b63bd203..c72b4e1e7e 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -46,7 +46,7 @@ control_frame_dump(rb_thread_t *th, rb_control_frame_t *cfp) bp = cfp->bp - th->stack; } - switch (cfp->magic) { + switch (VM_FRAME_TYPE(cfp)) { case FRAME_MAGIC_TOP: magic = "TOP"; break; @@ -263,15 +263,15 @@ stack_dump_each(rb_thread_t *th, rb_control_frame_t *cfp) /* stack trace header */ - if (cfp->magic == FRAME_MAGIC_METHOD || - cfp->magic == FRAME_MAGIC_TOP || - cfp->magic == FRAME_MAGIC_BLOCK || - cfp->magic == FRAME_MAGIC_CLASS || - cfp->magic == FRAME_MAGIC_PROC || - cfp->magic == FRAME_MAGIC_LAMBDA || - cfp->magic == FRAME_MAGIC_CFUNC || - cfp->magic == FRAME_MAGIC_IFUNC || - cfp->magic == FRAME_MAGIC_EVAL) { + if (VM_FRAME_TYPE(cfp) == FRAME_MAGIC_METHOD || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_TOP || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_BLOCK || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_CLASS || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_PROC || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_LAMBDA || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_CFUNC || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_IFUNC || + VM_FRAME_TYPE(cfp) == FRAME_MAGIC_EVAL) { VALUE *ptr = dfp - local_size; @@ -304,7 +304,7 @@ stack_dump_each(rb_thread_t *th, rb_control_frame_t *cfp) ptr - th->stack); } } - else if (cfp->magic == FRAME_MAGIC_FINISH) { + else if (VM_FRAME_TYPE(cfp) == FRAME_MAGIC_FINISH) { if ((th)->stack + (th)->stack_size > (VALUE *)(cfp + 2)) { stack_dump_each(th, cfp + 1); } @@ -313,7 +313,7 @@ stack_dump_each(rb_thread_t *th, rb_control_frame_t *cfp) } } else { - rb_bug("unsupport frame type: %08lx", cfp->magic); + rb_bug("unsupport frame type: %08lx", VM_FRAME_TYPE(cfp)); } } @@ -354,7 +354,7 @@ debug_print_pre(rb_thread_t *th, rb_control_frame_t *cfp) { rb_iseq_t *iseq = cfp->iseq; - if (iseq != 0 && cfp->magic != FRAME_MAGIC_FINISH) { + if (iseq != 0 && VM_FRAME_TYPE(cfp) != FRAME_MAGIC_FINISH) { VALUE *seq = iseq->iseq; int pc = cfp->pc - iseq->iseq_encoded; diff --git a/vm_evalbody.ci b/vm_evalbody.ci index 2e8746813a..f9dd39f5a3 100644 --- a/vm_evalbody.ci +++ b/vm_evalbody.ci @@ -134,7 +134,7 @@ vm_eval(rb_thread_t *th, VALUE initial) } } - if (th->cfp->magic != FRAME_MAGIC_FINISH) { + if (VM_FRAME_TYPE(th->cfp) != FRAME_MAGIC_FINISH) { rb_bug("cfp consistency error"); } diff --git a/yarvcore.c b/yarvcore.c index b25de4afc4..72755198d8 100644 --- a/yarvcore.c +++ b/yarvcore.c @@ -340,7 +340,7 @@ th_init2(rb_thread_t *th) *th->cfp->lfp = 0; th->cfp->dfp = th->stack; th->cfp->self = Qnil; - th->cfp->magic = 0; + th->cfp->flag = 0; th->cfp->iseq = 0; th->cfp->proc = 0; th->cfp->block_iseq = 0; diff --git a/yarvcore.h b/yarvcore.h index 149a57fd10..4931900848 100644 --- a/yarvcore.h +++ b/yarvcore.h @@ -387,7 +387,7 @@ typedef struct { VALUE *sp; /* cfp[1] */ VALUE *bp; /* cfp[2] */ rb_iseq_t *iseq; /* cfp[3] */ - VALUE magic; /* cfp[4] */ + VALUE flag; /* cfp[4] */ VALUE self; /* cfp[5] / block[0] */ VALUE *lfp; /* cfp[6] / block[1] */ VALUE *dfp; /* cfp[7] / block[2] */