private bool TryMatchInternal(StatementCollection statements, int startIndex, out Statement result) { result = null; if (startIndex + 1 >= statements.get_Count()) { return(false); } if (statements.get_Item(startIndex).get_CodeNodeType() != 5 || statements.get_Item(startIndex + 1).get_CodeNodeType() != 3) { return(false); } V_0 = statements.get_Item(startIndex) as ExpressionStatement; if (V_0.get_Expression().get_CodeNodeType() != 24) { return(false); } V_1 = V_0.get_Expression() as BinaryExpression; if (V_1.get_Left().get_CodeNodeType() != 26 || V_1.get_Right().get_CodeNodeType() != 48) { return(false); } V_2 = V_1.get_Left() as VariableReferenceExpression; V_3 = V_1.get_Right() as EventReferenceExpression; V_4 = statements.get_Item(startIndex + 1) as IfStatement; if (V_4.get_Then() == null || V_4.get_Else() != null || V_4.get_Condition().get_CodeNodeType() != 24) { return(false); } V_5 = V_4.get_Condition() as BinaryExpression; if (V_5.get_Left().get_CodeNodeType() != 26 || V_5.get_Right().get_CodeNodeType() != 22 || V_5.get_Operator() != 10) { return(false); } V_6 = V_5.get_Left() as VariableReferenceExpression; if ((object)V_2.get_Variable() != (object)V_6.get_Variable()) { return(false); } if ((V_5.get_Right() as LiteralExpression).get_Value() != null) { return(false); } V_7 = V_4.get_Then().get_Statements(); if (V_7.get_Count() != 1 || V_7.get_Item(0).get_CodeNodeType() != 5) { return(false); } V_8 = V_7.get_Item(0) as ExpressionStatement; if (V_8.get_Expression().get_CodeNodeType() != 51) { return(false); } V_9 = V_8.get_Expression() as DelegateInvokeExpression; if (V_9.get_Target() == null || V_9.get_Target().get_CodeNodeType() != 26) { return(false); } V_10 = V_9.get_Target() as VariableReferenceExpression; if ((object)V_10.get_Variable() != (object)V_2.get_Variable()) { return(false); } V_11 = new List <Instruction>(); V_11.AddRange(V_0.get_UnderlyingSameMethodInstructions()); V_11.AddRange(V_5.get_UnderlyingSameMethodInstructions()); V_11.AddRange(V_9.get_MappedInstructions()); V_11.AddRange(V_10.get_UnderlyingSameMethodInstructions()); result = new ExpressionStatement(new RaiseEventExpression(V_3.get_Event(), V_9.get_InvokeMethodReference(), V_9.get_Arguments(), V_11)); return(true); }
public static bool TryMatch(BlockStatement filter, out VariableDeclarationExpression variableDeclaration, out Expression filterExpression) { variableDeclaration = null; filterExpression = null; if (!CatchClausesFilterPattern.TryMatchVariableDeclaration(filter, out variableDeclaration)) { return(false); } if (filter.get_Statements().get_Count() != 3) { return(false); } V_0 = filter.get_Statements().get_Item(1) as IfStatement; if (V_0 == null) { return(false); } V_1 = null; V_2 = null; if ((V_0.get_Condition() as BinaryExpression).get_Operator() != 10) { V_1 = V_0.get_Else(); V_2 = V_0.get_Then(); } else { V_1 = V_0.get_Then(); V_2 = V_0.get_Else(); } V_3 = null; V_4 = null; if (V_1.get_Statements().get_Count() != 1 && V_1.get_Statements().get_Count() != 2 && V_1.get_Statements().get_Count() != 3 || V_2.get_Statements().get_Count() != 1) { return(false); } if (V_1.get_Statements().get_Count() != 2) { if (V_1.get_Statements().get_Count() == 3) { V_8 = V_1.get_Statements().get_Item(0) as ExpressionStatement; V_9 = V_1.get_Statements().get_Item(1) as ExpressionStatement; if (V_8 == null || V_9 == null) { return(false); } if (V_8.get_Expression().get_CodeNodeType() != 24 || V_9.get_Expression().get_CodeNodeType() != 19) { if (V_8.get_Expression().get_CodeNodeType() != 19 || V_9.get_Expression().get_CodeNodeType() != 24) { return(false); } V_4 = V_8; V_3 = V_9; } else { V_3 = V_8; V_4 = V_9; } } } else { V_7 = V_1.get_Statements().get_Item(0) as ExpressionStatement; if (V_7 == null) { return(false); } if (V_7.get_Expression().get_CodeNodeType() != 24) { if (V_7.get_Expression().get_CodeNodeType() != 19) { return(false); } V_4 = V_7; } else { V_3 = V_7; } } if (V_3 != null) { V_10 = V_3.get_Expression() as BinaryExpression; if (V_10 == null || !V_10.get_IsAssignmentExpression() || String.op_Inequality(V_10.get_ExpressionType().get_FullName(), variableDeclaration.get_ExpressionType().get_FullName())) { return(false); } stackVariable98 = V_10.get_Left() as VariableReferenceExpression; V_11 = V_10.get_Right() as VariableReferenceExpression; if (stackVariable98 == null || V_11 == null) { return(false); } } if (V_4 != null) { V_12 = V_4.get_Expression() as MethodInvocationExpression; if (V_12 == null || String.op_Inequality(V_12.get_MethodExpression().get_Method().get_FullName(), "System.Void Microsoft.VisualBasic.CompilerServices.ProjectData::SetProjectError(System.Exception)")) { return(false); } } V_5 = filter.get_Statements().get_Item(2) as ExpressionStatement; if (V_5 == null) { return(false); } V_6 = V_5.get_Expression() as VariableReferenceExpression; if (V_6 == null) { return(false); } if (!CatchClausesFilterPattern.TryMatchFilterExpression(V_0, variableDeclaration.get_Variable().get_VariableType(), V_6, out filterExpression)) { return(false); } return(true); }