예제 #1
0
파일: test_foam.c 프로젝트: hemmecke/aldor
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);
}
예제 #2
0
파일: gf_gener.c 프로젝트: dokterp/aldor
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;
}