Mercurial > hg > Members > kaito > slides
view before_s6/2013/2013_12_20/continuationWithEnv.c @ 5:ab2d529bb1d7
add slide
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Oct 2014 19:17:35 +0900 |
parents | 2013/2013_12_20/continuationWithEnv.c@845ff8ff4fc9 |
children |
line wrap: on
line source
__code code1(int n,__code(*exit___code)(int,void *),void *exit_env){ /* do something */ goto exit___code(n,exit_env); } /* these are created automatically __code return1 (int n,void* env){ *(int*)((struct __CbC_env *)(env))->ret_p = n; longjmp((((struct __CbC_env *)env)->env),1); } */ int main1 (){ __return; // -> __code (*___return)(); __environment; // -> struct __CbC_env ___environment; /* these are emited automatically int i_buf[128]; int retval; ___environment.ret_p = &retval; ___environment.env = i_buf; printf("main1 : main1 entry\n"); if (setjmp(___environment.env)){ printf("main1 : main1 return\n"); return *((int *)___environment.ret_p); } __CbC_return = return1; */ goto code1(30,__CbC_return,&___environment); return 0; } int main (){ int n; n = main1(); printf("returned\n"); printf("return = %d\n",n); return 1; }