Commit Graph

51 Commits

Author SHA1 Message Date
Alex Lorenz
aff3568a12 [interop][SwiftToCxx] emit unavailable type stubs for top level types that could not be emitted in the C++ section of the generated header 2023-05-05 17:03:26 -07:00
Alex Lorenz
601802820e [interop][SwiftToCxx] do not assert when emitting a public var and function with the same C++ name 2023-04-24 14:03:46 -07:00
Alex Lorenz
4fda7f4a9a [interop][SwiftToCxx] do not expose APIs with imported declarations whose modules do not have a generated header as specified by the user
The frontend option '-clang-header-expose-module' allows the user to specify that APIs from an imported module have been exposed in another generated header, and thus APIs that depend on them can be safely exposed in the current generated header.
2023-03-10 12:34:02 -08:00
Alex Lorenz
0dc90d38c1 [interop][SwiftToCxx] emit Swift's stdlib inside of 'swift' namespace 2023-03-09 17:32:43 -08:00
Alex Lorenz
c2a93f0480 [interop][SwiftToCxx] allow emission of overloaded functions with the same name 2023-03-02 16:34:06 -08:00
Alex Lorenz
f8c3895f32 [interop][SwiftToCxx] print availability attributes for Swift decls in C++ 2023-02-27 12:07:36 -08:00
Alex Lorenz
3b3d6c825a [interop][SwiftToCxx] Annotate emitted declarations with Clang's external_source_symbol attribute
Each emitted declaration is annotated with the external_source_symbol with its own USR, to allow Clang's indexer to recognize this declaration as a Swift declaration with a specific USR
2023-01-12 12:15:01 -08:00
Alex Lorenz
2c83ff7643 Merge pull request #61823 from Robertorosmaninho/interop/ExpectedClassForErrorHandling
[Interop][SwiftToCxx] Introduces swift::Expected
2022-12-16 17:47:28 -08:00
Alex Lorenz
28af8bef55 [interop][SwiftToCxx] make it possible to convert Swift String to a std::string in C++
This is done by exposing nested Index and UTF8View type in String. Nested types aren't
supported yet, so we need to employ a number of hacks to emit them.
2022-12-14 16:22:41 -08:00
Roberto Rosmaninho
5fc55b6e4f Add <new> into every bridge header 2022-12-14 12:59:00 -03:00
Alex Lorenz
5c703b4f5c [interop][SwiftToCxx] support std::string -> Swift::String conversion in C++ 2022-12-13 13:13:05 -08:00
Alex Lorenz
7c2ee165cc [interop][SwiftToCxx] only emit metadata references for record types 2022-12-11 21:11:46 -08:00
Alex Lorenz
510b7675f4 [interop][CxxToSwiftToCxx] fix the tests for unsupported class template instantions; emit C++ type metadata accessors for type aliased templates 2022-12-08 21:28:29 -08:00
Alex Lorenz
0312e0613d [interop][SwiftToCxxToSwift] hide reverse interop module namespaces from forward interop 2022-11-07 15:52:04 -08:00
Slava Pestov
0e4ccb21ed AST: Remove various references to AbstractTypeParamDecl 2022-11-01 19:13:46 -04:00
Alex Lorenz
fdc0632659 [interop][SwiftToCxx] do not emit domain ObjC error values in C++ mode 2022-10-21 12:47:18 -07:00
Alex Lorenz
f8b54e7ea7 [interop][SwiftToCxx] guard inline emitted Stdlib module 2022-10-03 11:31:06 -07:00
Alex Lorenz
dd7e068391 [interop][SwiftToCxx] add a Swift stdlib overlay header
It currently provides begin and end functions for array iteration
2022-09-29 07:41:54 -07:00
Alex Lorenz
43848fdb14 Merge pull request #61342 from apple/eng/fwd-decl-no-bridge
[interop][SwiftToCxx] forward declare - do not use bridged types in C…
2022-09-28 21:57:59 -07:00
Alex Lorenz
3dfcb96ad5 [interop][SwiftToCxx] forward declare - do not use bridged types in C++ mode
This allows SDK's stdlib Array to correctly decl String forward declaration
2022-09-28 14:11:13 -07:00
Alex Lorenz
3a9b6dce9d [interop][SwiftToCxx] add support for emitting Swift stdlib dependency in one header file
This is the default behavior. You can disable this by specifying the -clang-header-expose-decls= flag explicitly when generating the header
2022-09-28 08:08:48 -07:00
Alex Lorenz
2a05109c58 [interop][SwiftToCxx] Declare the generic usability type trait before the C++ class that represents the Swift type
This allows you to import a method that returns the type of the context in which the method is declared when such
type is a generic parameter in another type. This means that it's now possible to bridge the initializer for
RawRepresentable enums.
2022-09-21 07:57:32 -07:00
Alex Lorenz
88913c1d65 [interop][SwiftToCxx] expose generic type traits for C++ types in generated header before it's used first 2022-09-13 07:47:30 -07:00
Alex Lorenz
d5c531fefc [interop][SwiftToCxx] experimentally expose exposable Swift's Array members to C++ 2022-09-12 20:42:16 -07:00
Alex Lorenz
1a449f5904 [interop][SwiftToCxx] emit members in extensions for same-type 2022-09-12 20:38:21 -07:00
Alex Lorenz
26e5742fe7 [interop][SwiftToCxx] emit generic type traits for C++ types bridged into Swift and then back to C++ 2022-09-12 12:39:30 -07:00
Alex Lorenz
b4d7a0c208 [interop][SwiftToCxx] bridge returned C++ record types back to C++ from Swift 2022-09-11 18:42:41 -07:00
Tongjie Wang
cbc23cbafc [Interop][SwiftToCxx] Support enum creation from Cxx 2022-08-29 20:16:52 -07:00
Alex Lorenz
e9450cf80b [interop][SwiftToCxx] add a test to print out empty Swift stdlib module 2022-08-24 15:10:11 -07:00
Alex Lorenz
8de79390be [interop][SwiftToCxx] add @_expose(Cxx) attribute support
This attribute instructs the compiler that this declaration should be included in the generated C++ bindings
2022-08-24 10:14:07 -07:00
Alex Lorenz
489c16e906 [interop][SwiftToCxx] fix the circular depedency issue for struct emission 2022-08-19 15:02:56 -07:00
Alex Lorenz
94f6496431 [interop][SwiftToCxx] NFC,do not require definition of protocols for classes in C++ generation mode 2022-08-16 10:44:18 -07:00
Alex Lorenz
26d55a2b83 [interop][SwiftToCxx] start emitting bindings for Swift class types
This includes release on destruction, and correctly returning class values from Swift to C++.
2022-08-02 09:25:35 +01:00
Alex Lorenz
32723f7e67 [interop][SwiftToCxx] initial generic function support: pass generic parameters
Only primitive types are supported at the moment from C++ as the type traits aren't emitted for all types yet
2022-07-28 22:52:21 +01:00
Becca Royal-Gordon
dfb8d7452a Merge pull request #59672 from beccadax/what-is-the-protocol-for-generating-sendable
Ignore Sendable conformances in PrintAsClang
2022-06-23 17:15:09 -07:00
Becca Royal-Gordon
8a8e71ea09 Ignore Sendable conformances in PrintAsClang
PrintAsClang previously tried to print Sendable conformances, which tripped an assertion and failed. Skip them instead.

Fixes rdar://95241184.
2022-06-23 13:16:41 -07:00
Tongjie Wang
890ef3d269 clang-format on TODO 2022-06-21 20:25:02 -07:00
Tongjie Wang
c26e6b062b Improve test cases and change a FIXME to TODO 2022-06-21 15:56:49 -07:00
Tongjie Wang
00598e8019 [interop][SwiftToCxx] add initial support for passing/returning enums 2022-06-20 00:45:07 -07:00
Alex Lorenz
d7fd1233a9 [interop][SwiftToCxx] emit instance property getters for structs 2022-06-14 17:20:37 -07:00
Alex Lorenz
9254c47b2c [interop][SwiftToCxx] emit swift type metadata access function declaration for structs 2022-06-13 09:16:17 -07:00
Alex Lorenz
132729906c [interop][SwiftToCxx] pass / return Swift struct values between C/C++ and Swift 2022-06-08 07:03:24 -07:00
Alex Lorenz
42c6ff63b8 [interop][SwiftToCxx] Gather initial struct layout information and emit struct stubs with storage in C++
This change extends the clang header printer to start emitting C++ classes for Swift struct types with the correct struct layout in them (size + alignment)
2022-06-01 14:06:25 -07:00
Alex Lorenz
a7053e458f [interop][swiftToCxx] emit empty skeleton C++ classes for Swift struct decls 2022-05-25 12:26:25 -07:00
Alex Lorenz
9d56de1c0c [interop] NFC, create ClangSyntaxPrinter class 2022-03-24 09:07:09 -07:00
Alex Lorenz
81a9cade88 [interop] generate C interfaces for Swift top-level functions that use primitive types 2022-03-22 16:13:42 -07:00
Alex Lorenz
86f9162606 [PrintAsClang] NFC, refactor primitive type mapping logic out from DeclAndTypePrinter
This will allow us to use type mappings in the C ABI function printer.
2022-03-21 11:26:58 -07:00
Alex Lorenz
80bc75ab9b [cxx-interop] Emit C++ declarations only when '-clang-header-expose-public-decl' is enabled
This fix also ensures that we only emit C++ functions for now
2022-03-20 20:22:02 -07:00
Alex Lorenz
fcdcb2a9f1 [interop][SwiftToC++] print C++ interface for top-level Swift functions 2022-03-09 14:53:12 -08:00
Alex Lorenz
54b466f983 [interop] emit a parsable C++ header for a module that includes namespace declaration for the module interface 2022-01-21 07:14:56 -08:00