Mercurial > hg > Members > kaito > longjump
annotate pointer_longjump.c @ 16:6ec369858a50 default tip
aua
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 24 Jan 2014 00:10:05 +0900 |
parents | 509523ee1e27 |
children |
rev | line source |
---|---|
0 | 1 #include <stdio.h> |
2 #include <setjmp.h> | |
3 | |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
4 __code code1(int n,__code(*__return)(int,void *,int *),void *__environment,int *__ret_p){ |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
5 printf("code1 : code entry1\n"); |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
6 goto __return(n,__environment,__ret_p); |
0 | 7 } |
8 | |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
9 __code return1 (int n,void* env,int* __ret_p){ |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
10 printf("return1 : __return entry\n"); |
1
6d11ed2a5bed
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
11 *__ret_p = n; |
0 | 12 longjmp(*(jmp_buf*)env,1); |
13 } | |
14 | |
15 int main1 (){ | |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
16 __code (*__return)(); |
6
509523ee1e27
add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
17 void *__environment; |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
18 int *__ret_p; |
5
4e7858590985
remove malloc , free and include<stdlib.h>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
19 jmp_buf j_buf; |
6
509523ee1e27
add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
20 int retval; |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
21 __ret_p = &retval; |
6
509523ee1e27
add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
22 __environment = &j_buf; |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
23 printf("main1 : main1 entry\n"); |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
24 if (setjmp(__environment)){ |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
25 printf("main1 : main1 return\n"); |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
26 return retval; |
0 | 27 } |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
28 __return = return1; |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
29 goto code1(30,__return,__environment,__ret_p); |
0 | 30 return 0; |
31 } | |
32 | |
33 int main (){ | |
34 int n; | |
35 n = main1(); | |
36 printf("returned\n"); | |
37 printf("return = %d\n",n); | |
38 return 1; | |
39 } |