Browse Source

Cleaned up the ObjectOverridesPass pass.

pull/34/merge
triton 12 years ago
parent
commit
352cb8b099
  1. 36
      src/Generator/Passes/ObjectOverridesPass.cs

36
src/Generator/Passes/ObjectOverridesPass.cs

@ -9,35 +9,49 @@ namespace CppSharp @@ -9,35 +9,49 @@ namespace CppSharp
{
public class ObjectOverridesPass : TranslationUnitPass
{
void OnUnitGenerated(GeneratorOutput output)
private void OnUnitGenerated(GeneratorOutput output)
{
foreach (var template in output.Templates)
{
foreach (var block in template.FindBlocks(CLIBlockKind.MethodBody))
{
var method = block.Declaration as Method;
VisitMethod(method, block);
}
}
}
private void VisitMethod(Method method, Block block)
{
if (!method.IsSynthetized)
continue;
return;
var @class = (Class)method.Namespace;
var @class = (Class) method.Namespace;
if (method.Name == "GetHashCode" && method.Parameters.Count == 0)
GenerateGetHashCode(block);
if (method.Name == "Equals" && method.Parameters.Count == 1)
GenerateEquals(@class, block, method);
}
switch (method.Name)
void GenerateGetHashCode(Block block)
{
case "GetHashCode":
block.Write("return (int)NativePtr;");
break;
case "Equals":
}
void GenerateEquals(Class @class, Block block, Method method)
{
var cliTypePrinter = new CLITypePrinter(Driver);
var classCliType = @class.Visit(cliTypePrinter);
block.WriteLine("if (!object) return false;");
block.WriteLine("auto obj = dynamic_cast<{0}>({1});",
classCliType, method.Parameters[0].Name);
block.NewLine();
block.WriteLine("if (!obj) return false;");
block.Write("return Instance == obj->Instance;");
break;
}
}
}
}
private bool isHooked;

Loading…
Cancel
Save