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