Mercurial > hg > Members > kaito > longjump
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 } |