Special case String hash keys

For immutable strings, it's enough to incref the hash key.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/a081f6b5
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/a081f6b5
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/a081f6b5

Branch: refs/heads/clone_class_registry
Commit: a081f6b590653b3e3fc3ca5cba1d4cc356c426a9
Parents: a360af7
Author: Nick Wellnhofer <[email protected]>
Authored: Sun Aug 3 14:11:46 2014 +0200
Committer: Nick Wellnhofer <[email protected]>
Committed: Sun Aug 3 17:38:04 2014 +0200

----------------------------------------------------------------------
 runtime/core/Clownfish/Hash.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/a081f6b5/runtime/core/Clownfish/Hash.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Hash.c b/runtime/core/Clownfish/Hash.c
index 987631c..70181c0 100644
--- a/runtime/core/Clownfish/Hash.c
+++ b/runtime/core/Clownfish/Hash.c
@@ -16,6 +16,7 @@
 
 #define C_CFISH_HASH
 #define C_CFISH_HASHTOMBSTONE
+#define C_CFISH_OBJ
 #define CFISH_USE_SHORT_NAMES
 
 #include <string.h>
@@ -166,7 +167,13 @@ Obj*
 Hash_Make_Key_IMP(Hash *self, Obj *key, int32_t hash_sum) {
     UNUSED_VAR(self);
     UNUSED_VAR(hash_sum);
-    return Obj_Clone(key);
+    if (key->klass == STRING || key->klass == STACKSTRING) {
+        // Strings are immutable.
+        return INCREF(key);
+    }
+    else {
+        return Obj_Clone(key);
+    }
 }
 
 Obj*

Reply via email to