private bool CheckFieldCaching(IfStatement theIf)
 {
     V_0 = theIf.get_Condition() as BinaryExpression;
     if (V_0.get_Operator() != 9 || V_0.get_Right().get_CodeNodeType() != 22 || (V_0.get_Right() as LiteralExpression).get_Value() != null)
     {
         return(false);
     }
     V_1 = (V_0.get_Left() as FieldReferenceExpression).get_Field().Resolve();
     if (V_1 == null || !V_1.get_IsStatic() || !V_1.get_IsPrivate())
     {
         return(false);
     }
     V_2 = (theIf.get_Then().get_Statements().get_Item(0) as ExpressionStatement).get_Expression() as BinaryExpression;
     if (V_2 == null || !V_2.get_IsAssignmentExpression() || V_2.get_Left().get_CodeNodeType() != 30 || (object)(V_2.get_Left() as FieldReferenceExpression).get_Field().Resolve() != (object)V_1)
     {
         return(false);
     }
     if (this.fieldToReplacingExpressionMap.ContainsKey(V_1))
     {
         throw new Exception("A caching field cannot be assigned more than once.");
     }
     if (!V_1.IsCompilerGenerated(true))
     {
         return(false);
     }
     V_3 = V_1.get_FieldType().Resolve();
     if (V_3 == null || V_3.get_BaseType() == null || String.op_Inequality(V_3.get_BaseType().get_FullName(), "System.MulticastDelegate"))
     {
         return(false);
     }
     this.fieldToReplacingExpressionMap.set_Item(V_1, V_2.get_Right());
     return(true);
 }
Пример #2
0
 protected virtual void BuildUpHardNodesHierarchy(IEnumerable <ClassHierarchyNode> hardNodes)
 {
     V_0 = new Queue <ClassHierarchyNode>(hardNodes);
     V_1 = new HashSet <ClassHierarchyNode>();
     while (V_0.get_Count() > 0)
     {
         V_2       = V_0.Dequeue();
         dummyVar0 = V_1.Add(V_2);
         dummyVar1 = this.resultingGraph.Add(V_2);
         V_3       = V_2.get_NodeType().Resolve();
         V_4       = null;
         if (V_3 == null)
         {
             continue;
         }
         V_4 = V_3.get_BaseType();
         if (V_4 != null)
         {
             V_5 = this.GetTypeNode(V_4);
             V_2.AddSupertype(V_5);
             if (!V_1.Contains(V_5))
             {
                 V_0.Enqueue(V_5);
             }
         }
         if (V_3.get_IsInterface())
         {
             V_2.AddSupertype(this.GetTypeNode(this.typeSystem.get_Object()));
         }
         V_7 = V_2.get_NodeType().Resolve().get_Interfaces().GetEnumerator();
         try
         {
             while (V_7.MoveNext())
             {
                 V_8 = V_7.get_Current();
                 V_9 = this.GetTypeNode(V_8);
                 V_2.AddSupertype(V_9);
                 if (V_1.Contains(V_9))
                 {
                     continue;
                 }
                 V_0.Enqueue(V_9);
             }
         }
         finally
         {
             if (V_7 != null)
             {
                 V_7.Dispose();
             }
         }
     }
     this.AddObjectClassNodeIfMIssing();
     return;
 }
		public static bool IsCompilerGeneratedDelegate(this FieldReference fieldReference)
		{
			if (!fieldReference.get_IsDefinition())
			{
				V_0 = fieldReference.Resolve();
			}
			else
			{
				V_0 = (FieldDefinition)fieldReference;
			}
			if (V_0 == null)
			{
				return false;
			}
			V_1 = V_0.IsCompilerGenerated(true);
			if (!V_0.get_FieldType().get_IsDefinition())
			{
				V_3 = V_0.get_FieldType().Resolve();
			}
			else
			{
				V_3 = (TypeDefinition)V_0.get_FieldType();
			}
			if (V_3 == null)
			{
				V_2 = null;
			}
			else
			{
				V_2 = V_3.get_BaseType();
			}
			if (!V_1 || V_2 == null)
			{
				return false;
			}
			return String.op_Equality(V_2.get_FullName(), Type.GetTypeFromHandle(// 
			// Current member / type: System.Boolean Mono.Cecil.Extensions.FieldReferenceExtensions::IsCompilerGeneratedDelegate(Mono.Cecil.FieldReference)
			// Exception in: System.Boolean IsCompilerGeneratedDelegate(Mono.Cecil.FieldReference)
			// Specified method is not supported.
			// 
			// mailto: [email protected]

	}
 private bool CheckVariableInitialization(ExpressionStatement node)
 {
     if (!node.IsAssignmentStatement())
     {
         return(false);
     }
     V_0 = node.get_Expression() as BinaryExpression;
     if (V_0.get_Left().get_CodeNodeType() != 26)
     {
         return(false);
     }
     V_1 = V_0.get_Right();
     if (V_1.get_CodeNodeType() == 31)
     {
         V_1 = (V_1 as ExplicitCastExpression).get_Expression();
     }
     if (V_1.get_CodeNodeType() != 22 || (V_1 as LiteralExpression).get_Value() != null && V_1.get_CodeNodeType() != 30)
     {
         return(false);
     }
     if (V_1.get_CodeNodeType() == 30)
     {
         V_2 = V_1 as FieldReferenceExpression;
         V_3 = V_2.get_ExpressionType().Resolve();
         if (V_3 == null || V_3.get_BaseType() == null || String.op_Inequality(V_3.get_BaseType().get_FullName(), "System.MulticastDelegate"))
         {
             return(false);
         }
         V_4 = V_2.get_Field().Resolve();
         if ((object)V_4.get_DeclaringType() != (object)this.context.get_MethodContext().get_Method().get_DeclaringType() && !V_4.get_DeclaringType().IsNestedIn(this.context.get_MethodContext().get_Method().get_DeclaringType()) || !V_4.get_DeclaringType().IsCompilerGenerated())
         {
             return(false);
         }
     }
     this.initializationsToRemove.set_Item((V_0.get_Left() as VariableReferenceExpression).get_Variable(), node);
     return(true);
 }