Serialize local types and provide a lookup API

rdar://problem/18295292

Locally scoped type declarations were previously not serialized into the
module, which meant that the debugger couldn't reason about the
structure of instances of those types.

Introduce a new mangling for local types:
[file basename MD5][counter][identifier]
This allows the demangle node's data to be used directly for lookup
without having to backtrack in the debugger.

Local decls are now serialized into a LOCAL_TYPE_DECLS table in the
module, which acts as the backing hash table for looking up
[file basename MD5][counter][identifier] -> DeclID mappings.

New tests:
* swift-ide-test mode for testing the demangle/lookup/mangle lifecycle
of a module that contains local decls
* mangling
* module merging with local decls

Swift SVN r24426
This commit is contained in:
David Farler
2015-01-14 22:08:47 +00:00
parent e56448b1ee
commit fab3d491d9
44 changed files with 1177 additions and 194 deletions

View File

@@ -166,6 +166,10 @@ public:
DeclName name, NLKind lookupKind,
SmallVectorImpl<ValueDecl*> &results) const override;
virtual TypeDecl *lookupLocalType(llvm::StringRef FileHash,
unsigned int LocalDiscriminator,
llvm::StringRef Name) const override;
virtual OperatorDecl *lookupOperator(Identifier name,
DeclKind fixity) const override;
@@ -184,6 +188,8 @@ public:
virtual void getTopLevelDecls(SmallVectorImpl<Decl*> &results) const override;
virtual void getLocalTypeDecls(SmallVectorImpl<Decl *> &results) const override;
virtual void getDisplayDecls(SmallVectorImpl<Decl*> &results) const override;
virtual void
@@ -194,6 +200,7 @@ public:
collectLinkLibraries(Module::LinkLibraryCallback callback) const override;
Identifier getDiscriminatorForPrivateValue(const ValueDecl *D) const override;
Identifier getDiscriminatorForLocalValue(const ValueDecl *D) const override;
virtual StringRef getFilename() const override;