Implement SE-0075: CanImport

This implementation required a compromise between parser
performance and AST structuring.  On the one hand, Parse
must be fast in order to keep things in the IDE zippy, on
the other we must hit the disk to properly resolve 'canImport'
conditions and inject members of the active clause into the AST.
Additionally, a Parse-only pass may not provide platform-specific
information to the compiler invocation and so may mistakenly
activate or de-activate branches in the if-configuration decl.

The compromise is to perform condition evaluation only when
continuing on to semantic analysis.  This keeps the parser quick
and avoids the unpacking that parse does for active conditions
while still retaining the ability to see through to an active
condition when we know we're moving on to semantic analysis anyways.
This commit is contained in:
Robert Widmann
2017-08-24 16:11:03 -07:00
parent 0bae2e5aa6
commit 75a83da03e
16 changed files with 39 additions and 22 deletions

View File

@@ -1366,7 +1366,7 @@ SourceFile *SwiftLangSupport::getSyntacticSourceFile(
Error = "Compiler invocation set up failed";
return nullptr;
}
ParseCI.performParseOnly();
ParseCI.performParseOnly(/*EvaluateConditionals*/true);
SourceFile *SF = nullptr;
unsigned BufferID = ParseCI.getInputBufferIDs().back();