Mercurial > hg > Members > kaito > slides
view 2013/2013_12_20/continuationWithEnv.c @ 0:845ff8ff4fc9
1st
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Jan 2014 01:31:42 +0900 |
parents | |
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; }