Created
December 19, 2024 12:49
-
-
Save ninedraft/0a7390cba8bce7093286384cb2da4b9d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(define (fact n) | |
(if (= n 0) | |
1 | |
(* n (fact (- n 1))))) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Generated from ./test.scm by the CHICKEN compiler | |
http://www.call-cc.org | |
Version 5.4.0 (rev 1a1d1495) | |
macosx-unix-clang-arm64 [ 64bit dload ptables ] | |
command line: -to-stdout ./test.scm | |
uses: eval library | |
*/ | |
#include "chicken.h" | |
static C_PTABLE_ENTRY *create_ptable(void); | |
C_noret_decl(C_eval_toplevel) | |
C_externimport void C_ccall C_eval_toplevel(C_word c,C_word *av) C_noret; | |
C_noret_decl(C_library_toplevel) | |
C_externimport void C_ccall C_library_toplevel(C_word c,C_word *av) C_noret; | |
static C_TLS C_word lf[2]; | |
static double C_possibly_force_alignment; | |
static C_char C_TLS li0[] C_aligned={C_lihdr(0,0,8),40,102,97,99,116,32,110,41}; | |
static C_char C_TLS li1[] C_aligned={C_lihdr(0,0,10),40,116,111,112,108,101,118,101,108,41,0,0,0,0,0,0}; | |
C_noret_decl(f_121) | |
static void C_ccall f_121(C_word c,C_word *av) C_noret; | |
C_noret_decl(f_124) | |
static void C_ccall f_124(C_word c,C_word *av) C_noret; | |
C_noret_decl(f_126) | |
static void C_ccall f_126(C_word c,C_word *av) C_noret; | |
C_noret_decl(f_140) | |
static void C_ccall f_140(C_word c,C_word *av) C_noret; | |
C_noret_decl(f_150) | |
static void C_ccall f_150(C_word c,C_word *av) C_noret; | |
C_noret_decl(C_toplevel) | |
C_externexport void C_ccall C_toplevel(C_word c,C_word *av) C_noret; | |
/* k119 */ | |
static void C_ccall f_121(C_word c,C_word *av){ | |
C_word tmp; | |
C_word t0=av[0]; | |
C_word t1=av[1]; | |
C_word t2; | |
C_word t3; | |
C_word *a; | |
C_check_for_interrupt; | |
if(C_unlikely(!C_demand(C_calculate_demand(3,c,2)))){ | |
C_save_and_reclaim((void *)f_121,c,av);} | |
a=C_alloc(3); | |
t2=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_124,a[2]=((C_word*)t0)[2],tmp=(C_word)a,a+=3,tmp);{ | |
C_word *av2=av; | |
av2[0]=C_SCHEME_UNDEFINED; | |
av2[1]=t2; | |
C_eval_toplevel(2,av2);}} | |
/* k122 in k119 */ | |
static void C_ccall f_124(C_word c,C_word *av){ | |
C_word tmp; | |
C_word t0=av[0]; | |
C_word t1=av[1]; | |
C_word t2; | |
C_word t3; | |
C_word t4; | |
C_word *a; | |
C_check_for_interrupt; | |
if(C_unlikely(!C_demand(C_calculate_demand(6,c,3)))){ | |
C_save_and_reclaim((void *)f_124,c,av);} | |
a=C_alloc(6); | |
t2=C_mutate((C_word*)lf[0]+1 /* (set! fact ...) */,(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_126,a[2]=((C_word)li0),tmp=(C_word)a,a+=3,tmp)); | |
t3=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_150,a[2]=((C_word*)t0)[2],tmp=(C_word)a,a+=3,tmp); | |
C_trace(C_text("chicken.base#implicit-exit-handler")); | |
{C_proc tp=(C_proc)C_fast_retrieve_symbol_proc(lf[1]); | |
C_word *av2=av; | |
av2[0]=*((C_word*)lf[1]+1); | |
av2[1]=t3; | |
tp(2,av2);}} | |
/* fact in k122 in k119 */ | |
static void C_ccall f_126(C_word c,C_word *av){ | |
C_word tmp; | |
C_word t0=av[0]; | |
C_word t1=av[1]; | |
C_word t2=av[2]; | |
C_word t3; | |
C_word t4; | |
C_word t5; | |
C_word *a; | |
if(c!=3) C_bad_argc_2(c,3,t0); | |
C_check_for_interrupt; | |
if(C_unlikely(!C_demand(C_calculate_demand(33,c,2)))){ | |
C_save_and_reclaim((void *)f_126,c,av);} | |
a=C_alloc(33); | |
if(C_truep(C_i_nequalp(t2,C_fix(0)))){ | |
t3=t1;{ | |
C_word *av2=av; | |
av2[0]=t3; | |
av2[1]=C_fix(1); | |
((C_proc)(void*)(*((C_word*)t3+1)))(2,av2);}} | |
else{ | |
t3=(*a=C_CLOSURE_TYPE|3,a[1]=(C_word)f_140,a[2]=t1,a[3]=t2,tmp=(C_word)a,a+=4,tmp); | |
t4=C_s_a_i_minus(&a,2,t2,C_fix(1)); | |
C_trace(C_text("./test.scm:4: fact")); | |
{C_proc tp=(C_proc)C_fast_retrieve_proc(*((C_word*)lf[0]+1)); | |
C_word *av2=av; | |
av2[0]=*((C_word*)lf[0]+1); | |
av2[1]=t3; | |
av2[2]=t4; | |
tp(3,av2);}}} | |
/* k138 in fact in k122 in k119 */ | |
static void C_ccall f_140(C_word c,C_word *av){ | |
C_word tmp; | |
C_word t0=av[0]; | |
C_word t1=av[1]; | |
C_word t2; | |
C_word *a; | |
C_check_for_interrupt; | |
if(C_unlikely(!C_demand(C_calculate_demand(33,c,1)))){ | |
C_save_and_reclaim((void *)f_140,c,av);} | |
a=C_alloc(33); | |
t2=((C_word*)t0)[2];{ | |
C_word *av2=av; | |
av2[0]=t2; | |
av2[1]=C_s_a_i_times(&a,2,((C_word*)t0)[3],t1); | |
((C_proc)(void*)(*((C_word*)t2+1)))(2,av2);}} | |
/* k148 in k122 in k119 */ | |
static void C_ccall f_150(C_word c,C_word *av){ | |
C_word tmp; | |
C_word t0=av[0]; | |
C_word t1=av[1]; | |
C_word t2; | |
C_word *a; | |
C_check_for_interrupt; | |
if(C_unlikely(!C_demand(C_calculate_demand(0,c,1)))){ | |
C_save_and_reclaim((void *)f_150,c,av);} | |
t2=t1;{ | |
C_word *av2=av; | |
av2[0]=t2; | |
av2[1]=((C_word*)t0)[2]; | |
((C_proc)C_fast_retrieve_proc(t2))(2,av2);}} | |
/* toplevel */ | |
static C_TLS int toplevel_initialized=0; | |
C_main_entry_point | |
void C_ccall C_toplevel(C_word c,C_word *av){ | |
C_word tmp; | |
C_word t0=av[0]; | |
C_word t1=av[1]; | |
C_word t2; | |
C_word t3; | |
C_word *a; | |
if(toplevel_initialized) {C_kontinue(t1,C_SCHEME_UNDEFINED);} | |
else C_toplevel_entry(C_text("toplevel")); | |
C_check_nursery_minimum(C_calculate_demand(3,c,2)); | |
if(C_unlikely(!C_demand(C_calculate_demand(3,c,2)))){ | |
C_save_and_reclaim((void*)C_toplevel,c,av);} | |
toplevel_initialized=1; | |
if(C_unlikely(!C_demand_2(14))){ | |
C_save(t1); | |
C_rereclaim2(14*sizeof(C_word),1); | |
t1=C_restore;} | |
a=C_alloc(3); | |
C_initialize_lf(lf,2); | |
lf[0]=C_h_intern(&lf[0],4, C_text("fact")); | |
lf[1]=C_h_intern(&lf[1],34, C_text("chicken.base#implicit-exit-handler")); | |
C_register_lf2(lf,2,create_ptable());{} | |
t2=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_121,a[2]=t1,tmp=(C_word)a,a+=3,tmp);{ | |
C_word *av2=av; | |
av2[0]=C_SCHEME_UNDEFINED; | |
av2[1]=t2; | |
C_library_toplevel(2,av2);}} | |
#ifdef C_ENABLE_PTABLES | |
static C_PTABLE_ENTRY ptable[7] = { | |
{C_text("f_121:_2e_2ftest_2escm"),(void*)f_121}, | |
{C_text("f_124:_2e_2ftest_2escm"),(void*)f_124}, | |
{C_text("f_126:_2e_2ftest_2escm"),(void*)f_126}, | |
{C_text("f_140:_2e_2ftest_2escm"),(void*)f_140}, | |
{C_text("f_150:_2e_2ftest_2escm"),(void*)f_150}, | |
{C_text("toplevel:_2e_2ftest_2escm"),(void*)C_toplevel}, | |
{NULL,NULL}}; | |
#endif | |
static C_PTABLE_ENTRY *create_ptable(void){ | |
#ifdef C_ENABLE_PTABLES | |
return ptable; | |
#else | |
return NULL; | |
#endif | |
} | |
/* | |
o|safe globals: (fact) | |
o|replaced variables: 6 | |
o|removed binding forms: 3 | |
o|removed binding forms: 5 | |
o|simplifications: ((##core#call . 3)) | |
o| call simplifications: | |
o| scheme#= | |
o| scheme#- | |
o| scheme#* | |
o|contracted procedure: k131 | |
o|contracted procedure: k142 | |
o|simplifications: ((let . 1)) | |
o|removed binding forms: 2 | |
*/ | |
/* end of file */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment