static bool IsFloatingPointArguments (Instruction ins, MethodDefinition method) { TypeReference tr = ins.GetOperandType (method); if (tr == null) return false; return tr.IsFloatingPoint (); }
public override void Analyze (MethodDefinition method, MethodReference enter, Instruction ins) { TypeReference type = null; // keep original instruction since this is where we will report the defect Instruction call = ins; switch (enter.Parameters.Count) { case 1: // Monitor.Enter(object) while ((ins.Previous != null) && (type == null)) { ins = ins.Previous; type = ins.GetOperandType (method); } break; case 2: // Monitor.Enter(object, ref bool) <-- new in FX4 and used by CSC10 Instruction first = call.TraceBack (method); if (first.OpCode.Code == Code.Dup) first = first.Previous; type = first.GetOperandType (method); break; } if (type == null) return; // fast check for sealed types string full_name = type.FullName; switch (full_name) { case "System.ExecutionEngineException": case "System.StackOverflowException": case "System.String": case "System.Threading.Thread": Runner.Report (method, call, Severity.High, Confidence.Normal, full_name); break; default: foreach (string unsealed in unsealed_types) { if (!type.Inherits (unsealed)) continue; string msg = String.Format ("'{0}' inherits from '{1}'.", full_name, unsealed); Runner.Report (method, call, Severity.High, Confidence.Normal, msg); } break; } }