Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}