Mercurial > hg > Members > kaito > longjump
comparison 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 |
comparison
equal
deleted
inserted
replaced
10:a4f34209ba63 | 11:635eb6d562f0 |
---|---|
1 int setjmp(int*); | 1 int setjmp(int*); |
2 int longjmp(int*,int); | 2 int longjmp(int*,int); |
3 int printf(const char*,...); | 3 int printf(const char*,...); |
4 | 4 |
5 __code code1(int n,__code(*__return)(int,void *),void *__environment){ | 5 __code code1(int n,__code(*exit___code)(int,void *),void *exit_env){ |
6 printf("code1 : code entry1\n"); | 6 printf("code1 : code entry1\n"); |
7 goto __return(n,__environment); | 7 goto exit___code(n,exit_env); |
8 } | 8 } |
9 | 9 |
10 __code return1 (int n,void* env){ | 10 __code return1 (int n,void* env){ |
11 printf("return1 : __return entry\n"); | 11 printf("return1 : __return entry\n"); |
12 *(int*)((struct __CbC_env *)(env))->ret_p = n; | 12 *(int*)((struct __CbC_env *)(env))->ret_p = n; |
13 longjmp((((struct __CbC_env *)env)->env),1); | 13 longjmp((((struct __CbC_env *)env)->env),1); |
14 } | 14 } |
15 | 15 |
16 int main1 (){ | 16 int main1 (){ |
17 __code (*__return)(); | 17 __return; |
18 struct __CbC_env __environment; | 18 __code (*___return)(); |
19 struct __CbC_env ___environment; | |
19 int i_buf[128]; | 20 int i_buf[128]; |
20 int retval; | 21 int retval; |
21 __environment.ret_p = &retval; | 22 ___environment.ret_p = &retval; |
22 __environment.env = i_buf; | 23 ___environment.env = i_buf; |
23 printf("main1 : main1 entry\n"); | 24 printf("main1 : main1 entry\n"); |
24 if (setjmp(__environment.env)){ | 25 if (setjmp(___environment.env)){ |
25 printf("main1 : main1 return\n"); | 26 printf("main1 : main1 return\n"); |
26 return *((int *)__environment.ret_p); | 27 return *((int *)___environment.ret_p); |
27 } | 28 } |
28 __return = return1; | 29 __CbC_return = return1; |
29 goto code1(30,__return,&__environment); | 30 goto code1(30,__CbC_return,&___environment); |
30 return 0; | 31 return 0; |
31 } | 32 } |
32 | 33 |
33 int main (){ | 34 int main (){ |
34 int n; | 35 int n; |