Mercurial > hg > Members > kaito > longjump
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 |
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 } |