/* * PerformYieldTypeChecking : * 3.1 Input parameters : * 3.1.1 MoverTypeChecker moverTypeChecker : * 3.2 Action : This function is called in TypeCheck.cs. This is the only function that is externalized. This function traverses the program declarations and performs */ public static void PerformYieldTypeChecking(MoverTypeChecker moverTypeChecker) { Program yieldTypeCheckedProgram = moverTypeChecker.program; YieldTypeChecker regExprToAuto = new YieldTypeChecker(); foreach (var decl in yieldTypeCheckedProgram.TopLevelDeclarations) { Implementation impl = decl as Implementation; if (impl == null) { continue; } int phaseNumSpecImpl = moverTypeChecker.FindPhaseNumber(impl.Proc); YieldTypeCheckerCore yieldTypeCheckerPerImpl = new YieldTypeCheckerCore(moverTypeChecker); List <Tuple <int, int> > phaseIntervals = ComputePhaseIntervals(impl, phaseNumSpecImpl, moverTypeChecker); // Compute intervals for (int i = 0; i < phaseIntervals.Count; i++) // take current phase check num from each interval { int yTypeCheckCurrentPhaseNum = phaseIntervals[i].Item1; Automaton <BvSet> yieldTypeCheckAutoPerPhase = yieldTypeCheckerPerImpl.YieldTypeCheckAutomaton(impl, phaseNumSpecImpl, yTypeCheckCurrentPhaseNum); if (!IsYieldTypeSafe(yieldTypeCheckAutoPerPhase, impl, moverTypeChecker, i)) { moverTypeChecker.Error(impl, "\n Body of " + impl.Proc.Name + " is not yield type safe " + "\n"); } } } }
/* PerformYieldTypeChecking : 3.1 Input parameters : 3.1.1 MoverTypeChecker moverTypeChecker : 3.2 Action : This function is called in TypeCheck.cs. This is the only function that is externalized. This function traverses the program declarations and performs */ public static void PerformYieldTypeChecking(MoverTypeChecker moverTypeChecker) { Program yieldTypeCheckedProgram = moverTypeChecker.program; YieldTypeChecker regExprToAuto = new YieldTypeChecker(); foreach (var decl in yieldTypeCheckedProgram.TopLevelDeclarations) { Implementation impl = decl as Implementation; if (impl == null) continue; int phaseNumSpecImpl = moverTypeChecker.FindPhaseNumber(impl.Proc); YieldTypeCheckerCore yieldTypeCheckerPerImpl = new YieldTypeCheckerCore(moverTypeChecker); List<Tuple<int, int>> phaseIntervals = ComputePhaseIntervals(impl, phaseNumSpecImpl, moverTypeChecker); // Compute intervals for (int i = 0; i < phaseIntervals.Count; i++) // take current phase check num from each interval { int yTypeCheckCurrentPhaseNum = phaseIntervals[i].Item1; Automaton<BvSet> yieldTypeCheckAutoPerPhase = yieldTypeCheckerPerImpl.YieldTypeCheckAutomaton(impl, phaseNumSpecImpl, yTypeCheckCurrentPhaseNum); if (!IsYieldTypeSafe(yieldTypeCheckAutoPerPhase, impl, moverTypeChecker, i)) { moverTypeChecker.Error(impl, "\n Body of " + impl.Proc.Name + " is not yield type safe " + "\n"); } } } }