From f3045ea6c858b85ef105192b607be86572ec7020 Mon Sep 17 00:00:00 2001 From: marcos henrich Date: Fri, 2 Aug 2013 22:31:30 +0100 Subject: [PATCH] Generated code for equals override now checks if the dynamic_cast does not return null. --- src/Generator/Passes/ObjectOverridesPass.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Generator/Passes/ObjectOverridesPass.cs b/src/Generator/Passes/ObjectOverridesPass.cs index bf3e5f71..15a284af 100644 --- a/src/Generator/Passes/ObjectOverridesPass.cs +++ b/src/Generator/Passes/ObjectOverridesPass.cs @@ -19,16 +19,21 @@ namespace CppSharp if (!method.IsSynthetized) continue; + var @class = (Class) method.Namespace; + switch (method.Name) { case "GetHashCode": block.Write("return (int)NativePtr;"); break; case "Equals": - + var cliTypePrinter = new CLITypePrinter(Driver); + var classCliType = @class.Visit(cliTypePrinter); block.WriteLine("if (!object) return false;"); - block.Write("return Instance == safe_cast({0})->Instance;", - method.Parameters[0].Name); + block.WriteLine("auto obj = dynamic_cast<{0}>({1});", + classCliType, method.Parameters[0].Name); + block.WriteLine("if (!obj) return false;"); + block.Write("return Instance == obj->Instance;"); break; } }