comparison struct_longjump.c @ 7:c49bf9e28ea8

remove jmp_buf (replaced by integer array)
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 01 Dec 2013 14:59:18 +0900
parents 509523ee1e27
children a7c771f554e7
comparison
equal deleted inserted replaced
6:509523ee1e27 7:c49bf9e28ea8
11 } 11 }
12 12
13 __code return1 (int n,void* env){ 13 __code return1 (int n,void* env){
14 printf("return1 : __return entry\n"); 14 printf("return1 : __return entry\n");
15 *(int*)((struct CbC_env *)(env))->ret_p = n; 15 *(int*)((struct CbC_env *)(env))->ret_p = n;
16 longjmp(*(jmp_buf*)(((struct CbC_env *)env)->env),1); 16 longjmp((int*)(((struct CbC_env *)env)->env),1);
17 } 17 }
18 18
19 int main1 (){ 19 int main1 (){
20 __code (*__return)(); 20 __code (*__return)();
21 struct CbC_env __environment; 21 struct CbC_env __environment;
22 jmp_buf j_buf; 22 int i_buf[128];
23 int retval; 23 int retval;
24 __environment.ret_p = &retval; 24 __environment.ret_p = &retval;
25 __environment.env = &j_buf; 25 __environment.env = &i_buf;
26 printf("main1 : main1 entry\n"); 26 printf("main1 : main1 entry\n");
27 if (setjmp(__environment.env)){ 27 if (setjmp(__environment.env)){
28 printf("main1 : main1 return\n"); 28 printf("main1 : main1 return\n");
29 return *((int *)__environment.ret_p); 29 return *((int *)__environment.ret_p);
30 } 30 }