コード例 #1
0
        public void GetReadParametersInInstanceContextShouldStartAtThisParameter()
        {
            var module = ModuleDefinition.FromFile(typeof(TestClass).Assembly.Location);
            var type   = (TypeDefinition)module.LookupMember(typeof(TestClass).MetadataToken);
            var method = type.Methods
                         .First(m => m.Name == nameof(TestClass.InstanceMethod));

            var architecture = new CilArchitecture(method.CilMethodBody);

            var readVariables = new IVariable[1];

            architecture.GetReadVariables(new CilInstruction(CilOpCodes.Ldarg_0), readVariables);

            Assert.Equal(new[] { method.Parameters.ThisParameter }, readVariables
                         .Cast <CilParameter>()
                         .Select(p => p.Parameter));

            architecture.GetReadVariables(new CilInstruction(CilOpCodes.Ldarg_1), readVariables);
            Assert.Equal(new[] { method.Parameters[0] }, readVariables
                         .Cast <CilParameter>()
                         .Select(p => p.Parameter));
        }
コード例 #2
0
        public void LdArgInstructionShouldMatchReadParameter(string name, string parameterName, int index)
        {
            var method = Helpers.GetTestMethod(typeof(TestClass), name);
            var arch   = new CilArchitecture(method);

            var param           = method.Parameters[index];
            var testInstruction = Instruction.Create(OpCodes.Ldarg, param);

            var readVariables = new IVariable[1];

            arch.GetReadVariables(testInstruction, readVariables);

            Assert.Equal(parameterName, readVariables[0].Name);
        }