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
public override bool VisitClassDecl(Class @class) public override bool VisitClassDecl(Class @class)
{ {
// Check for C++ operators that cannot be represented in C#. // Check for C++ operators that cannot be represented in C#.
foreach (var @operator in @class.Operators) CheckInvalidOperators(@class);
{
if (!IsValidOperatorOverload(@operator.OperatorKind))
{
Driver.Diagnostics.EmitError(DiagnosticId.InvalidOperatorOverload,
"invalid operator overload");
@operator.ExplicityIgnored = true;
}
}
// The comparison operators, if overloaded, must be overloaded in pairs; // The comparison operators, if overloaded, must be overloaded in pairs;
// that is, if == is overloaded, != must also be overloaded. The reverse // that is, if == is overloaded, != must also be overloaded. The reverse
@ -36,6 +28,20 @@ namespace Cxxi.Passes
return false; 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, static void HandleMissingOperatorOverloadPair(Class @class, CXXOperatorKind op1,
CXXOperatorKind op2) CXXOperatorKind op2)
{ {

Loading…
Cancel
Save