Feature #4871 » 0001-vm.c-vm_make_env_each-don-t-save-prev-env-value.-It-.patch
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;
|