codegen for define-external pasted by wasamasa on Mon Dec 19 21:13:22 2016

(module readline-test ()

(import chicken scheme foreign)

(define-external (callback_test ((const c-string) foo) (int bar)) c-string
  (string-append "foo" "bar"))

)

generated code added by wasamasa on Mon Dec 19 21:13:44 2016

/* Generated from readline-test.scm by the CHICKEN compiler
   http://www.call-cc.org
   2016-12-19 21:11
   Version 4.11.0 (rev ce980c4)
   linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
   compiled 2016-05-28 on yves.more-magic.net (Linux)
   command line: readline-test.scm -output-file readline-test.c
   used units: library eval chicken_2dsyntax
*/

#include "chicken.h"

C_externexport  char *  callback_test(const char * t0,int t1);

static C_PTABLE_ENTRY *create_ptable(void);
C_noret_decl(C_library_toplevel)
C_externimport void C_ccall C_library_toplevel(C_word c,C_word *av) C_noret;
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_chicken_2dsyntax_toplevel)
C_externimport void C_ccall C_chicken_2dsyntax_toplevel(C_word c,C_word *av) C_noret;

static C_TLS C_word lf[6];
static double C_possibly_force_alignment;
static C_char C_TLS li0[] C_aligned={C_lihdr(0,0,41),40,114,101,97,100,108,105,110,101,45,116,101,115,116,35,99,97,108,108,98,97,99,107,95,116,101,115,116,32,102,111,111,49,48,32,98,97,114,49,49,41,0,0,0,0,0,0,0};
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_219)
static void C_ccall f_219(C_word c,C_word *av) C_noret;
C_noret_decl(f_216)
static void C_ccall f_216(C_word c,C_word *av) C_noret;
C_noret_decl(f_224)
static void C_ccall f_224(C_word c,C_word *av) C_noret;
C_noret_decl(f_222)
static void C_ccall f_222(C_word c,C_word *av) C_noret;
C_noret_decl(f_228)
static void C_ccall f_228(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;
C_noret_decl(f_240)
static void C_ccall f_240(C_word c,C_word *av) C_noret;
C_noret_decl(f_243)
static void C_ccall f_243(C_word c,C_word *av) C_noret;

/* from readline-test#callback_test */
 char *  callback_test(const char * t0,int t1){
C_word x,s=0+2+(t0==NULL?1:C_bytestowords(C_strlen(t0))),*a=C_alloc(s);
C_callback_adjust_stack(a,s);
x=C_fix((C_word)t1);
C_save(x);
x=C_mpointer(&a,(void*)t0);
C_save(x);
return C_string_or_null(C_callback_wrapper((void *)f_224,2));}

/* k217 in k214 */
static void C_ccall f_219(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_demand(C_calculate_demand(3,c,2))){C_save_and_reclaim((void *)f_219,2,av);}
a=C_alloc(3);
t2=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_222,a[2]=((C_word*)t0)[2],tmp=(C_word)a,a+=3,tmp);{
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=C_SCHEME_UNDEFINED;
av2[1]=t2;
C_chicken_2dsyntax_toplevel(2,av2);}}

/* k214 */
static void C_ccall f_216(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_demand(C_calculate_demand(3,c,2))){C_save_and_reclaim((void *)f_216,2,av);}
a=C_alloc(3);
t2=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_219,a[2]=((C_word*)t0)[2],tmp=(C_word)a,a+=3,tmp);{
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=C_SCHEME_UNDEFINED;
av2[1]=t2;
C_eval_toplevel(2,av2);}}

/* readline-test#callback_test in k220 in k217 in k214 */
static void C_ccall f_224(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=av[3];
C_word t4;
C_word t5;
C_word *a;
if(c!=4) C_bad_argc_2(c,4,t0);
C_check_for_interrupt;
if(!C_demand(C_calculate_demand(3,c,3))){C_save_and_reclaim((void *)f_224,4,av);}
a=C_alloc(3);
t4=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_228,a[2]=t1,tmp=(C_word)a,a+=3,tmp);
C_trace("readline-test.scm:5: ##sys#peek-c-string");
t5=*((C_word*)lf[4]+1);{
C_word *av2;
if(c >= 4) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(4);
}
av2[0]=t5;
av2[1]=t4;
av2[2]=t2;
av2[3]=C_fix(0);
((C_proc)(void*)(*((C_word*)t5+1)))(4,av2);}}

/* k220 in k217 in k214 */
static void C_ccall f_222(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 t5;
C_word *a;
C_check_for_interrupt;
if(!C_demand(C_calculate_demand(9,c,4))){C_save_and_reclaim((void *)f_222,2,av);}
a=C_alloc(9);
t2=C_mutate2(&lf[0] /* (set! readline-test#callback_test ...) */,(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_224,a[2]=((C_word)li0),tmp=(C_word)a,a+=3,tmp));
t3=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_240,a[2]=((C_word*)t0)[2],tmp=(C_word)a,a+=3,tmp);
t4=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_243,a[2]=t3,tmp=(C_word)a,a+=3,tmp);
C_trace("##sys#implicit-exit-handler");
{C_proc tp=(C_proc)C_fast_retrieve_symbol_proc(lf[5]);
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=*((C_word*)lf[5]+1);
av2[1]=t4;
tp(2,av2);}}

/* k226 in readline-test#callback_test in k220 in k217 in k214 */
static void C_ccall f_228(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_demand(C_calculate_demand(0,c,3))){C_save_and_reclaim((void *)f_228,2,av);}
t2=lf[1];
if(C_truep(t2)){
C_trace("readline-test.scm:5: ##sys#make-c-string");
{C_proc tp=(C_proc)C_fast_retrieve_symbol_proc(lf[2]);
C_word *av2;
if(c >= 4) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(4);
}
av2[0]=*((C_word*)lf[2]+1);
av2[1]=((C_word*)t0)[2];
av2[2]=t2;
av2[3]=lf[3];
tp(4,av2);}}
else{
t3=((C_word*)t0)[2];{
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=t3;
av2[1]=C_SCHEME_FALSE;
((C_proc)(void*)(*((C_word*)t3+1)))(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_demand(C_calculate_demand(3,c,2))){
C_save_and_reclaim((void*)C_toplevel,c,av);}
toplevel_initialized=1;
if(!C_demand_2(28)){
C_save(t1);
C_rereclaim2(28*sizeof(C_word),1);
t1=C_restore;}
a=C_alloc(3);
C_initialize_lf(lf,6);
lf[1]=C_decode_literal(C_heaptop,"\376B\000\000\006foobar");
lf[2]=C_h_intern(&lf[2],17,"\003sysmake-c-string");
lf[3]=C_h_intern(&lf[3],27,"readline-test#callback_test");
lf[4]=C_h_intern(&lf[4],17,"\003syspeek-c-string");
lf[5]=C_h_intern(&lf[5],25,"\003sysimplicit-exit-handler");
C_register_lf2(lf,6,create_ptable());{}
t2=(*a=C_CLOSURE_TYPE|2,a[1]=(C_word)f_216,a[2]=t1,tmp=(C_word)a,a+=3,tmp);{
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=C_SCHEME_UNDEFINED;
av2[1]=t2;
C_library_toplevel(2,av2);}}

/* k238 in k220 in k217 in k214 */
static void C_ccall f_240(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_demand(C_calculate_demand(0,c,1))){C_save_and_reclaim((void *)f_240,2,av);}
t2=((C_word*)t0)[2];{
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=t2;
av2[1]=C_SCHEME_UNDEFINED;
((C_proc)(void*)(*((C_word*)t2+1)))(2,av2);}}

/* k241 in k220 in k217 in k214 */
static void C_ccall f_243(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_demand(C_calculate_demand(0,c,1))){C_save_and_reclaim((void *)f_243,2,av);}
t2=t1;{
C_word *av2;
if(c >= 2) {
  av2=av; /* Re-use our own argvector */
} else {
  av2=C_alloc(2);
}
av2[0]=t2;
av2[1]=((C_word*)t0)[2];
((C_proc)C_fast_retrieve_proc(t2))(2,av2);}}

#ifdef C_ENABLE_PTABLES
static C_PTABLE_ENTRY ptable[9] = {
{"f_219:readline_2dtest_2escm",(void*)f_219},
{"f_216:readline_2dtest_2escm",(void*)f_216},
{"f_224:readline_2dtest_2escm",(void*)f_224},
{"f_222:readline_2dtest_2escm",(void*)f_222},
{"f_228:readline_2dtest_2escm",(void*)f_228},
{"toplevel:readline_2dtest_2escm",(void*)C_toplevel},
{"f_240:readline_2dtest_2escm",(void*)f_240},
{"f_243:readline_2dtest_2escm",(void*)f_243},
{NULL,NULL}};
#endif

static C_PTABLE_ENTRY *create_ptable(void){
#ifdef C_ENABLE_PTABLES
return ptable;
#else
return NULL;
#endif
}

/*
o|hiding nonexported module bindings: readline-test#callback_test 
o|eliminated procedure checks: 1 
o|safe globals: (readline-test#callback_test) 
o|folded constant expression: (string-append (quote "foo") (quote "bar")) 
o|replaced variables: 5 
o|removed binding forms: 7 
o|contracted procedure: k229 
o|removed binding forms: 4 
o|fast global assignments: 1 
*/
/* end of file */