`sourceFiles` works like a cache, so I don't think it's a big problem if sometimes we re-create an existing `SourceFile` (I don't think we assume anywhere that the source file is unique/compilation unit).

If we use locks, I don't think it makes sense to use a non-blocking map anymore, so I'd revert to a plain mutable hash map with our locking.