#include <stdio.h>
#define BEGIN switch (ctx->state) { \
case 0:
#define YIELD(val) do { \
ctx->state = __LINE__; \
return val; \
case __LINE__: \
; \
} while (0)
#define END }
typedef struct{
int state;
int i;
} Ctx;
int fibs(Ctx* ctx)
{
int x;
BEGIN;
YIELD(++ctx->i);
YIELD(++ctx->i);
END;
return 0;
}
int main()
{
int i=0;
Ctx t0 = {0,1};
Ctx t1 = {0,101};
while (i = fibs(&t0)) {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgogICAgCiNkZWZpbmUgQkVHSU4gc3dpdGNoIChjdHgtPnN0YXRlKSB7IFwKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgCiNkZWZpbmUgWUlFTEQodmFsKSBkbyB7IFwKICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zdGF0ZSA9IF9fTElORV9fOyAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX19MSU5FX186ICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQogICAgCiNkZWZpbmUgRU5EIH0KCnR5cGVkZWYgc3RydWN0ewogICAgaW50IHN0YXRlOwkKICAgIGludCBpOwp9ICBDdHg7CgppbnQgZmlicyhDdHgqIGN0eCkKewogICAgaW50IHg7CiAgICBCRUdJTjsKICAgICAgICBZSUVMRCgrK2N0eC0+aSk7CiAgICAgICAgWUlFTEQoKytjdHgtPmkpOwoKICAgIEVORDsKICAgIHJldHVybiAwOwp9IAoKaW50IG1haW4oKQp7CiAgICBpbnQgaT0wOwoKICAgIEN0eCB0MCA9IHswLDF9OwogICAgQ3R4IHQxID0gezAsMTAxfTsgICAgCiAgICB3aGlsZSAoaSA9IGZpYnMoJnQwKSkgewogICAgICAgIHByaW50ZigidDA6JWRcbiIsIGkpOwogICAgICAgIHByaW50ZigidDE6JWRcbiIsIGZpYnMoJnQxKSk7CiAgICB9IAoKICAgIHJldHVybiAwOwp9