示例#1
0
        public void OperandsAreAccessibleTest( )
        {
            const int CompositeTypeOperandCount = 9;
            var       targetMachine             = TargetTests.GetTargetMachine( );

            using var ctx    = new Context( );
            using var module = ctx.CreateBitcodeModule("test.bc", SourceLanguage.C99, "test.c", "unit-tests");
            module.Layout    = targetMachine.TargetData;
            var intType   = new DebugBasicType(module.Context.Int32Type, module, "int", DiTypeKind.Signed);
            var arrayType = new DebugArrayType(intType, module, 3u);

            Assert.IsNotNull(arrayType);

            DICompositeType?mdnode = arrayType.DIType;

            Assert.IsNotNull(mdnode);
            Assert.IsNotNull(mdnode !.Operands);
            Assert.AreEqual(CompositeTypeOperandCount, mdnode.Operands.Count);

            Assert.IsNull(mdnode.File);
            Assert.IsNull(mdnode.Operands[0]);

            Assert.IsNull(mdnode.Scope);
            Assert.IsNull(mdnode.Operands[1]);

            Assert.IsTrue(string.IsNullOrEmpty(mdnode.Name));
            Assert.IsNull(mdnode.Operands[2]);

            Assert.IsNotNull(mdnode.BaseType);
            Assert.IsNotNull(mdnode.Operands[3]);

            Assert.IsNotNull(mdnode.Elements);
            Assert.IsNotNull(mdnode.Operands[4]);
            Assert.AreEqual(1, mdnode.Elements.Count);
            Assert.AreEqual(1, mdnode.Elements.Count);
            var subRange = mdnode.Elements[0] as DISubRange;

            Assert.IsNotNull(subRange);

            /* TODO: Test non-operand properties when available
             * // Assert.AreEqual( 0, subRange.LowerBound );
             * // Assert.AreEqual( 3, subRange.Length );
             */

            Assert.IsNull(mdnode.VTableHolder);
            Assert.IsNull(mdnode.Operands[5]);

            Assert.IsNull(mdnode.TemplateParameters);
            Assert.IsNull(mdnode.Operands[6]);

            Assert.IsTrue(string.IsNullOrEmpty(mdnode.Identifier));
            Assert.IsNull(mdnode.Operands[7]);

            Assert.IsNull(mdnode.Discriminator);
            Assert.IsNull(mdnode.Operands[8]);

            Assert.AreSame(intType.DIType, mdnode.BaseType);
        }
示例#2
0
        public void OperandsAreAccessibleTest()
        {
            using (var ctx = new Context( ))
                using (var module = new BitcodeModule(ctx, "test.bc", SourceLanguage.CSharp, "test.cs", "unittests"))
                    using (var targetMachine = TargetTests.GetTargetMachine( ))
                    {
                        module.Layout = targetMachine.TargetData;
                        var intType   = new DebugBasicType(module.Context.Int32Type, module, "int", DiTypeKind.Signed);
                        var arrayType = new DebugArrayType(intType, module, 3u);
                        Assert.IsNotNull(arrayType);

                        var mdnode = arrayType.DIType as DICompositeType;
                        Assert.IsNotNull(mdnode.Operands);
                        Assert.AreEqual(8, mdnode.Operands.Count);

                        Assert.IsNotNull(mdnode.Operands[0]); // File
                        Assert.AreSame(mdnode, mdnode.Operands[0].OwningNode);
                        Assert.IsNull(mdnode.Operands[0].Metadata);

                        Assert.IsNotNull(mdnode.Operands[1]); // Scope
                        Assert.AreSame(mdnode, mdnode.Operands[1].OwningNode);
                        Assert.IsNull(mdnode.Operands[1].Metadata);

                        Assert.IsNotNull(mdnode.Operands[2]); // Name
                        Assert.AreSame(mdnode, mdnode.Operands[2].OwningNode);
                        Assert.IsNull(mdnode.Operands[2].Metadata);

                        Assert.IsNotNull(mdnode.Operands[3]); // BaseType
                        Assert.AreSame(mdnode, mdnode.Operands[3].OwningNode);
                        Assert.IsNotNull(mdnode.Operands[3].Metadata);

                        Assert.IsNotNull(mdnode.Operands[4]); // Elements
                        Assert.AreSame(mdnode, mdnode.Operands[4].OwningNode);
                        Assert.IsNotNull(mdnode.Operands[4].Metadata);

                        Assert.IsNotNull(mdnode.Operands[5]); // VTableHolder
                        Assert.AreSame(mdnode, mdnode.Operands[5].OwningNode);
                        Assert.IsNull(mdnode.Operands[5].Metadata);

                        Assert.IsNotNull(mdnode.Operands[6]); // TemplateParams
                        Assert.AreSame(mdnode, mdnode.Operands[6].OwningNode);
                        Assert.IsNull(mdnode.Operands[6].Metadata);

                        Assert.IsNotNull(mdnode.Operands[7]); // Identifier
                        Assert.AreSame(mdnode, mdnode.Operands[7].OwningNode);
                        Assert.IsNull(mdnode.Operands[7].Metadata);

                        Assert.AreSame(intType.DIType, mdnode.BaseType);
                        Assert.AreEqual(1, mdnode.Elements.Count);
                        var subRange = mdnode.Elements[0] as DISubRange;
                        Assert.IsNotNull(subRange);
                    }
        }