Esempio n. 1
0
        public override void VisitApplication(Application appl)
        {
            signature = null;
            appl.Procedure.Accept(this);
            ProcedureSignature sig = signature;

            if (sig != null)
            {
                if (sig.Parameters.Length != appl.Arguments.Length)
                {
                    throw new InvalidOperationException("Parameter count must match.");
                }
            }

            for (int i = 0; i < appl.Arguments.Length; ++i)
            {
                appl.Arguments[i].Accept(this);
                if (sig != null)
                {
                    EnsureTypeVariable(sig.Parameters[i]);
                    store.MergeClasses(appl.Arguments[i].TypeVariable, sig.Parameters[i].TypeVariable);
                }
            }
            EnsureTypeVariable(appl);
        }
Esempio n. 2
0
        public TypeVariable EnsureTypeVariable(Expression e)
        {
            var tv      = store.EnsureExpressionTypeVariable(factory, e);
            var typeref = e.DataType.ResolveAs <TypeReference>();

            if (typeref != null)
            {
                if (this.typeReferenceClasses.TryGetValue(typeref.Name, out var eq))
                {
                    store.MergeClasses(tv, eq.Representative);
                }
                else
                {
                    this.typeReferenceClasses.Add(typeref.Name, tv.Class);
                }
            }
            return(tv);
        }
Esempio n. 3
0
        public void DtbEqClass()
        {
            Identifier id1 = new Identifier("foo", PrimitiveType.Word32, null);
            Identifier id2 = new Identifier("bar", PrimitiveType.Real32, null);

            id1.Accept(eqb);
            id2.Accept(eqb);
            store.MergeClasses(id1.TypeVariable, id2.TypeVariable);

            dtb.DataTypeTrait(id1.TypeVariable, id1.DataType);
            dtb.DataTypeTrait(id2.TypeVariable, id2.DataType);
            dtb.BuildEquivalenceClassDataTypes();

            IList <EquivalenceClass> used = store.UsedEquivalenceClasses;

            Assert.AreEqual(1, used.Count);
            Verify("Typing/DtbEqClass.txt");
        }
Esempio n. 4
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);
            }
        }