annotate struct_longjump.c @ 10:a4f34209ba63

remove __CbC_env from struct_longjmp.c
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 08 Dec 2013 16:08:05 +0900
parents 3f7c32b23851
children 635eb6d562f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
a7c771f554e7 remove #include but warnings were not removed
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
1 int setjmp(int*);
a7c771f554e7 remove #include but warnings were not removed
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
2 int longjmp(int*,int);
a7c771f554e7 remove #include but warnings were not removed
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
3 int printf(const char*,...);
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 __code code1(int n,__code(*__return)(int,void *),void *__environment){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 printf("code1 : code entry1\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 goto __return(n,__environment);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 __code return1 (int n,void* env){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 printf("return1 : __return entry\n");
10
a4f34209ba63 remove __CbC_env from struct_longjmp.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
12 *(int*)((struct __CbC_env *)(env))->ret_p = n;
a4f34209ba63 remove __CbC_env from struct_longjmp.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
13 longjmp((((struct __CbC_env *)env)->env),1);
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 int main1 (){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 __code (*__return)();
10
a4f34209ba63 remove __CbC_env from struct_longjmp.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
18 struct __CbC_env __environment;
7
c49bf9e28ea8 remove jmp_buf (replaced by integer array)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
19 int i_buf[128];
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 int retval;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 __environment.ret_p = &retval;
9
3f7c32b23851 change __environment.env type and remove unnecessary casts.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
22 __environment.env = i_buf;
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 printf("main1 : main1 entry\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 if (setjmp(__environment.env)){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 printf("main1 : main1 return\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 return *((int *)__environment.ret_p);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 __return = return1;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 goto code1(30,__return,&__environment);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 return 0;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 int main (){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 int n;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 n = main1();
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 printf("returned\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 printf("return = %d\n",n);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 return 1;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 }