about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/comp/middle/ty.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 86a0db1f7bc..36fb258d55c 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -120,7 +120,7 @@ fn gen_ty(@type_store tystore, &sty st) -> t {
 }
 
 fn gen_ty_full(@type_store tystore, &sty st, option.t[str] cname) -> t {
-    auto h = hash_type_structure(st);
+    auto h = hash_type_info(st, cname);
     auto new_type = @rec(struct=st, cname=cname, hash=h);
 
     // Is it interned?
@@ -888,6 +888,15 @@ fn hash_type_structure(&sty st) -> uint {
     }
 }
 
+fn hash_type_info(&sty st, option.t[str] cname_opt) -> uint {
+    auto h = hash_type_structure(st);
+    alt (cname_opt) {
+        case (none[str]) { /* no-op */ }
+        case (some[str](?s)) { h += h << 5u + _str.hash(s); }
+    }
+    ret h;
+}
+
 fn hash_ty(&t typ) -> uint { ret typ.hash; }