local void testIter() { Foam seq; int i; seq = foamNewSeq(NULL); i = -1; i = foamSeqNextReachable(seq, i); testIntEqual("1", -1, i); seq = foamNewSeq(foamNewNOp(), foamNewGoto(10), foamNewLabel(10), NULL); i = -1; i = foamSeqNextReachable(seq, i); testIntEqual("", 0, i); i = foamSeqNextReachable(seq, i); testIntEqual("", 1, i); i = foamSeqNextReachable(seq, i); testIntEqual("", 2, i); i = foamSeqNextReachable(seq, i); testIntEqual("", -1, i); seq = foamNewSeq(foamNewNOp(), foamNewGoto(10), foamNewNOp(), foamNewLabel(10), NULL); i = -1; i = foamSeqNextReachable(seq, i); testIntEqual("", 0, i); i = foamSeqNextReachable(seq, i); testIntEqual("", 1, i); i = foamSeqNextReachable(seq, i); testIntEqual("", 3, i); i = foamSeqNextReachable(seq, i); testIntEqual("", -1, i); }
Foam genYield(AbSyn absyn) { /* set the place variable */ gen0AddStmt(foamNewSet(yieldPlaceVar, foamNewSInt(++gen0State->yieldCount)), absyn); gen0AddStmt(foamNewSet(foamCopy(gen0State->yieldValueVar), genFoamVal(absyn->abYield.value)), absyn); gen0AddStmt(foamNewGoto(gen0State->yieldPlace), absyn); gen0AddStmt(foamNewLabel(gen0State->labelNo), absyn); gen0State->yieldLabels = listCons(AInt)(gen0State->labelNo++, gen0State->yieldLabels); return 0; }