Esempio n. 1
0
        internal static bool IsCompilerGeneratorEnumerator(this MethodDeclaration methodDeclaration, ref Lambda.Method methodBlock)
        {
            var methodDefinition = methodDeclaration.Annotation <MethodDefinition>();
            var candidateNewObj  = methodDefinition.Body.Instructions[1];

            if (candidateNewObj.OpCode.Equals(OpCodes.Newobj))
            {
                var memberReference = candidateNewObj.Operand as Mono.Cecil.MethodReference;

                if (memberReference != null)
                {
                    var constructorInfo = memberReference.GetActualMethod <ConstructorInfo>();

                    if (constructorInfo != null && constructorInfo.DeclaringType.IsCompilerGenerated() && IsEnumerator(methodDefinition))
                    {
                        Instruction initializer = methodDefinition.Body.Instructions[0];

                        methodBlock = new Lambda.CompilerGeneratedEnumerator(initializer, candidateNewObj);
                        return(true);
                    }
                }
            }

            return(false);
        }
 protected internal Expression VisitCompilerGeneratedEnumerator(CompilerGeneratedEnumerator enumerator) {
     return enumerator.Update(enumerator.Enumerator);
 }