Browse Source

Extract the operator checking code into its own method.

pull/1/head
triton 13 years ago
parent
commit
af8b863286
  1. 24
      src/Generator/Passes/CheckOperatorsOverloads.cs

24
src/Generator/Passes/CheckOperatorsOverloads.cs

@ -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)
{

Loading…
Cancel
Save