[Issue 5660] yield syntax sugar
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Aug 3 05:08:14 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5660
--- Comment #3 from bearophile_hugs at 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: -------
More information about the Digitalmars-d-bugs
mailing list