Commit Graph

4145 Commits

Author SHA1 Message Date
Rintaro Ishizaki
6872f6c0cb Merge pull request #19742 from AnthonyLatsis/class-var-override-compl
[CodeCompletion][Parser] Completions for overridable static members
2019-02-26 09:52:37 -08:00
Saleem Abdulrasool
9934532e07 cmake: switch host libraries to use target_link_libraries
This is a follow up to the discussion on #22740 to switch the host
libraries to use the `target_link_libraries` rather than the
`LINK_LIBRARIES` special handling.  This allows the dependency to be
properly tracked by CMake and allows us to use the more modern syntax.
2019-02-22 15:28:07 -08:00
fischertony
ae415b2a4b When followed by an 'override' or CC token inside a class, treat 'class' as a modifier rather than an introducer. 2019-02-16 16:02:22 +03:00
fischertony
86d9d7a6b5 Fix override completions when a valid introducer is present but the override keyword is not. 2019-02-16 16:02:22 +03:00
fischertony
bb9482bab5 [CodeCompletion][Parser] Completions for overridable static members 2019-02-16 16:02:06 +03:00
Davide Italiano
49b2f4eba7 [DebuggerSupport] Unbreak closures in the expression parser.
The new trick is that of leavign an unresolved identifier for
the expression parser to fill in.

<rdar://problem/47982630>
2019-02-12 16:36:47 -08:00
Robert Widmann
944d8d06d7 [SE-0155] Default Arguments in Enum Cases
The bulk of the changes are to SILGenApply.  As we must now evaluate the
payload ArgumentSource to an RValue, we follow the example of subscripts
and lie to the argument emitter.  This evaluates arguments at +1 which
can lead to slightly worse codegen at -Onone.
2019-02-12 10:06:48 -05:00
Rintaro Ishizaki
6aee036812 Merge pull request #22214 from bannzai/syntax/add/function/make_ellipsis_token
[SwiftSyntax] Add SyntaxFactory.makeEllipsisToken function.
2019-02-11 16:27:37 -08:00
bannzai
75d24cb65a Setting ellipsis token kind 2019-02-07 23:16:18 +09:00
Pavel Yaskevich
9da67c1897 [TypeChecker] Drop @autoclosure attribute from invalid parameters
While forming/validating parameters make sure that the type is indeed
a function type before marking it as `autoclosure` based on type
representative attributes, because parser doesn't change attributes
even after the error has been found and diagnosed.

Resolves: rdar://problem/47586626
2019-01-28 17:01:05 -08:00
Harlan Haskins
b81c491d3d [Lexer] Allow $-prefixed identifiers for parseable interfaces
We’re printing a new name for lazy storage in parseable interfaces,
`$__lazy_storage_$_{propname}`. This is intentionally $-prefixed so it cannot
conflict with variables written in source, but it doesn’t use a `.` anymore
because parseable interfaces need to be...parseable.
2019-01-22 11:02:36 -08:00
Harlan Haskins
f5fc6f0c57 [Lexer] Handle SwiftInterface files as well as SIL
Previously, the Lexer kept a single flag whether we’re lexing Swift or SIL. Instead, keep track if we’re parsing Swift, SIL, or a Swiftinterface file. .swiftinterface files allow $-prefixed identifiers anywhere.
2019-01-22 11:02:36 -08:00
Slava Pestov
d41eec9510 Parse: Simplify Parser::canDelayMemberDeclParsing() 2019-01-18 00:15:53 -05:00
Slava Pestov
93c386d263 Parse: Skip function bodies when delayed member parsing mode is on
Fixes <rdar://problem/47305142>.
2019-01-18 00:15:53 -05:00
Slava Pestov
83472bca29 Frontend: Only enable delayed member parsing for non-primary files 2019-01-18 00:15:53 -05:00
Slava Pestov
fb0fbc099b Parse: Rename DisableDelayedParsing to DelayBodyParsing and change polarity 2019-01-18 00:15:41 -05:00
Slava Pestov
d540682e24 Parse: Use ScopeKind::EnumBody not ScopeKind::ClassBody for enum body 2019-01-18 00:15:41 -05:00
Slava Pestov
5ae2f76370 Parse: Factor out new Parser::delayParsingDeclList() method 2019-01-18 00:15:41 -05:00
Slava Pestov
0bdf0fdca3 Parse: Refactor parseDeclList() to take an IterableDeclContext instead of a callback function 2019-01-18 00:15:41 -05:00
Slava Pestov
acb37b2b55 AST: Set ClassDecl's HasDestructor bit in one place 2019-01-18 00:15:41 -05:00
Argyrios Kyrtzidis
049c3cd7bd Merge pull request #21955 from akyrtzi/syntax-parser-opt
[Parser] Optimize syntactic parsing for libSyntax
2019-01-17 16:09:56 -08:00
Xi Ge
758e4a28c2 SyntaxNodes: subsume DotSelfExpr and ImplicitMemberExpr by MemberAccessExpr.
Per our discussion in another PR, having these three similar nodes at
the same time  may unnecessarily complicate client side.
2019-01-17 14:15:53 -08:00
Argyrios Kyrtzidis
57c1f72cc3 [Parse] Optimize syntax parsing: Make ParsedRawSyntaxNode a POD type
This eliminates the overhead of ParsedRawSyntaxNode needing to do memory management.
If ParsedRawSyntaxNode needs to point to some data the memory is allocated from a bump allocator.

There are also some improvements on how the ParsedSyntaxBuilders work.
2019-01-17 12:17:28 -08:00
Argyrios Kyrtzidis
c7ac859310 [Parse] Optimize syntax parsing: Speed-up Lexer::lexTrivia()
Introduce ParsedTrivia which is a more efficient structure to use during lexing than syntax::Trivia.
2019-01-17 12:10:27 -08:00
Shahzad Lone
065a25fce1 Reserve AllDelayed vector to upper bound.
File: [swift/lib/Parse/PersistentParserState.cpp]

Observing this code snipped closely in function, [void PersistentParserState::parseAllDelayedDeclLists()]:
```
for (auto &P: DelayedDeclListStates) {
    AllDelayed.push_back(P.first);
}
```

We observe that 'AllDelayed' gets maximum of DelayedDeclListStates.size() elements pushed into it.
So it is better to reserve 'vector AllDelayed' to that max size, to save reallocation cost.

I believe we can use size() on [DelayedDeclListStates], which is of type: ```llvm::DenseMap<IterableDeclContext *, std::unique_ptr<DelayedDeclListState>>``` because of the ```DenseMapIterator``` implementation of size().
[http://llvm.org/doxygen/DenseMap_8h_source.html#l00126]
2019-01-14 20:44:26 -05:00
Saleem Abdulrasool
03af9467d8 ParseSIL: prevent _weakLinked on COFF targets
PE/COFF does not provide weak linking semantics.  Ensure that we
diagnose use of `_weakLinked` on those targets rather than consuming it
and attempting to generate IR for that.
2019-01-11 12:36:00 -08:00
Xi Ge
6057a60aca [Parser] Expose a flag to allow users explicitly disable delayed parsing. NFC
Discussed with @dcci, this patch is necessary to fix an lldb test failure. rdar://38396444
2019-01-09 14:32:41 -08:00
Argyrios Kyrtzidis
4806fb1cef [ParsedRawSyntaxNode] Explicitely specify if a ParsedRawSyntaxNode is null using a DataKind
Avoid implicitely assuming 'null' node if its OpaqueSyntaxNode is null, there should be no interpretation
of OpaqueSyntaxNode values, a SyntaxParseActions implementation should be able to return null pointers as OpaqueSyntaxNode.
2019-01-07 19:56:37 -08:00
Argyrios Kyrtzidis
668fa1d721 [ParsedRawSyntaxNode] Fix ParsedRawSyntaxNode::dump()
Using dumpTokenKind() function instead of getTokenText().
2019-01-07 19:56:37 -08:00
Argyrios Kyrtzidis
9e67e7389f [Parse] Ensure that the tokens formed for interpolation anchors have proper ranges from the input source 2019-01-07 19:56:37 -08:00
Argyrios Kyrtzidis
fc2cc020fb [Parse/ParsedRawSyntaxRecorder] In recordToken() adjust the range to account for backticks in an identifier 2019-01-07 19:56:37 -08:00
Argyrios Kyrtzidis
da6de4b095 Address PR feedback
* Add and improve documentation comments
* Adjust formatting
* Rename recordExactRawSyntax -> rec.recordRawSyntax
2019-01-07 19:56:37 -08:00
Argyrios Kyrtzidis
1f1eab638f [Parse/Syntax] Replace ParsedSyntaxRecorder::record* calls from the parser with ParsedSyntaxRecorder::make*
Doing a "direct ParsedSyntaxRecorder::record[some syntax]" call from the parser is not a good idea due to possibility
of being in a backtracking context when the call is made. Replace them with "ParsedSyntaxRecorder::make[some syntax]"
which will implicitly check for backtracking and create a recorded or deferred node accordingly.
2019-01-07 19:56:36 -08:00
Argyrios Kyrtzidis
ab7427723e [Parse/Syntax] Refactoring to decouple the parser from syntax tree creation
Instead of creating syntax nodes directly, modify the parser to invoke an abstract interface 'SyntaxParseActions' while it is parsing the source code.
This decouples the act of parsing from the act of forming a syntax tree representation.
'SyntaxTreeCreator' is an implementation of SyntaxParseActions that handles the logic of creating a syntax tree.
To enforce the layering separation of parsing and syntax tree creation, a static library swiftSyntaxParse is introduced to compose the two.

This decoupling is important for introducing a syntax parser library for SwiftSyntax to directly access parsing.
2019-01-07 19:52:59 -08:00
Ankit Aggarwal
45290837b4 Merge pull request #21110 from aciidb0mb3r/swiftpm-manifest-version
Extend @available to support PackageDescription
2019-01-07 12:20:23 -08:00
Rintaro Ishizaki
47b987f9e5 Merge pull request #21487 from rintaro/parse-collection-rdar45221238
[Parse] Eliminate backtracking in collection expression parsing
2019-01-07 17:33:15 +09:00
Saleem Abdulrasool
8738b80524 Parse: explicitly state ordering of parsing (NFC)
When the parameters are inlined, with optimizations, the evaluation
order is under specified (with MSVC, the arguments are evaluated right
to left rather than left to right).  This results in the arguments being
processed incorrectly.  Create local variables to enforce the ordering
of the processed tokens.  Fixes the build on Windows with optimizations.
2019-01-04 16:49:23 -08:00
Rintaro Ishizaki
22652f9e88 [Parse] Eliminate backtracking in collection expression parsing
Parsing collection literal expression used to take exponential time
depending on the nesting level of the first element.

Stop using 'parseList()' because using it complicates libSyntax parsing.

rdar://problem/45221238 / https://bugs.swift.org/browse/SR-9220
rdar://problem/38913395 / https://bugs.swift.org/browse/SR-7283
2018-12-25 11:05:23 +09:00
Argyrios Kyrtzidis
66be4a58b4 [Parser] Introduce ParserUnit::parse() function to avoid duplication of code 2018-12-16 09:52:15 -08:00
Argyrios Kyrtzidis
a8f5502228 Merge pull request #21185 from akyrtzi/syntax-parsing-finalize-tree-change
[Parse/Syntax] Simplify how the final SourceFileSyntax root is formed
2018-12-10 16:08:37 -08:00
Argyrios Kyrtzidis
cbad3492e4 [Parse/Syntax] Simplify how the final SourceFileSyntax root is formed
Instead of creating multiple CodeBlockItemList nodes, that need to get merged and discarded later on, do this:

* Ensure for libSyntax parsing that we parse the whole file
* Create top-level CodeBlockItem nodes that we just directly wrap with a single CodeBlockItemList node at the end

The importance of this change will become more obvious later on when we'll decouple syntax parsing from the formation of libSyntax tree nodes.
2018-12-10 13:37:15 -08:00
Mike Ash
ac376840dd [Parse] Allow @_objcRuntimeName to be used in source.
rdar://problem/46546165
2018-12-10 10:17:52 -05:00
Ankit Aggarwal
92d09f4e19 Extend @available to support PackageDescription
<rdar://problem/46548531> Extend @available to support PackageDescription

This introduces a new private availability kind "_PackageDescription" to
allow availability testing by an arbitary version that can be passed
using a new command-line flag "-swiftpm-manifest-version". The semantics
are exactly same as Swift version specific availability. In longer term,
it maybe possible to remove this enhancement once there is
a language-level availability support for 3rd party libraries.

Motivation:

Swift packages are configured using a Package.swift manifest file. The
manifest file uses a library called PackageDescription, which contains
various settings that can be configured for a package. The new additions
in the PackageDescription APIs are gated behind a "tools version" that
every manifest must declare. This means, packages don't automatically
get access to the new APIs. They need to update their declared tools
version in order to use the new API. This is basically similar to the
minimum deployment target version we have for our OSes.

This gating is important for allowing packages to maintain backwards
compatibility. SwiftPM currently checks for API usages at runtime in
order to implement this gating. This works reasonably well but can lead
to a poor experience with features like code-completion and module
interface generation in IDEs and editors (that use sourcekit-lsp) as
SwiftPM has no control over these features.
2018-12-08 09:38:40 +05:30
Slava Pestov
aa747dcd81 Remove property behaviors 2018-12-07 20:38:33 -05:00
Adrian Prantl
ff63eaea6f Remove \brief commands from doxygen comments.
We've been running doxygen with the autobrief option for a couple of
years now. This makes the \brief markers into our comments
redundant. Since they are a visual distraction and we don't want to
encourage more \brief markers in new code either, this patch removes
them all.

Patch produced by

      for i in $(git grep -l '\\brief'); do perl -pi -e 's/\\brief //g' $i & done
2018-12-04 15:45:04 -08:00
Brent Royal-Gordon
facaad1873 A diagnosis from the argument clinic (#20997)
[Parse] Warn if the same argument is specified more than once in @available
2018-12-04 01:05:09 -08:00
Rintaro Ishizaki
c1597f141d Merge pull request #20959 from rintaro/ide-completion-identaftercctok
[CodeCompletion] Eat identifier characters after CC position
2018-12-04 09:46:41 +09:00
Rintaro Ishizaki
56ce86178c [CodeCompletion] Eat identifier characters after CC position
Text on editors (e.g. Xcode) may contain identifiers following to CC
position which should be considered as "filtering text" for the code
completion.

For example, a user types '@a' the CC position is between '@' and 'a'.
The user probably expects attributes starting with 'a'.

Eat identifier characters after CC token in Lexer. By this change,
for instance for '@<token>IB class', the parser now can detect this
is a start of class declaration and emit class attributes completions.

rdar://problem/46103294
2018-12-04 08:29:26 +09:00
Rintaro Ishizaki
5e69941fda [CodeCompletion] Propagate completion status of parseGenericArguments()
To properly handle code-completion in generic argument list.

rdar://problem/39312854
2018-12-03 12:34:59 +09:00
Harlan Haskins
dd163f0701 [Parse] Parse @_hasStorage attribute outside of SIL 2018-11-26 18:42:02 -08:00