Commit Graph

754 Commits

Author SHA1 Message Date
Rintaro Ishizaki
d109a86bb7 [ASTGen] Generate CustomAttr on types
Rework TypeAttribute bridging facilities.
Eliminate the _fake_ `swift::TypeAttributes`, but just use the normal
`BridgedArrayRef` for briding the attribute list. Introduce
`BridgedTypeOrCustomAttr` tagged pointer which resembles
`swift::TypeOrCustomAttr`.
2025-02-18 13:08:50 -08:00
Rintaro Ishizaki
2d9da4dc7a [ASTGen] Generate "nonisolated" decl modifier 2025-02-18 12:35:20 -08:00
Rintaro Ishizaki
43eeb14ba0 [ASTGen] Generate attributes on ParamDecls 2025-02-18 11:14:13 -08:00
Rintaro Ishizaki
6980509f8c [ASTGen] Generate DefaultArgumentInitializer
Rework ParamDecl contextualization.
2025-02-18 11:13:39 -08:00
Doug Gregor
13c82c6f78 Remove "unsafe" keyword from expressions when printing inlinable code
To help older compilers that don't yet support the unsafe expression
deal with the Swift interface files we produce, remove the "unsafe" from
expressions in inlinable code.
2025-02-18 07:14:18 -10:00
Rintaro Ishizaki
31efebe896 Merge pull request #79454 from rintaro/astgen-setteraccess
[ASTGen] Fix SetterAccessAttr e.g. private(set)
2025-02-18 07:09:57 -08:00
Rintaro Ishizaki
015dc8a7ae Merge pull request #79453 from rintaro/astgen-minus-number
[ASTGen] Generate "minus" number literal expression
2025-02-18 07:09:45 -08:00
Rintaro Ishizaki
7dd8944512 [ASTGen] Fix SetterAccessAttr e.g. private(set)
'set' part was not parsed as a keyword. Let's just compare the text.
2025-02-17 22:15:17 -08:00
Rintaro Ishizaki
f172725c36 [ASTGen] Handle reasync and rethrows
Introduce generate(functionSignature:for:)
2025-02-17 22:06:29 -08:00
Rintaro Ishizaki
57b6d1e90b [ASTGen] Generate "minus" number literal expression 2025-02-17 21:34:11 -08:00
Rintaro Ishizaki
c7e8f58174 Merge pull request #79438 from rintaro/astgen-static-var
[ASTGen] Correctly store static spelling and location to PBD
2025-02-17 15:59:43 -08:00
Rintaro Ishizaki
b7b28b6d8e [ASTGen] Correctly store static spelling and location to PBD 2025-02-17 11:16:53 -08:00
Rintaro Ishizaki
94402b6c9d [ASTGen] Generate LifetimeAttr 2025-02-17 08:56:29 -08:00
Rintaro Ishizaki
6d85bb58c5 Merge pull request #79412 from rintaro/astgen-typeattrs
[ASTGen] Generate OpaqueReturnTypeOfTypeAttr
2025-02-16 13:55:39 -08:00
Rintaro Ishizaki
84875d147e [ASTGen] Bridge ASTContext.Id_x 2025-02-16 05:22:46 -08:00
Rintaro Ishizaki
0ced6e06b4 [ASTGen] Generate CaptureListExpr
Move the capture list entry construction logic to
CaptureListEntry::createParsed() so that ASTGen can use it.
2025-02-16 05:22:46 -08:00
Rintaro Ishizaki
214315b1cc [ASTGen] Generate several type attributes
Also rework existing type attribute generate functino to use standard
attribute generation facilities.
2025-02-14 18:18:24 -08:00
Rintaro Ishizaki
137e279d62 Merge pull request #79368 from rintaro/astgen-astnode
[ASTGen] Eliminate ASTGen.ASTNode
2025-02-14 11:53:17 -08:00
Rintaro Ishizaki
10aac858fb Merge pull request #79379 from rintaro/astgen-conventiontypeattr
[ASTGen] Generate ConventionTypeAttr
2025-02-14 07:10:27 -08:00
Rintaro Ishizaki
9229b0746d Merge pull request #79374 from rintaro/astgen-objectliteralexpr
[ASTGen] Generate ObjectLiteralExpr
2025-02-14 07:10:10 -08:00
Rintaro Ishizaki
f2db96cc60 [ASTGen] Eliminate ASTGen.ASTNode
We can simply use `BridgedASTNode`, no need to have its own ASTNode
2025-02-14 07:05:10 -08:00
Allan Shortlidge
06030d66aa AST: Introduce AvailabilityDomainOrIdentifier.
It provides a common way to represent either a parsed domain identifier or the
resolved domain.

NFC.
2025-02-13 21:18:05 -08:00
Rintaro Ishizaki
f08bf56722 [ASTGen] Generate ConventionTypeAttr
E.g. `@convention(c)`
2025-02-13 16:19:20 -08:00
Rintaro Ishizaki
e1dfed3f13 [ASTGen] Bridge TypeAttribute subclasses 2025-02-13 16:19:20 -08:00
Rintaro Ishizaki
13380da3b4 [ASTGen] Generate ObjectLiteralExpr
e.g. '#imageLiteral(..)'
2025-02-13 16:17:47 -08:00
Rintaro Ishizaki
e066bb266b Merge pull request #79355 from rintaro/astgen-toplevelvardecl
[ASTGen] Generate PatternBindingDecl at top level
2025-02-13 09:43:10 -08:00
Rintaro Ishizaki
73164a0ffd Merge pull request #79353 from rintaro/astgen-magic-ident-literal
[ASTGen] Generate MagicIdentifierLiteralExpr
2025-02-13 06:25:09 -08:00
Rintaro Ishizaki
6ea6a31ec7 [ASTGen] Generate TopLevelCodeDecl for PatternBindingDecl
* Instead of hoisting VarDecl in the bridging functions, do it in
  ASTGen.
* Introduce `Decl::forEachDeclToHoist` to handle VarDecls in
  PatternBindingDecl, and EnumElementDecl in EnumCaseDecl.
* Intorduce `withBridgedSwiftClosure(closure:call:)` as a callback
  mechanism between Swift and C++
* In `generate(sourceFile:)`, instead of using `generate(codeBlockItem:)`
  handle `CodeBlockItemSyntax.Item` manually to handle `TLCD` wrapping
  and `VarDecl` hoisting.
* Make `generate(variableDecl:)` handle TLCD correctly.
2025-02-13 00:09:22 -08:00
Allan Shortlidge
670084a9ac AST: Retire PlatformVersionConstraintAvailabilitySpec. 2025-02-12 22:46:58 -08:00
Rintaro Ishizaki
f25104ff24 [ASTGen] Generate MagicIdentifierLiteralExpr 2025-02-12 20:47:52 -08:00
Allan Shortlidge
0722efe97e AST: Retire PlatformAgnosticVersionConstraintAvailabilitySpec. 2025-02-12 20:41:00 -08:00
Allan Shortlidge
6844cfe714 AST: Retire OtherPlatformAvailabilitySpec. 2025-02-12 19:39:30 -08:00
Allan Shortlidge
3142803d2f AST: Remove runtime version from AvailabilitySpec.
Instead of canonicalizing platform versions during parsing and storing two
versions, just canonicalize the parsed version on-demand when its requested.
2025-02-11 20:10:07 -08:00
Rintaro Ishizaki
04b2174c52 Merge pull request #79232 from rintaro/astgen-closure-anonparam
[ASTGen] Generate anonymous closure parameters
2025-02-10 11:44:12 -08:00
Rintaro Ishizaki
1c1570b5f6 Merge pull request #79203 from rintaro/astgen-miscavailableattr
[ASTGen] Generate miscellaneous availability related nodes
2025-02-07 20:14:17 -08:00
Rintaro Ishizaki
cb049d8ed1 [ASTGen] Generate anonymous closure parameters
E.g. '$0'
2025-02-07 19:39:57 -08:00
Rintaro Ishizaki
c56dd2efca [ASTGen] Generate miscellaneous availability related nodes
* `@_specialize` with `availability:` arguments
* `@backDeployed` attributes
* `@_originallyDefinedIn` attributes
* `#available()` and `#unavailable()` statement conditions
2025-02-07 10:01:07 -08:00
Michael Gottesman
d33371a51a Merge pull request #79178 from xedin/execution-attr-in-type-context
[AST/Parse] Initial implementation of `@execution(concurrent | caller)` in type context
2025-02-06 18:44:00 -08:00
Rintaro Ishizaki
9078714460 [BasicBriding] Use assumingMemoryBound(to:)
For accessing elements in BridgedArrayRef in Swift code.
2025-02-05 10:49:13 -08:00
Rintaro Ishizaki
7a5c957394 [ASTGen] Fix several header comments 2025-02-05 10:42:37 -08:00
Pavel Yaskevich
f206956a23 [AST] Add @execution(concurrent | caller) type attribute 2025-02-05 00:19:40 -08:00
Rintaro Ishizaki
df2ada37df [ASTGen] Generate AvailableAttr
* Move `AvailabilitySpec` handling logic to AST, so they can be shared
  between libParse and ASTGen
* Requestify '-define-availability' arguments parsing and parse them
  with 'SwiftParser' according to the 'ParserASTGen' feature flag
* Implement 'AvailableAttr' generation in ASTGen
2025-02-04 23:40:01 -08:00
Doug Gregor
4395537fa0 Introduce the @safe attribute as described in the opt-in safety checking proposal 2025-01-23 07:47:17 -08:00
Rintaro Ishizaki
99ba4b5354 Merge pull request #78670 from rintaro/swiftdiags-replace-trivia
[ASTGen/MacroEvaluation] Fix and adjust FixIt application
2025-01-22 09:32:53 -08:00
Pavel Yaskevich
667a976ec5 [ASTGen] Add support for @execution(...) attribute 2025-01-17 15:40:01 -08:00
Rintaro Ishizaki
f3329b3b5d [ASTGen/MacroEvaluation] Fix and adjust FixIt application
* Fix mismatch on 'FixIt.Change.replace' between several application
  implementations. Specifically '.replace' should includes the trivia.
* Ignore no-op 'FixIt.Change.replace{Leading|Trailing}Triviia'.
2025-01-16 10:04:08 -08:00
Doug Gregor
1b7707d2cc Remove the now-unused @safe(unchecked) 2025-01-10 10:39:16 -08:00
Doug Gregor
8bb5bbedbc Implement an unsafe expression to cover uses of unsafe constructs
Introduce an `unsafe` expression akin to `try` and `await` that notes
that there are unsafe constructs in the expression to the right-hand
side. Extend the effects checker to also check for unsafety along with
throwing and async operations. This will result in diagnostics like
the following:

    10 |   func sum() -> Int {
    11 |     withUnsafeBufferPointer { buffer in
    12 |       let value = buffer[0]
       |                   |     `- note: reference to unsafe subscript 'subscript(_:)'
       |                   |- warning: expression uses unsafe constructs but is not marked with 'unsafe'
       |                   `- note: reference to parameter 'buffer' involves unsafe type 'UnsafeBufferPointer<Int>'
    13 |       tryWithP(X())
    14 |       return fastAdd(buffer.baseAddress, buffer.count)

These will come with a Fix-It that inserts `unsafe` into the proper
place. There's also a warning that appears when `unsafe` doesn't cover
any unsafe code, making it easier to clean up extraneous `unsafe`.

This approach requires that `@unsafe` be present on any declaration
that involves unsafe constructs within its signature. Outside of the
signature, the `unsafe` expression is used to identify unsafe code.
2025-01-10 10:39:14 -08:00
Rintaro Ishizaki
660a2ea39a Merge pull request #78335 from rintaro/revert-revert-77140-swift-lexical-lookup-validation
Reapply "[SwiftLexicalLookup] New unqualified lookup implementation validation"
2025-01-06 09:12:45 -08:00
Joe Groff
5c4406b5e8 Add an @_addressableForDependencies type attribute.
This attribute makes it so that a parameter of the annotated type, as well as
any type structurally containing that type as a field, becomes passed as
if `@_addressable` if the return value of the function has a dependency on
the parameter. This allows nonescapable values to take interior pointers into
such types.
2025-01-02 21:33:51 -08:00