Browse Source

Merge pull request #39 from ddobrev/master

Corrected the overloading of << and >> by making sure the second parameter is implicitly convertible to int
pull/40/merge
João Matos 12 years ago
parent
commit
e2bd832697
  1. 14
      src/Generator/Passes/CheckOperatorsOverloads.cs

14
src/Generator/Passes/CheckOperatorsOverloads.cs

@ -43,7 +43,7 @@ namespace CppSharp.Passes @@ -43,7 +43,7 @@ namespace CppSharp.Passes
{
foreach (var @operator in @class.Operators)
{
if (!IsValidOperatorOverload(@operator.OperatorKind))
if (!IsValidOperatorOverload(@operator))
{
Driver.Diagnostics.EmitError(DiagnosticId.InvalidOperatorOverload,
"Invalid operator overload {0}::{1}",
@ -130,11 +130,11 @@ namespace CppSharp.Passes @@ -130,11 +130,11 @@ namespace CppSharp.Passes
return CXXOperatorKind.None;
}
static bool IsValidOperatorOverload(CXXOperatorKind kind)
static bool IsValidOperatorOverload(Method @operator)
{
// These follow the order described in MSDN (Overloadable Operators).
switch (kind)
switch (@operator.OperatorKind)
{
// These unary operators can be overloaded
case CXXOperatorKind.Plus:
@ -151,8 +151,6 @@ namespace CppSharp.Passes @@ -151,8 +151,6 @@ namespace CppSharp.Passes
case CXXOperatorKind.Amp:
case CXXOperatorKind.Pipe:
case CXXOperatorKind.Caret:
case CXXOperatorKind.LessLess:
case CXXOperatorKind.GreaterGreater:
// The comparison operators can be overloaded
case CXXOperatorKind.EqualEqual:
@ -163,6 +161,12 @@ namespace CppSharp.Passes @@ -163,6 +161,12 @@ namespace CppSharp.Passes
case CXXOperatorKind.GreaterEqual:
return true;
case CXXOperatorKind.LessLess:
case CXXOperatorKind.GreaterGreater:
PrimitiveType primitiveType;
return @operator.Parameters.Last().Type.IsPrimitiveType(out primitiveType) &&
primitiveType == PrimitiveType.Int32;
// Assignment operators cannot be overloaded
case CXXOperatorKind.PlusEqual:
case CXXOperatorKind.MinusEqual:

Loading…
Cancel
Save