Browse Source

Generated code for equals override now checks if the dynamic_cast does not return null.

pull/17/head
marcos henrich 13 years ago
parent
commit
f3045ea6c8
  1. 11
      src/Generator/Passes/ObjectOverridesPass.cs

11
src/Generator/Passes/ObjectOverridesPass.cs

@ -19,16 +19,21 @@ namespace CppSharp
if (!method.IsSynthetized) if (!method.IsSynthetized)
continue; continue;
var @class = (Class) method.Namespace;
switch (method.Name) switch (method.Name)
{ {
case "GetHashCode": case "GetHashCode":
block.Write("return (int)NativePtr;"); block.Write("return (int)NativePtr;");
break; break;
case "Equals": case "Equals":
var cliTypePrinter = new CLITypePrinter(Driver);
var classCliType = @class.Visit(cliTypePrinter);
block.WriteLine("if (!object) return false;"); block.WriteLine("if (!object) return false;");
block.Write("return Instance == safe_cast<ICppInstance^>({0})->Instance;", block.WriteLine("auto obj = dynamic_cast<{0}>({1});",
method.Parameters[0].Name); classCliType, method.Parameters[0].Name);
block.WriteLine("if (!obj) return false;");
block.Write("return Instance == obj->Instance;");
break; break;
} }
} }

Loading…
Cancel
Save