mirror of
https://github.com/janet-lang/janet
synced 2024-12-01 12:29:54 +00:00
Fix small compiler bug (not freeing temp register).
This commit is contained in:
parent
8aba5e76ae
commit
97d874f16b
@ -144,6 +144,7 @@ void janetc_regalloc_free(JanetcRegisterAllocator *ra, int32_t reg) {
|
|||||||
int32_t janetc_regalloc_temp(JanetcRegisterAllocator *ra, JanetcRegisterTemp nth) {
|
int32_t janetc_regalloc_temp(JanetcRegisterAllocator *ra, JanetcRegisterTemp nth) {
|
||||||
int32_t oldmax = ra->max;
|
int32_t oldmax = ra->max;
|
||||||
if (ra->regtemps & (1 << nth)) {
|
if (ra->regtemps & (1 << nth)) {
|
||||||
|
printf("regtemp %d attempted\n", nth);
|
||||||
janet_exit("regtemp already allocated");
|
janet_exit("regtemp already allocated");
|
||||||
}
|
}
|
||||||
ra->regtemps |= 1 << nth;
|
ra->regtemps |= 1 << nth;
|
||||||
|
@ -602,6 +602,7 @@ static JanetSlot janetc_while(JanetFopts opts, int32_t argn, const Janet *argv)
|
|||||||
int32_t tempself = janetc_regalloc_temp(&tempscope.ra, JANETC_REGTEMP_0);
|
int32_t tempself = janetc_regalloc_temp(&tempscope.ra, JANETC_REGTEMP_0);
|
||||||
janetc_emit(c, JOP_LOAD_SELF | (tempself << 8));
|
janetc_emit(c, JOP_LOAD_SELF | (tempself << 8));
|
||||||
janetc_emit(c, JOP_TAILCALL | (tempself << 8));
|
janetc_emit(c, JOP_TAILCALL | (tempself << 8));
|
||||||
|
janetc_regalloc_freetemp(&c->scope->ra, tempself, JANETC_REGTEMP_0);
|
||||||
/* Compile function */
|
/* Compile function */
|
||||||
JanetFuncDef *def = janetc_pop_funcdef(c);
|
JanetFuncDef *def = janetc_pop_funcdef(c);
|
||||||
def->name = janet_cstring("_while");
|
def->name = janet_cstring("_while");
|
||||||
@ -610,7 +611,7 @@ static JanetSlot janetc_while(JanetFopts opts, int32_t argn, const Janet *argv)
|
|||||||
int32_t cloreg = janetc_regalloc_temp(&c->scope->ra, JANETC_REGTEMP_0);
|
int32_t cloreg = janetc_regalloc_temp(&c->scope->ra, JANETC_REGTEMP_0);
|
||||||
janetc_emit(c, JOP_CLOSURE | (cloreg << 8) | (defindex << 16));
|
janetc_emit(c, JOP_CLOSURE | (cloreg << 8) | (defindex << 16));
|
||||||
janetc_emit(c, JOP_CALL | (cloreg << 8) | (cloreg << 16));
|
janetc_emit(c, JOP_CALL | (cloreg << 8) | (cloreg << 16));
|
||||||
janetc_regalloc_free(&c->scope->ra, cloreg);
|
janetc_regalloc_freetemp(&c->scope->ra, cloreg, JANETC_REGTEMP_0);
|
||||||
c->scope->flags |= JANET_SCOPE_CLOSURE;
|
c->scope->flags |= JANET_SCOPE_CLOSURE;
|
||||||
return janetc_cslot(janet_wrap_nil());
|
return janetc_cslot(janet_wrap_nil());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user