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;