From af8b8632860ba6e0e9f40835d27a6fdc5e55d132 Mon Sep 17 00:00:00 2001 From: triton Date: Tue, 9 Apr 2013 23:27:24 +0100 Subject: [PATCH] Extract the operator checking code into its own method. --- .../Passes/CheckOperatorsOverloads.cs | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Generator/Passes/CheckOperatorsOverloads.cs b/src/Generator/Passes/CheckOperatorsOverloads.cs index 032ebb53..0c0bde8a 100644 --- a/src/Generator/Passes/CheckOperatorsOverloads.cs +++ b/src/Generator/Passes/CheckOperatorsOverloads.cs @@ -10,15 +10,7 @@ namespace Cxxi.Passes public override bool VisitClassDecl(Class @class) { // Check for C++ operators that cannot be represented in C#. - foreach (var @operator in @class.Operators) - { - if (!IsValidOperatorOverload(@operator.OperatorKind)) - { - Driver.Diagnostics.EmitError(DiagnosticId.InvalidOperatorOverload, - "invalid operator overload"); - @operator.ExplicityIgnored = true; - } - } + CheckInvalidOperators(@class); // The comparison operators, if overloaded, must be overloaded in pairs; // that is, if == is overloaded, != must also be overloaded. The reverse @@ -36,6 +28,20 @@ namespace Cxxi.Passes return false; } + private void CheckInvalidOperators(Class @class) + { + foreach (var @operator in @class.Operators) + { + if (!IsValidOperatorOverload(@operator.OperatorKind)) + { + Driver.Diagnostics.EmitError(DiagnosticId.InvalidOperatorOverload, + "Invalid operator overload {0}::{1}", + @class.OriginalName, @operator.OperatorKind); + @operator.ExplicityIgnored = true; + } + } + } + static void HandleMissingOperatorOverloadPair(Class @class, CXXOperatorKind op1, CXXOperatorKind op2) {