Project

General

Profile

Feature #4871 » 0001-vm.c-vm_make_env_each-don-t-save-prev-env-value.-It-.patch

ktsj (Kazuki Tsujimoto), 06/11/2011 09:03 PM

View differences:

vm.c
env{
env[0] // special (block or prev env)
env[1] // env object
env[2] // prev env val
};
*/
......
{
printf("---\n");
printf("envptr: %p\n", (void *)&env->block.dfp[0]);
printf("orphan: %p\n", (void *)env->block.dfp[1]);
printf("inheap: %p\n", (void *)env->block.dfp[2]);
printf("envval: %10p ", (void *)env->block.dfp[3]);
dp(env->block.dfp[3]);
printf("penvv : %10p ", (void *)env->block.dfp[4]);
dp(env->block.dfp[4]);
printf("envval: %10p ", (void *)env->block.dfp[1]);
dp(env->block.dfp[1]);
printf("lfp: %10p\n", (void *)env->block.lfp);
printf("dfp: %10p\n", (void *)env->block.dfp);
if (env->block.dfp[4]) {
if (env->prev_envval) {
printf(">>\n");
check_env_value(env->block.dfp[4]);
check_env_value(env->prev_envval);
printf("<<\n");
}
return 1;
......
local_size = cfp->iseq->local_size;
}
env->env_size = local_size + 1 + 2;
env->env_size = local_size + 1 + 1;
env->local_size = local_size;
env->env = ALLOC_N(VALUE, env->env_size);
env->prev_envval = penvval;
......
*envptr = envval; /* GC mark */
nenvptr = &env->env[i - 1];
nenvptr[1] = envval; /* frame self */
nenvptr[2] = penvval; /* frame prev env object */
/* reset lfp/dfp in cfp */
cfp->dfp = nenvptr;
(1-1/2)