refactor pic_compile
This commit is contained in:
parent
0d33900745
commit
060fb227a7
|
@ -1354,24 +1354,12 @@ pic_codegen(pic_state *pic, pic_value obj)
|
||||||
return destroy_codegen_state(state);
|
return destroy_codegen_state(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pic_proc *
|
struct pic_irep *
|
||||||
pic_compile(pic_state *pic, pic_value obj)
|
compile(pic_state *pic, pic_value obj)
|
||||||
{
|
{
|
||||||
struct pic_proc *proc;
|
|
||||||
struct pic_irep *irep;
|
struct pic_irep *irep;
|
||||||
jmp_buf jmp, *prev_jmp = pic->jmp;
|
|
||||||
int ai = pic_gc_arena_preserve(pic);
|
int ai = pic_gc_arena_preserve(pic);
|
||||||
|
|
||||||
|
|
||||||
if (setjmp(jmp) == 0) {
|
|
||||||
pic->jmp = &jmp;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* error occured */
|
|
||||||
proc = NULL;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
fprintf(stderr, "ai = %d\n", pic_gc_arena_preserve(pic));
|
fprintf(stderr, "ai = %d\n", pic_gc_arena_preserve(pic));
|
||||||
|
|
||||||
|
@ -1419,18 +1407,35 @@ pic_compile(pic_state *pic, pic_value obj)
|
||||||
puts("");
|
puts("");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
proc = pic_proc_new_irep(pic, irep, NULL);
|
pic_gc_arena_restore(pic, ai);
|
||||||
|
pic_gc_protect(pic, pic_obj_value(irep));
|
||||||
|
|
||||||
#if VM_DEBUG
|
#if VM_DEBUG
|
||||||
pic_dump_irep(pic, proc->u.irep);
|
pic_dump_irep(pic, proc->u.irep);
|
||||||
#endif
|
#endif
|
||||||
|
return irep;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct pic_proc *
|
||||||
|
pic_compile(pic_state *pic, pic_value obj)
|
||||||
|
{
|
||||||
|
struct pic_proc *proc;
|
||||||
|
jmp_buf jmp, *prev_jmp = pic->jmp;
|
||||||
|
|
||||||
|
if (setjmp(jmp) == 0) {
|
||||||
|
pic->jmp = &jmp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* error occured */
|
||||||
|
proc = NULL;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
proc = pic_proc_new_irep(pic, compile(pic, obj), NULL);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
pic->jmp = prev_jmp;
|
pic->jmp = prev_jmp;
|
||||||
|
|
||||||
pic_gc_arena_restore(pic, ai);
|
|
||||||
pic_gc_protect(pic, pic_obj_value(proc));
|
|
||||||
|
|
||||||
return proc;
|
return proc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue