public static List<TypeDefinition> GetBaseTypes(this TypeDefinition targetType) { V_0 = new List<TypeDefinition>(); if (targetType == null) { return V_0; } V_0.Add(targetType); V_1 = 0; while (V_1 < V_0.get_Count()) { stackVariable10 = V_0.get_Item(V_1); V_2 = stackVariable10.get_BaseType(); if (V_2 != null) { V_3 = V_2.Resolve(); if (V_3 != null) { V_0.Add(V_3); } } V_4 = stackVariable10.get_Interfaces().GetEnumerator(); try { while (V_4.MoveNext()) { V_5 = V_4.get_Current(); if (V_5 == null) { continue; } V_6 = V_5.Resolve(); if (V_6 == null) { continue; } V_0.Add(V_6); } } finally { V_4.Dispose(); } V_1 = V_1 + 1; } return V_0; }
public override void VisitBinaryExpression(BinaryExpression node) { V_0 = this.GetExpressionTypeName(node.get_Left()); V_1 = this.GetExpressionTypeName(node.get_Right()); this.VisitBinaryExpression(node); if (String.op_Inequality(this.GetExpressionTypeName(node.get_Left()), V_0)) { stackVariable16 = true; } else { stackVariable16 = String.op_Inequality(this.GetExpressionTypeName(node.get_Right()), V_1); } V_2 = stackVariable16; if (node.get_IsAssignmentExpression() || node.get_IsSelfAssign() && !node.get_IsEventHandlerAddOrRemove()) { V_3 = node.get_Left(); V_4 = node.get_Right(); if (V_4.get_HasType() && V_3.get_HasType()) { V_5 = V_3.get_ExpressionType(); V_6 = V_4.get_ExpressionType().Resolve(); if (this.ShouldAddCast(V_6, V_5)) { node.set_Right(new ExplicitCastExpression(V_4, V_5, null)); V_2 = true; } V_7 = V_5.Resolve(); if (V_7 != null && V_6 != null && V_7.get_IsEnum() && V_6.get_IsValueType() && String.op_Inequality(V_7.get_FullName(), V_6.get_FullName())) { node.set_Right(new ExplicitCastExpression(V_4, V_5, null)); V_2 = true; } } } else { if (!this.IsArithmeticOperator(node.get_Operator())) { if (this.IsBitwiseOperator(node.get_Operator()) || node.get_IsComparisonExpression()) { V_10 = node.get_Left(); V_11 = node.get_Right(); if (V_11.get_HasType() && V_10.get_HasType()) { V_12 = V_10.get_ExpressionType(); V_13 = V_11.get_ExpressionType().Resolve(); if (this.ShouldAddCast(V_13, V_12)) { node.set_Right(new ExplicitCastExpression(V_11, V_12, null)); V_2 = true; } V_14 = V_11.get_ExpressionType(); V_15 = V_10.get_ExpressionType().Resolve(); if (this.ShouldAddCast(V_15, V_14)) { node.set_Left(new ExplicitCastExpression(V_10, V_14, null)); V_2 = true; } if (V_15 != null && V_15.get_IsEnum() && V_13 != null && V_13.get_IsEnum() && String.op_Inequality(V_15.get_FullName(), V_13.get_FullName())) { node.set_Left(new ExplicitCastExpression(V_10, this.GetEnumUnderlyingType(V_15), null)); node.set_Right(new ExplicitCastExpression(V_11, this.GetEnumUnderlyingType(V_15), null)); V_2 = true; } } } else { if (this.IsShiftOperator(node.get_Operator())) { if (node.get_Left().get_HasType()) { V_16 = node.get_Left().get_ExpressionType().Resolve(); if (V_16 != null && V_16.get_IsEnum()) { node.set_Left(new ExplicitCastExpression(node.get_Left(), this.GetEnumUnderlyingType(V_16), null)); V_2 = true; } } if (node.get_Right().get_HasType()) { V_17 = node.get_Right().get_ExpressionType().Resolve(); if (V_17 != null && V_17.get_IsEnum()) { node.set_Right(new ExplicitCastExpression(node.get_Right(), this.GetEnumUnderlyingType(V_17), null)); V_2 = true; } } } } } else { if (node.get_Left().get_HasType()) { V_8 = node.get_Left().get_ExpressionType().Resolve(); if (V_8 != null && V_8.get_IsEnum()) { node.set_Left(new ExplicitCastExpression(node.get_Left(), this.GetEnumUnderlyingType(V_8), null)); V_2 = true; } } if (node.get_Right().get_HasType()) { V_9 = node.get_Right().get_ExpressionType().Resolve(); if (V_9 != null && V_9.get_IsEnum()) { node.set_Right(new ExplicitCastExpression(node.get_Right(), this.GetEnumUnderlyingType(V_9), null)); V_2 = true; } } } } if (V_2) { node.UpdateType(); } return; }