|
|
|
|
@ -10,15 +10,7 @@ namespace Cxxi.Passes
@@ -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
@@ -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) |
|
|
|
|
{ |
|
|
|
|
|