# HG changeset patch # User Kaito Tokumori # Date 1389521918 -32400 # Node ID 7c8d5d4074b8fe72cabff2c3132353ad4e1dc3cb # Parent 635eb6d562f095ba22065d8860452b855031f517 cut return1 func diff -r 635eb6d562f0 -r 7c8d5d4074b8 struct_longjump.c --- a/struct_longjump.c Sat Dec 14 18:23:35 2013 +0900 +++ b/struct_longjump.c Sun Jan 12 19:18:38 2014 +0900 @@ -1,5 +1,3 @@ -int setjmp(int*); -int longjmp(int*,int); int printf(const char*,...); __code code1(int n,__code(*exit___code)(int,void *),void *exit_env){ @@ -7,34 +5,17 @@ goto exit___code(n,exit_env); } -__code return1 (int n,void* env){ - printf("return1 : __return entry\n"); - *(int*)((struct __CbC_env *)(env))->ret_p = n; - longjmp((((struct __CbC_env *)env)->env),1); -} +double aua; int main1 (){ - __return; - __code (*___return)(); - struct __CbC_env ___environment; - 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); + goto code1(30,__return,__environment); return 0; } int main (){ int n; n = main1(); - printf("returned\n"); printf("return = %d\n",n); return 1; }