Exemplo n.º 1
0
 private void Verify(Program prog, string outputFile)
 {
     store.CopyClassDataTypesToTypeVariables();
     using (FileUnitTester fut = new FileUnitTester(outputFile))
     {
         if (prog != null)
         {
             foreach (Procedure proc in prog.Procedures.Values)
             {
                 proc.Write(false, fut.TextWriter);
                 fut.TextWriter.WriteLine();
             }
         }
         store.Write(fut.TextWriter);
         fut.AssertFilesEqual();
     }
 }
Exemplo n.º 2
0
        public void TystCopyClassToTypes()
        {
            TypeVariable tv1 = store.CreateTypeVariable(factory);
            TypeVariable tv2 = store.CreateTypeVariable(factory);

            Assert.IsNotNull(tv1.Class, "Expected store.EnsureTypeVariable to create an equivalence class");
            Assert.IsNotNull(tv2.Class, "Expected store.EnsureTypeVariable to create an equivalence class");
            EquivalenceClass e = store.MergeClasses(tv1, tv2);

            e.DataType = PrimitiveType.Word16;

            store.CopyClassDataTypesToTypeVariables();
            foreach (TypeVariable tv in store.TypeVariables)
            {
                Assert.IsNotNull(tv.DataType);
            }
        }
Exemplo n.º 3
0
        public void PprReplaceInts()
        {
            var arch    = new FakeArchitecture();
            var program = new Program {
                Architecture = arch, Platform = new DefaultPlatform(null, arch)
            };

            TypeFactory factory = new TypeFactory();

            store = new TypeStore();
            TypeVariable tv1 = store.CreateTypeVariable(factory);
            TypeVariable tv2 = store.CreateTypeVariable(factory);

            Assert.IsNotNull(tv1.Class, "Expected store.EnsureTypeVariable to create equivalence class");
            Assert.IsNotNull(tv2.Class, "Expected store.EnsureTypeVariable to create equivalence class");
            tv1.Class.DataType           = PrimitiveType.Word32;
            tv2.Class.DataType           = PrimitiveType.Word16;
            program.Globals.TypeVariable = store.CreateTypeVariable(factory);
            program.Globals.DataType     = factory.CreateStructureType();

            TypeVariable tv3 = store.CreateTypeVariable(factory);

            Assert.IsNotNull(tv3.Class, "Expected store.EnsureTypeVariable to create equivalence class");

            StructureType mem = factory.CreateStructureType(null, 0);

            mem.Fields.Add(0, tv1);
            mem.Fields.Add(4, tv2);
            tv3.Class.DataType = factory.CreatePointer(mem, 4);

            store.CopyClassDataTypesToTypeVariables();
            TypeVariableReplacer tvr = new TypeVariableReplacer(store);

            tvr.ReplaceTypeVariables();

            var ppr = new PtrPrimitiveReplacer(factory, store, program);

            ppr.ReplaceAll();

            Verify(null, "Typing/PprReplaceInts.txt");
        }
Exemplo n.º 4
0
        private void RunTest(Program prog, string outputFile)
        {
            EquivalenceClassBuilder eqb = new EquivalenceClassBuilder(factory, store);
            DataTypeBuilder         dtb = new DataTypeBuilder(factory, store, prog.Platform);

            eqb.Build(prog);
            TraitCollector trco = new TraitCollector(factory, store, dtb, prog);

            trco.CollectProgramTraits(prog);
            dtb.BuildEquivalenceClassDataTypes();
            var tv = new TypeVariableReplacer(store);

            tv.ReplaceTypeVariables();
            store.CopyClassDataTypesToTypeVariables();
            var ppr = new PtrPrimitiveReplacer(factory, store, prog);

            ppr.ReplaceAll();

            var cpa = new ConstantPointerAnalysis(factory, store, prog);

            cpa.FollowConstantPointers();

            Verify(null, outputFile);
        }