コード例 #1
0
        private void TransformImpl(Implementation originalImpl, Implementation impl)
        {
            // initialize globalSnapshotInstrumentation
            globalSnapshotInstrumentation = new GlobalSnapshotInstrumentation(civlTypeChecker);

            // initialize refinementInstrumentation
            YieldingProc yieldingProc = civlTypeChecker.procToYieldingProc[originalImpl.Proc];

            if (yieldingProc.upperLayer == this.layerNum)
            {
                if (yieldingProc is ActionProc)
                {
                    refinementInstrumentation = new ActionRefinementInstrumentation(
                        civlTypeChecker,
                        impl,
                        originalImpl,
                        globalSnapshotInstrumentation.OldGlobalMap);
                }
                else
                {
                    refinementInstrumentation = new SkipRefinementInstrumentation(
                        civlTypeChecker,
                        yieldingProc,
                        globalSnapshotInstrumentation.OldGlobalMap);
                }
            }
            else
            {
                refinementInstrumentation = new RefinementInstrumentation();
            }

            var allYieldPredicates = CollectYields(impl);

            // initialize noninterferenceInstrumentation
            if (CommandLineOptions.Clo.TrustNonInterference)
            {
                noninterferenceInstrumentation = new NoneNoninterferenceInstrumentation();
            }
            else
            {
                noninterferenceCheckerDecls.AddRange(
                    NoninterferenceChecker.CreateNoninterferenceCheckers(civlTypeChecker, linearTypeChecker, layerNum, absyMap, impl, allYieldPredicates));
                noninterferenceInstrumentation = new SomeNoninterferenceInstrumentation(
                    civlTypeChecker,
                    linearTypeChecker,
                    linearPermissionInstrumentation,
                    globalSnapshotInstrumentation.OldGlobalMap,
                    wrapperNoninterferenceCheckerProc);
            }

            DesugarConcurrency(impl, allYieldPredicates);

            impl.LocVars.AddRange(globalSnapshotInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(refinementInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(noninterferenceInstrumentation.NewLocalVars);
        }
コード例 #2
0
        private void TransformImpl(Implementation impl)
        {
            HashSet <Block> yieldingLoopHeaders;
            Graph <Block>   graph = ComputeYieldingLoopHeaders(impl, out yieldingLoopHeaders);

            // initialize globalSnapshotInstrumentation
            globalSnapshotInstrumentation = new GlobalSnapshotInstrumentation(civlTypeChecker);

            // initialize refinementInstrumentation
            Procedure    originalProc = implMap[impl].Proc;
            YieldingProc yieldingProc = civlTypeChecker.procToYieldingProc[originalProc];

            if (yieldingProc.upperLayer == this.layerNum)
            {
                refinementInstrumentation = new SomeRefinementInstrumentation(
                    civlTypeChecker,
                    impl,
                    originalProc,
                    globalSnapshotInstrumentation.OldGlobalMap,
                    yieldingLoopHeaders);
            }
            else
            {
                refinementInstrumentation = new NoneRefinementInstrumentation();
            }

            // initialize noninterferenceInstrumentation
            if (CommandLineOptions.Clo.TrustNonInterference)
            {
                noninterferenceInstrumentation = new NoneNoninterferenceInstrumentation();
            }
            else
            {
                noninterferenceInstrumentation = new SomeNoninterferenceInstrumentation(civlTypeChecker,
                                                                                        linearTypeChecker,
                                                                                        layerNum, absyMap, globalSnapshotInstrumentation.OldGlobalMap, yieldProc);
            }

            DesugarConcurrency(impl, graph, yieldingLoopHeaders);

            impl.LocVars.AddRange(globalSnapshotInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(refinementInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(noninterferenceInstrumentation.NewLocalVars);
        }
コード例 #3
0
        private void TransformImpl(Implementation impl, List <Cmd> preconditions)
        {
            // initialize globalSnapshotInstrumentation
            globalSnapshotInstrumentation = new GlobalSnapshotInstrumentation(civlTypeChecker);

            // initialize refinementInstrumentation
            var yieldingProc = GetYieldingProc(impl);

            if (yieldingProc.upperLayer == this.layerNum)
            {
                refinementInstrumentation = new ActionRefinementInstrumentation(
                    civlTypeChecker,
                    impl,
                    (Implementation)absyMap[impl],
                    globalSnapshotInstrumentation.OldGlobalMap);
            }
            else
            {
                refinementInstrumentation = new RefinementInstrumentation();
            }

            // initialize noninterferenceInstrumentation
            if (CommandLineOptions.Clo.TrustNoninterference)
            {
                noninterferenceInstrumentation = new NoneNoninterferenceInstrumentation();
            }
            else
            {
                noninterferenceInstrumentation = new SomeNoninterferenceInstrumentation(
                    civlTypeChecker,
                    linearTypeChecker,
                    linearPermissionInstrumentation,
                    globalSnapshotInstrumentation.OldGlobalMap,
                    wrapperNoninterferenceCheckerProc);
            }

            DesugarConcurrency(impl, preconditions);

            impl.LocVars.AddRange(globalSnapshotInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(refinementInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(noninterferenceInstrumentation.NewLocalVars);
        }
コード例 #4
0
        private void TransformImpl(Implementation impl, List <Cmd> preconditions)
        {
            // initialize refinementInstrumentation
            var yieldingProc = GetYieldingProc(impl);

            if (yieldingProc.upperLayer == this.layerNum)
            {
                refinementInstrumentation = new ActionRefinementInstrumentation(
                    civlTypeChecker,
                    impl,
                    absyMap.Original(impl),
                    globalSnapshotInstrumentation.OldGlobalMap);
            }
            else
            {
                refinementInstrumentation = new RefinementInstrumentation();
            }

            DesugarConcurrency(impl, preconditions);

            impl.LocVars.AddRange(globalSnapshotInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(refinementInstrumentation.NewLocalVars);
            impl.LocVars.AddRange(noninterferenceInstrumentation.NewLocalVars);
        }