コード例 #1
0
        public void AddDefinedTypeTest3()
        {
            NativeSymbolBag bag        = new NativeSymbolBag();
            NativeStruct    definedNt1 = new NativeStruct("s1");
            NativeStruct    definedNt2 = new NativeStruct("s1");

            bag.AddDefinedType(definedNt1);
            Assert.Throws <ArgumentException>(() => bag.AddDefinedType(definedNt2));
        }
コード例 #2
0
        public CodeTypeDeclarationCollection ConvertToCodeDom(NativeDefinedType definedNt, ErrorProvider ep)
        {
            NativeSymbolBag bag = new NativeSymbolBag(_storage);

            bag.AddDefinedType(definedNt);
            return(ConvertBagToCodeDom(bag, ep));
        }
コード例 #3
0
        public void Iterate3()
        {
            NativeStruct nt1 = new NativeStruct();

            nt1.Name = "s1";

            NativeStruct nt2 = new NativeStruct();

            nt2.Name = "s2";

            NativeSymbolBag bag = new NativeSymbolBag();

            bag.AddDefinedType(nt1);
            bag.AddDefinedType(nt2);
            VerifyReachable(bag, "s1", "s2");
        }
コード例 #4
0
        public void AddDefinedTypeTest2()
        {
            NativeSymbolBag bag        = new NativeSymbolBag();
            NativeStruct    definedNt1 = new NativeStruct("s1");
            NativeStruct    definedNt2 = new NativeStruct("s2");

            bag.AddDefinedType(definedNt1);
            bag.AddDefinedType(definedNt2);

            NativeType ret1 = null;
            NativeType ret2 = null;

            Assert.True(bag.TryGetType(definedNt1.DisplayName, out ret1));
            Assert.True(bag.TryGetType(definedNt2.DisplayName, out ret2));
            Assert.Same(ret1, definedNt1);
            Assert.Same(ret2, definedNt2);
        }
コード例 #5
0
        public void Invalid2()
        {
            NativeSymbolBag bag = new NativeSymbolBag(StorageFactory.CreateStandard());
            NativeEnum      e1  = new NativeEnum("e1");

            e1.AddValue("v1", "(S1)5");
            bag.AddDefinedType(e1);
            VerifyEnumValue(bag, e1, "v1", "\"(S1)5\"");
        }
コード例 #6
0
        public void Value2()
        {
            NativeSymbolBag bag    = new NativeSymbolBag();
            NativeEnum      ntEnum = new NativeEnum("Enum1");

            ntEnum.AddValue("v1", "1");
            ntEnum.AddValue("v2", "v1+1");
            bag.AddDefinedType(ntEnum);
            Assert.Equal(1, bag.FindUnresolvedNativeValues().Count);
            Assert.True(bag.TryResolveSymbolsAndValues());
        }
コード例 #7
0
        public void Gen4()
        {
            NativeSymbolBag bag = new NativeSymbolBag();

            bag.AddConstant(new NativeConstant("C1", "42"));
            NativeEnum e1 = new NativeEnum("e1");

            e1.AddValue("v1", "C1+2");
            bag.AddDefinedType(e1);
            VerifyEnumValue(bag, e1, "v1", string.Format("({0}.C1 + 2)", TransformConstants.NativeConstantsName));
        }
コード例 #8
0
        public void AnonymousType1()
        {
            NativeStruct nt = new NativeStruct();

            nt.IsAnonymous = true;
            Assert.False(string.IsNullOrEmpty(nt.Name));

            NativeSymbolBag bag = new NativeSymbolBag();

            bag.AddDefinedType(nt);
            Assert.True(NativeSymbolBag.IsAnonymousName(nt.Name));
        }
コード例 #9
0
        public void FindOrLoad5()
        {
            NativeSymbolBag bag = new NativeSymbolBag();

            bag.AddTypeDef(new NativeTypeDef("foo", new NativeNamedType("struct", "foo")));
            bag.AddDefinedType(new NativeStruct("foo"));

            NativeType nt = null;

            Assert.True(bag.TryResolveNamedType(new NativeNamedType("struct", "foo"), out nt));
            Assert.Equal(NativeSymbolKind.StructType, nt.Kind);
        }
コード例 #10
0
        public void Value3()
        {
            NativeSymbolBag bag       = new NativeSymbolBag();
            NativeStruct    ntStruct1 = new NativeStruct("s1");

            bag.AddDefinedType(ntStruct1);

            NativeConstant ntConst1 = new NativeConstant("c1", "(s1)1");

            bag.AddConstant(ntConst1);

            Assert.Equal(1, bag.FindUnresolvedNativeValues().Count);
            Assert.True(bag.TryResolveSymbolsAndValues());
        }
コード例 #11
0
        public void Resolve1()
        {
            NativeSymbolBag bag = new NativeSymbolBag();
            NativeStruct    s1  = new NativeStruct("s1");

            bag.AddDefinedType(s1);

            NativeTypeDef   td1 = new NativeTypeDef("td1");
            NativeNamedType n1  = new NativeNamedType("s1");

            td1.RealType = n1;
            bag.AddTypeDef(td1);

            Assert.True(bag.TryResolveSymbolsAndValues());
            Assert.Same(s1, n1.RealType);
        }
コード例 #12
0
        /// <summary>
        /// Make sure that any NativeDefinedType referenced is in the bag.  That way if we
        /// have structures which point to other NativeDefinedType instances, they are automagically
        /// put into the bag
        /// </summary>
        /// <param name="bag"></param>
        /// <remarks></remarks>
        private void ChaseReferencedDefinedTypes(NativeSymbolBag bag)
        {
            bag.TryResolveSymbolsAndValues();

            foreach (NativeSymbol sym in bag.FindAllReachableNativeSymbols())
            {
                if (NativeSymbolCategory.Defined == sym.Category)
                {
                    NativeDefinedType defined = null;
                    if (!bag.TryGetGlobalSymbol(sym.Name, out defined))
                    {
                        bag.AddDefinedType((NativeDefinedType)sym);
                    }
                }
            }
        }
コード例 #13
0
        public void ValueFromStorage2()
        {
            var ns  = new BasicSymbolStorage();
            var bag = new NativeSymbolBag(ns);

            NativeEnum ntEnum = new NativeEnum("e1");

            ntEnum.AddValue("v1", "5");
            bag.AddDefinedType(ntEnum);

            NativeConstant ntConst1 = new NativeConstant("c1", "5+v1");

            bag.AddConstant(ntConst1);

            Assert.Equal(1, bag.FindUnresolvedNativeValues().Count);
            Assert.True(bag.TryResolveSymbolsAndValues());
        }
コード例 #14
0
        public void AddMixed2()
        {
            NativeSymbolBag bag        = new NativeSymbolBag();
            NativeStruct    definedNt1 = new NativeStruct("s1");

            bag.AddDefinedType(definedNt1);
            NativeTypeDef td1 = new NativeTypeDef("s1");

            bag.AddTypeDef(td1);

            NativeType ret = null;

            Assert.True(bag.TryGetType(definedNt1.DisplayName, out ret));
            Assert.Same(definedNt1, ret);
            Assert.True(bag.TryGetType(td1.DisplayName, out ret));
            Assert.Same(definedNt1, ret);
        }
コード例 #15
0
        public void ResolveLoad2()
        {
            var ns = new BasicSymbolStorage();

            ns.AddTypeDef(new NativeTypeDef("TEST_INT", BuiltinType.NativeInt32));

            NativeStruct s1 = new NativeStruct("s1");

            s1.Members.Add(new NativeMember("m1", new NativeNamedType("TEST_INT")));

            NativeSymbolBag bag = new NativeSymbolBag(ns);

            bag.AddDefinedType(s1);
            Assert.True(bag.TryResolveSymbolsAndValues());

            NativeTypeDef td = null;

            Assert.True(bag.TryGetGlobalSymbol("TEST_INT", out td));
        }
コード例 #16
0
        private void VerifyReachable(NativeType nt, params string[] names)
        {
            NativeSymbolBag bag = new NativeSymbolBag();

            NativeDefinedType definedNt = nt as NativeDefinedType;
            NativeTypeDef     typedefNt = nt as NativeTypeDef;

            if (definedNt != null)
            {
                bag.AddDefinedType((NativeDefinedType)nt);
            }
            else if (typedefNt != null)
            {
                bag.AddTypeDef((NativeTypeDef)nt);
            }
            else
            {
                throw new Exception("Not a searchable type");
            }

            VerifyReachable(bag, names);
        }