http://d.puremagic.com/issues/show_bug.cgi?id=5660
--- Comment #3 from bearophile_h...@eml.cc 2011-08-03 05:08:13 PDT --- Just as an example, this is Python2.6 code: def process((i, j), a, b): if i == 0: yield (a, j) if j == 0: yield (i, b) if i == a: yield (0, j) if j == b: yield (i, 0) if j != b: yield (i + j - b, b) if (b < i + j) else (0, i + j) if i != a: yield (a, i + j - a) if (a < i + j) else (i + j, 0) And this is how ShedSkin compiles it to C++ (a bit edited): class __gen_process : public __iter<tuple2<int, int> *> { public: tuple2<int, int> *__2, *__3; int a, b, i, j; int __last_yield; __gen_process(tuple2<int, int> *__2,int a,int b) { this->__2 = __2; this->a = a; this->b = b; __last_yield = -1; } tuple2<int, int> * __get_next() { switch(__last_yield) { case 0: goto __after_yield_0; case 1: goto __after_yield_1; case 2: goto __after_yield_2; case 3: goto __after_yield_3; case 4: goto __after_yield_4; case 5: goto __after_yield_5; default: break; } if ((i==0)) { __last_yield = 0; __result = (new tuple2<int, int>(2,a,j)); return __result; __after_yield_0:; } if ((j==0)) { __last_yield = 1; __result = (new tuple2<int, int>(2,i,b)); return __result; __after_yield_1:; } if ((i==a)) { __last_yield = 2; __result = (new tuple2<int, int>(2,0,j)); return __result; __after_yield_2:; } if ((j==b)) { __last_yield = 3; __result = (new tuple2<int, int>(2,i,0)); return __result; __after_yield_3:; } if ((j!=b)) { __last_yield = 4; __result = (((b<(i+j)))?((new tuple2<int, int>(2,((i+j)-b),b))):((new tuple2<int, int>(2,0,(i+j))))); return __result; __after_yield_4:; } if ((i!=a)) { __last_yield = 5; __result = (((a<(i+j)))?((new tuple2<int, int>(2,a,((i+j)-a)))):((new tuple2<int, int>(2,(i+j),0)))); return __result; __after_yield_5:; } __stop_iteration = true; } }; __iter<tuple2<int, int> *> *process(tuple2<int, int> *__2, int a, int b) { return new __gen_process(__2,a,b); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------