#include #include #define dprint(f, args...) \ printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(0), ## args) /* * コードセグメント間の遷移で * * * */ __code schedule (); __code cs0a (); __code cs1a (int a); __code cs2a (int a, double b); __code cs3a (int a, double b, int c); __code cs4a (int a, double b, int c, float d); __code cs0b (); __code cs1b (int a); __code cs2b (int a, double b); __code cs3b (int a, double b, int c); __code cs4b (int a, double b, int c, float d); /* defined in file code_segment_pointer_check.cbc at offset 1649 */ int main (); __code end(int a) { dprint("exit with code %d\n",a); exit(a); } __code (*cs0) (); __code (*cs1) (int); __code (*cs2) (int, double); __code (*cs3) (int, double, int); __code (*cs4) (int, double, int, float); int i=0; __code schedule() { dprint("i=%d\n",i); if ( i>=100 ) { goto end(0); } switch (i++%5) { case 0: goto cs0(); case 1: goto cs1(i); case 2: goto cs2(i, i*1.3); case 3: goto cs3(i, i*1.3, 20*i); case 4: goto cs4(i, i*1.3, 20*i, i*0.8); default: exit(0); } dprint("code unreachable!\n"); } __code cs0a() { dprint("no args\n"); cs0 = cs0b; goto schedule(); } __code cs1a(int a) { dprint("int a=%d\n", a); cs1 = cs1b; goto schedule(); } __code cs2a(int a, double b) { dprint("int a=%d, double b=%lf\n", a, b); cs2 = cs2b; goto schedule(); } __code cs3a(int a, double b, int c) { dprint("int a=%d, double b=%lf, int c=%d\n", a, b, c); cs3 = cs3b; goto schedule(); } __code cs4a(int a, double b, int c, float d) { dprint("int a=%d, double b=%lf, int c=%d, float d=%f\n", a, b, c, d); cs4 = cs4b; goto schedule(); } __code cs0b() { dprint("no args\n"); cs0 = cs0a; goto schedule(); } __code cs1b(int a) { dprint("int a=%d\n", a); cs1 = cs1a; goto schedule(); } __code cs2b(int a, double b) { dprint("int a=%d, double b=%lf\n", a, b); cs2 = cs2a; goto schedule(); } __code cs3b(int a, double b, int c) { dprint("int a=%d, double b=%lf, int c=%d\n", a, b, c); cs3 = cs3a; goto schedule(); } __code cs4b(int a, double b, int c, float d) { dprint("int a=%d, double b=%lf, int c=%d, float d=%f\n", a, b, c, d); cs4 = cs4a; goto schedule(); } int main() { cs0 = cs0a; cs1 = cs1a; cs2 = cs2a; cs3 = cs3a; cs4 = cs4a; goto schedule(); }