summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MLKSymbol.h1
-rw-r--r--MLKSymbol.m13
2 files changed, 13 insertions, 1 deletions
diff --git a/MLKSymbol.h b/MLKSymbol.h
index 3aa2a1e..3cc9859 100644
--- a/MLKSymbol.h
+++ b/MLKSymbol.h
@@ -52,6 +52,7 @@
// copying. (The hack is called real_identity and it's an ivar of this
// class.) See the comment above copyWithZone: for why it even exists.
-(BOOL) isEqual:(id)object;
+-(unsigned) hash;
-(void) dealloc;
@end
diff --git a/MLKSymbol.m b/MLKSymbol.m
index 73d418a..8a087cf 100644
--- a/MLKSymbol.m
+++ b/MLKSymbol.m
@@ -36,7 +36,10 @@
MLKSymbol *copy = [MLKSymbol allocWithZone:zone];
ASSIGN (copy->name, name);
ASSIGN (copy->homePackage, homePackage);
- ASSIGN (copy->real_identity, self);
+ if (real_identity)
+ ASSIGN (copy->real_identity, real_identity);
+ else
+ ASSIGN (copy->real_identity, self);
return copy;
}
@@ -79,6 +82,14 @@
: self)));
}
+-(unsigned) hash
+{
+ if (real_identity)
+ return [real_identity hash];
+ else
+ return [super hash];
+}
+
-(void) dealloc
{
RELEASE (name);