annotate struct_longjump.c @ 11:635eb6d562f0

__return
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sat, 14 Dec 2013 18:23:35 +0900
parents a4f34209ba63
children 7c8d5d4074b8
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
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
5 __code code1(int n,__code(*exit___code)(int,void *),void *exit_env){
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 printf("code1 : code entry1\n");
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
7 goto exit___code(n,exit_env);
6
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 (){
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
17 __return;
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
18 __code (*___return)();
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
19 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
20 int i_buf[128];
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 int retval;
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
22 ___environment.ret_p = &retval;
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
23 ___environment.env = i_buf;
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 printf("main1 : main1 entry\n");
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
25 if (setjmp(___environment.env)){
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 printf("main1 : main1 return\n");
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
27 return *((int *)___environment.ret_p);
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 }
11
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
29 __CbC_return = return1;
635eb6d562f0 __return
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
30 goto code1(30,__CbC_return,&___environment);
6
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 return 0;
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
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 int main (){
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 int n;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 n = main1();
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 printf("returned\n");
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 printf("return = %d\n",n);
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 return 1;
509523ee1e27 add struct_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }