Commit Graph

6300 Commits

Author SHA1 Message Date
Joe Groff
6706feaf5e Parse _borrowing x in patterns as a borrow binding.
Treat it as a contextual keyword when followed by an identifier, like our
other ownership-related declarations and operators.
2024-01-30 17:33:42 -08:00
Hamish Knight
9b64990d24 [AST] Remove the "single expression body" bit
Remove this bit from function decls and closures.
Instead, for closures, infer it from the presence
of a single return or single expression AST node
in the body, which ought to be equivalent, and
automatically takes result builders into
consideration. We can also completely drop this
query from AbstractFunctionDecl, replacing it
instead with a bit on ReturnStmt.
2024-01-30 14:08:54 +00:00
Hamish Knight
f4a6b95d24 Move single-expr return transform from Parse to Sema
Rather than doing the transform in the parser, and
then potentially undoing it in Sema, move the
entire transform into Sema. This also lets us
unify the logic between function decls and
closures, and allows ASTGen to benefit from it.
2024-01-30 14:08:53 +00:00
Alex Hoppen
0e2430be08 [Parse] Disallow non-decimal line numbers to #sourceLocation directive
Non-decimal line numbers in a `#sourceLocation` directive are simply confusing in my opinion and should be banned.
2024-01-29 23:02:38 -08:00
Alex Hoppen
cc5e79b521 [Parse] Disallow space between @ and attribute name in Swift 6 mode 2024-01-29 22:54:29 -08:00
John McCall
41cdfb04ad Introduce a proper TypeAttribute class hierarchy.
The old TypeAttributes reprsentation wasn't too bad for a small number of
simple attributes.  Unfortunately, the number of attributes has grown over
the years by quite a bit, which makes TypeAttributes fairly bulky even at
just a single SourceLoc per attribute.  The bigger problem is that we want
to carry more information than that on some of these attributes, which is
all super ad hoc and awkward.  And given that we want to do some things
for each attribute we see, like diagnosing unapplied attributes, the linear
data structure does require a fair amount of extra work.

I switched around the checking logic quite a bit in order to try to fit in
with the new representation better.  The most significant change here is the
change to how we handle implicit noescape, where now we're passing the
escaping attribute's presence down in the context instead of resetting the
context anytime we see any attributes at all.  This should be cleaner overall.

The source range changes around some of the @escaping checking is really a
sort of bugfix --- the existing code was really jumping from the @ sign
all the way past the autoclosure keyword in a way that I'm not sure always
works and is definitely a little unintentional-feeling.

I tried to make the parser logic more consistent around recognizing these
parameter specifiers; it seems better now, at least.
2024-01-28 22:30:26 -05:00
Rintaro Ishizaki
170336721d Merge pull request #71128 from rintaro/ast-nonmodifiers
[AST] Remove unused decl modifiers
2024-01-26 01:14:49 -08:00
Meghana Gupta
36f43fe760 Follow up for C++ parser changes in #71069 2024-01-25 00:40:34 -08:00
Meghana Gupta
28f27c3da1 Merge pull request #71069 from meg-gupta/lifetimedependencelangattr
Initial language support for lifetime dependence
2024-01-25 00:39:13 -08:00
Meghana Gupta
0cb805bccf Add Sema support for LifetimeDependence 2024-01-24 15:01:15 -08:00
Meghana Gupta
d37b0cf10d Add support for LifetimeDependence in C++ parser 2024-01-24 15:01:10 -08:00
Rintaro Ishizaki
e8f79a068a [AST] Remove unused decl modifiers
_resultDependsOn and transferring are - at least currently - only used
as type specifiers, not decl modifiers. And if they are actually
specified as a decl modifiers, they're just accepted and ignored, which
is not ideal.
2024-01-24 14:36:38 -08:00
Hamish Knight
3a8e31d7f6 Merge pull request #71094 from hamishknight/return-tweaks
A couple of ReturnStmt tweaks
2024-01-24 10:07:27 +00:00
Hamish Knight
71d8a9cf53 Unset the return location for an implicit return nil
The `return` keyword here doesn't have a source
location, so unset it. This matches the other
implicit single expression returns.
2024-01-23 21:33:55 +00:00
Hamish Knight
c97d80b1c3 [AST] NFC: Add convenience constructors for ReturnStmt
Add `ReturnStmt::createParsed` and `createImplict`.
2024-01-23 19:30:18 +00:00
Hamish Knight
12af066f5b Mark a couple of ReturnStmts implicit
These are both synthesized returns, so they ought
to be marked implicit.
2024-01-23 19:29:14 +00:00
Alex Hoppen
c8424c1b7a [CodeComplete] Remove code for call pattern heuristics
These options weren’t used anymore, so we can remove them.
2024-01-22 19:57:12 -08:00
Alex Hoppen
695e69e09e [CodeComplete] Suggest single argument labels if code completion is invoked at start of function call with exiting parameters
This removes the distinction between argument completions and postfix expr paren completions, which was meaningless since solver-based completion.

It then determines whether to suggest the entire function call pattern (with all argument labels) or only a single argument based on whether there are any existing arguments in the call.

For this to work properly, we need to improve parser recovery a little bit so that it parsers arguments after the code completion token properly.

This should make call pattern heuristics obsolete.

rdar://84809503
2024-01-22 12:21:04 -08:00
Ben Barham
15bce77b79 Merge pull request #71021 from bnbarham/unnamed-warn-to-6
[Parse] Update error if closure has unnamed parameter to warning
2024-01-19 16:06:39 -08:00
Ben Barham
8bb1ac950b [Parse] Update error if closure has unnamed parameter to warning
This reverts commit 4ba4da45b9 and updates
the warning to a warning until Swift 6.
2024-01-19 12:42:27 -08:00
Michael Gottesman
50aaad376b Merge pull request #70836 from gottesmm/transferring-parameter
[region-isolation] Add support for transferring parameters.
2024-01-19 11:10:58 -08:00
Michael Gottesman
9513d298ec [region-isolation] Add parsing/serialization/type system support for a transferring OwnershipSpecifier. 2024-01-18 13:20:28 -08:00
Nate Chandler
a00aa6d334 [Parse] Allow ~ in SIL.
Enable writing tests that include types decorated `: ~Copyable` and
`: ~Escapable`.
2024-01-18 11:00:41 -08:00
Hamish Knight
f6b7301259 Merge pull request #70591 from hamishknight/doritos-and-fritos
[AST] A couple of PatternBindingInitializer cleanups
2024-01-18 11:33:19 +00:00
Anthony Latsis
96ee57b00b Merge pull request #70623 from AnthonyLatsis/init-sema
Move unqualified `init` diagnosis from Parse to Sema
2024-01-18 03:53:33 +03:00
Hamish Knight
0b18d287e0 [Parse] Avoid re-using attribute context for non-first entry
This could result in us changing the binding
index after-the-fact.
2024-01-17 16:02:33 +00:00
Hamish Knight
848574080a [CS] Use correct DeclContext when solving initializations
Use the PatternBindingInitializer context if we
have one. This also uncovered a parser issue where
we would mistakenly create a
PatternBindingInitializer in top-level code after
parsing the initializers.
2024-01-17 16:02:33 +00:00
Hamish Knight
fb0a75fe55 [AST] NFC: Introduce PatternBindingInitializer::create 2024-01-17 16:02:32 +00:00
Allan Shortlidge
72e0fc2af1 NFC: Remove an unused variable in ParseDecl.cpp. 2024-01-16 13:27:55 -08:00
Allan Shortlidge
cd8c99fe26 NFC: Remove an unused variable in ParseDecl.cpp. 2024-01-12 18:03:11 -08:00
pinkjuice66
e6d8d39856 [Parse] Eliminate unnecessary type conversion wrapper function 2024-01-08 22:43:09 +09:00
pinkjuice66
d1ac87063a [Parse] Remove duplicate condition check 2024-01-08 20:37:24 +09:00
pinkjuice66
1269b972fe [Parse] Correct the range for the start of a UTF8 character 2024-01-08 20:20:54 +09:00
Doug Gregor
4232f33ee1 Fix lookahead for effects specifiers in function types
We were failing to properly look past effect specifiers like async
throws(X) in a function type starting with an attribute.
2024-01-05 22:14:30 -08:00
Rintaro Ishizaki
8f29f15c74 Merge pull request #70737 from rintaro/ast-localtypedecls
[AST] Requestify local type declarations
2024-01-05 17:10:13 -08:00
Ben Barham
dd9fe56868 Merge pull request #70706 from bnbarham/should-have-feature
[Basic] hasFeature should succeed for promoted language features
2024-01-05 16:04:03 -08:00
Rintaro Ishizaki
f7e35cb835 [AST] Requestify local type declarations
Instead of recording local type declarations while parsing, make a
request to collect them from the AST. This reduces the side effect of
parsing.
2024-01-05 13:26:55 -08:00
Ben Barham
d51c58a6f9 [Basic] hasFeature should succeed for promoted language features
Merge `$<Feature>` and `hasFeature` implementations.
  - `$<Feature>` did not support upcoming language features.
  - `hasFeature` did not support promoted language features and also
    didn't take into account `Options` in `Features.def`.

Remove `Options` entirely, it was always one of three cases:
  - `true`
  - `langOpts.hasFeature`
  - `hasSwiftSwiftParser`

Since `LangOptions::hasFeature` should always be used anyway, it's no
longer necessary. `hasSwiftSwiftParser` can be special cased when adding
the default promoted language features (by removing those features).

Resolves rdar://117917456.
2024-01-05 10:26:13 -08:00
pinkjuice66
88619a5c5a [Parse] Remove unused parameters and return value of lexTrivia function 2024-01-05 01:27:29 +09:00
Michael Gottesman
799ab69c11 [parser] Introduce a helper struct for parsing type attributes rather than passing around a bunch of state.
Just refactoring before adding /another/ field to these APIs. It hurt to do so
so I needed to refactor.

NFCI.
2024-01-02 12:15:37 -08:00
Michael Gottesman
aad2669bd6 [parse] Generalize "Need experimental feature flag" parser error to work for general experimental features instead of just NonEscapableTypes. 2024-01-02 12:13:32 -08:00
Meghana Gupta
d3e921dc47 Make _resultDependsOn available on SILFunctionArgument 2023-12-29 01:57:19 -08:00
Anthony Latsis
d7b52e96c4 Move unqualified init diagnosis from Parse to Sema 2023-12-25 21:17:20 +03:00
Anthony Latsis
bd2f48d9d2 [NFC] AST: Introduce and use Identifier::isConstructor 2023-12-25 21:09:17 +03:00
Rintaro Ishizaki
409b2760f9 [ASTGen] Statements 2023-12-18 16:09:25 -08:00
Hamish Knight
2f25d8fa58 [AST] Compute SubscriptDecl EndLoc
Instead of having the parser set it, compute it
using the recorded brace location for the accessor
record.
2023-12-15 21:44:31 +00:00
Hamish Knight
8fdb48d910 [AST] Rename SubscriptDecl::create -> createParsed
And generate the DeclName using the argument labels
on the ParameterList.
2023-12-15 21:44:31 +00:00
Hamish Knight
526dcfbe11 [AST] Factor out AccessorDecl::createParsed
Move the logic for splicing together the
accessor's parameter list out of the parser so
that ASTGen will be able to use it too.
2023-12-15 21:44:30 +00:00
Hamish Knight
e1d35d90aa [AST] Introduce TypedPattern::createPropagated 2023-12-15 21:44:30 +00:00
Hamish Knight
b04d5d5abc [ASTGen] Better handle pattern binding entries
Generate all entries, and ensure we introduce a
PatternBindingInitializer context for non-local
cases. Also use this opportunity to cleanup
`PatternBindingDecl::create`.
2023-12-15 21:44:30 +00:00