public static void Transform(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker) { List <Declaration> originalDecls = new List <Declaration>(); Program program = linearTypeChecker.program; foreach (var decl in program.TopLevelDeclarations) { Procedure proc = decl as Procedure; if (proc != null && moverTypeChecker.procToActionInfo.ContainsKey(proc)) { originalDecls.Add(proc); continue; } Implementation impl = decl as Implementation; if (impl != null && moverTypeChecker.procToActionInfo.ContainsKey(impl.Proc)) { originalDecls.Add(impl); } } List <Declaration> decls = new List <Declaration>(); if (!CommandLineOptions.Clo.TrustAtomicityTypes) { MoverCheck.AddCheckers(linearTypeChecker, moverTypeChecker, decls); } OwickiGries.AddCheckers(linearTypeChecker, moverTypeChecker, decls); foreach (Declaration decl in decls) { decl.Attributes = OwickiGries.RemoveYieldsAttribute(decl.Attributes); } program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x)); program.AddTopLevelDeclarations(decls); }
public static void Transform(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker) { Program program = linearTypeChecker.program; // Store the original declarations of yielding procedures, which will be removed after desugaring below. var origProc = program.TopLevelDeclarations.OfType <Procedure>().Where(p => civlTypeChecker.procToYieldingProc.ContainsKey(p)); var origImpl = program.TopLevelDeclarations.OfType <Implementation>().Where(i => civlTypeChecker.procToYieldingProc.ContainsKey(i.Proc)); List <Declaration> originalDecls = Enumerable.Union <Declaration>(origProc, origImpl).ToList(); // Commutativity checks List <Declaration> decls = new List <Declaration>(); if (!CommandLineOptions.Clo.TrustAtomicityTypes) { MoverCheck.AddCheckers(linearTypeChecker, civlTypeChecker, decls); } // Desugaring of yielding procedures YieldingProcChecker.AddCheckers(linearTypeChecker, civlTypeChecker, decls); // Linear type checks LinearTypeChecker.AddCheckers(linearTypeChecker, civlTypeChecker, decls); // Remove original declarations and add new checkers generated above program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x)); program.AddTopLevelDeclarations(decls); civlTypeChecker.SubstituteBackwardAssignments(); foreach (AtomicAction atomicAction in civlTypeChecker.procToAtomicAction.Values) { program.RemoveTopLevelDeclaration(atomicAction.proc); program.RemoveTopLevelDeclaration(atomicAction.impl); } }
public static void Transform(LinearTypeChecker linearTypeChecker, MoverTypeChecker moverTypeChecker) { // The order in which originalDecls are computed and then *.AddCheckers are called is // apparently important. The MyDuplicator code currently does not duplicate Attributes. // Consequently, all the yield attributes are eliminated by the AddCheckers code. List <Declaration> originalDecls = new List <Declaration>(); Program program = linearTypeChecker.program; foreach (var decl in program.TopLevelDeclarations) { Procedure proc = decl as Procedure; if (proc != null && QKeyValue.FindBoolAttribute(proc.Attributes, "yields")) { originalDecls.Add(proc); continue; } Implementation impl = decl as Implementation; if (impl != null && QKeyValue.FindBoolAttribute(impl.Proc.Attributes, "yields")) { originalDecls.Add(impl); } } List <Declaration> decls = new List <Declaration>(); OwickiGries.AddCheckers(linearTypeChecker, moverTypeChecker, decls); MoverCheck.AddCheckers(linearTypeChecker, moverTypeChecker, decls); RefinementCheck.AddCheckers(linearTypeChecker, moverTypeChecker, decls); program.TopLevelDeclarations.RemoveAll(x => originalDecls.Contains(x)); program.TopLevelDeclarations.AddRange(decls); }
public static void Transform(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker) { Program program = linearTypeChecker.program; // Store the original declarations of yielding procedures, which will be removed after desugaring below. var origProc = program.TopLevelDeclarations.OfType <Procedure>().Where(p => civlTypeChecker.procToYieldingProc.ContainsKey(p)); var origImpl = program.TopLevelDeclarations.OfType <Implementation>().Where(i => civlTypeChecker.procToYieldingProc.ContainsKey(i.Proc)); List <Declaration> originalDecls = Enumerable.Union <Declaration>(origProc, origImpl).ToList(); // Commutativity checks List <Declaration> decls = new List <Declaration>(); if (!CommandLineOptions.Clo.TrustAtomicityTypes) { MoverCheck.AddCheckers(linearTypeChecker, civlTypeChecker, decls); } // Desugaring of yielding procedures CivlRefinement.AddCheckers(linearTypeChecker, civlTypeChecker, decls); // Trigger functions for existential vairables in transition relations decls.AddRange(civlTypeChecker.procToAtomicAction.Values.SelectMany(a => a.layerToActionCopy.Values.SelectMany(ac => ac.triggerFuns.Values))); // Remove original declarations and add new checkers generated above program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x)); program.AddTopLevelDeclarations(decls); foreach (AtomicAction atomicAction in civlTypeChecker.procToAtomicAction.Values) { program.RemoveTopLevelDeclaration(atomicAction.proc); program.RemoveTopLevelDeclaration(atomicAction.impl); } }
public static void Transform(CivlTypeChecker civlTypeChecker) { var linearTypeChecker = civlTypeChecker.linearTypeChecker; Program program = linearTypeChecker.program; // Store the original declarations of yielding procedures, which will be removed after desugaring below. var origProc = program.TopLevelDeclarations.OfType <Procedure>() .Where(p => civlTypeChecker.procToYieldingProc.ContainsKey(p)); var origImpl = program.TopLevelDeclarations.OfType <Implementation>() .Where(i => civlTypeChecker.procToYieldingProc.ContainsKey(i.Proc)); List <Declaration> originalDecls = Enumerable.Union <Declaration>(origProc, origImpl).ToList(); // Commutativity checks List <Declaration> decls = new List <Declaration>(); if (!CommandLineOptions.Clo.TrustMoverTypes) { MoverCheck.AddCheckers(civlTypeChecker, decls); } // Desugaring of yielding procedures YieldingProcChecker.AddCheckers(civlTypeChecker, decls); // Linear type checks LinearTypeChecker.AddCheckers(civlTypeChecker, decls); if (!CommandLineOptions.Clo.TrustInductiveSequentialization) { InductiveSequentializationChecker.AddCheckers(civlTypeChecker); } PendingAsyncChecker.AddCheckers(civlTypeChecker); foreach (AtomicAction action in civlTypeChecker.procToAtomicAction.Values.Union(civlTypeChecker .procToIsAbstraction.Values)) { action.AddTriggerAssumes(program); } // Remove original declarations and add new checkers generated above program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x)); program.AddTopLevelDeclarations(decls); BackwardAssignmentSubstituter.SubstituteBackwardAssignments(civlTypeChecker.procToAtomicAction.Values); linearTypeChecker.EraseLinearAnnotations(); }
public static void Transform(LinearTypeChecker linearTypeChecker, CivlTypeChecker civlTypeChecker) { List <Declaration> originalDecls = new List <Declaration>(); Program program = linearTypeChecker.program; foreach (var decl in program.TopLevelDeclarations) { Procedure proc = decl as Procedure; if (proc != null && civlTypeChecker.procToActionInfo.ContainsKey(proc)) { originalDecls.Add(proc); continue; } Implementation impl = decl as Implementation; if (impl != null && civlTypeChecker.procToActionInfo.ContainsKey(impl.Proc)) { originalDecls.Add(impl); } } List <Declaration> decls = new List <Declaration>(); if (!CommandLineOptions.Clo.TrustAtomicityTypes) { MoverCheck.AddCheckers(linearTypeChecker, civlTypeChecker, decls); } CivlRefinement.AddCheckers(linearTypeChecker, civlTypeChecker, decls); foreach (AtomicActionInfo info in civlTypeChecker.procToActionInfo.Values.Where(x => x is AtomicActionInfo)) { decls.AddRange(info.triggerFuns.Values); } foreach (Declaration decl in decls) { CivlAttributes.RemoveYieldsAttribute(decl); } program.RemoveTopLevelDeclarations(x => originalDecls.Contains(x)); program.AddTopLevelDeclarations(decls); }