annotate struct_longjump.c @ 8:a7c771f554e7

remove #include but warnings were not removed
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 01 Dec 2013 20:23:27 +0900
parents c49bf9e28ea8
children 3f7c32b23851
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 struct CbC_env {
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 void *ret_p,*env;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 };
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 __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
10 printf("code1 : code entry1\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 goto __return(n,__environment);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 __code return1 (int n,void* env){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 printf("return1 : __return entry\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 *(int*)((struct CbC_env *)(env))->ret_p = n;
7
c49bf9e28ea8 remove jmp_buf (replaced by integer array)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
17 longjmp((int*)(((struct CbC_env *)env)->env),1);
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 int main1 (){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 __code (*__return)();
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 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
23 int i_buf[128];
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 int retval;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 __environment.ret_p = &retval;
7
c49bf9e28ea8 remove jmp_buf (replaced by integer array)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
26 __environment.env = &i_buf;
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 printf("main1 : main1 entry\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 if (setjmp(__environment.env)){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 printf("main1 : main1 return\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 return *((int *)__environment.ret_p);
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 __return = return1;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 goto code1(30,__return,&__environment);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 return 0;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 }
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 int main (){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 int n;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 n = main1();
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 printf("returned\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 printf("return = %d\n",n);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 return 1;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 }