annotate pointer_longjump.c @ 4:d75a89b10176

write pointer_longjump.c
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Thu, 14 Nov 2013 13:16:46 +0900
parents e6aa3b678e4a
children 4e7858590985
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdio.h>
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include <setjmp.h>
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include <stdlib.h>
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
4
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
5 __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
6 printf("code1 : code entry1\n");
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
7 goto __return(n,__environment,__ret_p);
0
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 }
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
4
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
10 __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
11 printf("return1 : __return entry\n");
1
6d11ed2a5bed write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
12 *__ret_p = n;
0
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 longjmp(*(jmp_buf*)env,1);
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 }
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 int main1 (){
4
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 __code (*__return)();
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
18 void *__environment;
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
19 int retval;
3
e6aa3b678e4a remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
20 int *__ret_p;
4
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
21 __ret_p = &retval;
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
22 printf("main1 : main1 entry\n");
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
23 __environment = (void*)malloc(sizeof(jmp_buf));
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 free(__environment);
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
26 printf("main1 : main1 return\n");
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
27 return retval;
0
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 }
4
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
29 __return = return1;
d75a89b10176 write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
30 goto code1(30,__return,__environment,__ret_p);
0
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 return 0;
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 int main (){
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 int n;
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 n = main1();
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 printf("returned\n");
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 printf("return = %d\n",n);
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 return 1;
dee9711aeb06 the first commit
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }