Commits

John McCall committed 17d72f558b7
Simplify and optimize the structural type metadata caches to use ConcurrentMap directly. Previously, these were all using MetadataCache. MetadataCache is a more heavyweight structure which acquires a lock before building the metadata. This is appropriate if building the metadata is very expensive or might have semantic side-effects which cannot be rolled back. It's also useful when there's a risk of re-entrance, since it can diagnose such things instead of simply dead-locking or infinitely recursing. However, it's necessary for structural cases like tuple and function types, and instead we can just use ConcurrentMap, which does a compare-and-swap to publish the constructed metadata and potentially destroys it if another thread successfully won the race. This is an optimization which we could not previously attempt. As part of this, fix tuple metadata uniquing to consider the label string correctly. This exposes a bug where the runtime demangling of tuple metadata nodes doesn't preserve labels; fix this as well.