Mercurial > hg > Members > kaito > longjump
annotate global_longjump.c @ 3:e6aa3b678e4a
remove ret from global_longjump.c
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 12 Nov 2013 15:22:04 +0900 |
parents | dee9711aeb06 |
children | d75a89b10176 |
rev | line source |
---|---|
0 | 1 #include <stdio.h> |
2 #include <setjmp.h> | |
3 #include <stdlib.h> | |
4 | |
5 int retval; | |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
6 __code code1(int n,__code(*__return)(int,void *),void *__enviroment){ |
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
7 printf("code1 : code1 entry\n"); |
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
8 goto __return(n,__enviroment); |
0 | 9 } |
10 | |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
11 __code return1 (int n,void* env){ |
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
12 printf("return1 : __return entry\n"); |
0 | 13 retval = n; |
14 longjmp(*(jmp_buf*)env,1); | |
15 } | |
16 | |
17 int main1 (){ | |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
18 __code (*__return)(); |
0 | 19 void *__enviroment; |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
20 printf("main1 : main1 entry\n"); |
0 | 21 __enviroment = (void*)malloc(sizeof(jmp_buf)); |
22 if (setjmp(__enviroment)){ | |
23 free(__enviroment); | |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
24 printf("main1 : main1 return\n"); |
0 | 25 return retval; |
26 } | |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
27 __return = return1; |
0 | 28 goto code1(30,__return,__enviroment); |
29 return 0; | |
30 } | |
31 | |
32 int main (){ | |
33 int n; | |
34 n = main1(); | |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
35 printf("main : return = %d\n",n); |
0 | 36 return 1; |
37 } |