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); }
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); } }