Commit Graph

51 Commits

Author SHA1 Message Date
Alex Lorenz
394c5bc7ce [interop] fix tests after fixing private annotations on the 'swift' namespace 2023-03-18 19:30:06 -07:00
Alex Lorenz
94c1de7611 [interop][SwiftToCxx] use 'SWIFT_INLINE_PRIVATE_HELPER' macro for static returnNewValue functions to ensure attribute(used) isn't applied to them 2023-03-15 09:13:38 -07:00
Alex Lorenz
3cce09e769 [interop][SwiftToCxx] annotate several value members types as 'noexcept'
C++/clang is more strict about requiring noexcept in templates so we need some explicit annotations
2023-03-12 11:49:14 -07:00
Alex Lorenz
0dc90d38c1 [interop][SwiftToCxx] emit Swift's stdlib inside of 'swift' namespace 2023-03-09 17:32:43 -08:00
Alex Lorenz
97dc2758d7 Merge pull request #64075 from hyp/eng/lambda-attrs
[interop][SwiftToCxx] use 'nodebug' for inline thunks and apply inline and artificial attributes to lambd…
2023-03-03 21:37:25 -08:00
Alex Lorenz
7caf34c190 [interop][SwiftToCxx] apply inline and artificial attributes to lambdas used with returnNewValue 2023-03-03 11:45:46 -08:00
Augusto Noronha
6f68fb0dde Merge pull request #63950 from augusto2112/print-debug-name
Print debug name
2023-03-01 15:14:55 -08:00
Augusto Noronha
c3d3c37c15 Adapt tests to have the Swift mangled name as a field in interop types 2023-02-27 15:58:03 -08:00
Alex Lorenz
3948a2a5d3 [interop][SwiftToCxx] annotate inline thunks with SWIFT_INLINE_THUNK
This macro applies always_inline in addition to inline. It also applies artificial, which lets debugger know that this is an artificial function. The used attribute is added in debug builds to ensure that the symbol is emitted in the binary so that LLDB can invoke it.
2023-02-24 11:23:46 -08:00
Alex Lorenz
cc5b557cee [interop][SwiftToCxx] Attach SWIFT_SYMBOL to C++ enum case declarations 2023-01-12 14:01:30 -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
0312e0613d [interop][SwiftToCxxToSwift] hide reverse interop module namespaces from forward interop 2022-11-07 15:52:04 -08:00
Alex Lorenz
8336edd344 [interop][SwiftToCxx] add support for constructing generic enum cases in C++
We only support cases with no payload, or one associated value still
2022-11-03 12:21:27 -07:00
Alex Lorenz
c179e23b19 [interop][SwiftToCxx] add static_assert type checking for generic types in pre-C++20 mode 2022-11-01 17:36:37 -07:00
Alex Lorenz
a66cc52109 [interop][SwiftToCxx] add static_assert type checking for generic functions in pre-C++20 mode
In the future we should also use enable_if to correctly resolve overloads
2022-11-01 17:21:01 -07:00
Alex Lorenz
4b52ae08fa [interop][SwiftToCxx] check that generics can be built in C++17/C++14 mode 2022-11-01 16:40:42 -07:00
Alex Lorenz
953c124ceb [interop][SwiftToCxx] guard 'requires' clauses in __cpp_concepts #ifdefs 2022-11-01 16:17:10 -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
2132cc91d0 [interop][SwiftToCxx] do not use std::move to move the returned C++ value
move needs <utility>, which is not includable in the test SDK.
2022-09-19 12:25:42 -07:00
Alex Lorenz
7925701ed3 [interop][SwiftToCxx] support returning class values in enum's generic associated value getter 2022-09-14 12:37:27 -07:00
Alex Lorenz
773a0436cf [interop][SwiftToCxx] extract generic associated value from enum 2022-09-14 12:21:18 -07:00
Alex Lorenz
07337cdaf6 [interop][SwiftToCxx] initial generic enum support 2022-09-14 11:37:50 -07:00
Alex Lorenz
0dcb8b58e5 [interop][SwiftToCxx] use C++ types bridged to Swift in Swift generic context from C++ ♾ 2022-09-12 13:05:49 -07:00
Alex Lorenz
4c7015ad68 [interop][SwiftToCxx] ensure LoadableByAddress lowering is done on the SILFunction for while we're lowering the signature for
This correctly now passes self parameters for direct values that are too large to be direct
2022-09-07 17:42:50 -07:00
Alex Lorenz
1696f94223 [interop][SwiftToCxx] reimplement function lowering to correctly distinguish between direct/indirect return values and parameters 2022-09-07 11:43:38 -07:00
Alex Lorenz
3e4b52c42a [interop][SwiftToCxx] add support for generic methods in generic structs ♺ 2022-09-01 13:01:26 -07:00
Alex Lorenz
6e8b0be181 [interop][SwiftToCxx] add test to cover initializer in generic struct 2022-09-01 12:35:51 -07:00
Alex Lorenz
d9f4c072cc [interop][SwiftToCxx] correctly invoke property accessors in generic structs 2022-09-01 06:57:49 -07:00
Alex Lorenz
a5043c354d [interop][SwiftToCxx] add support for invoking methods in generic structs 2022-08-31 20:19:19 -07:00
Alex Lorenz
ef5d11aab8 [interop][SwiftToCxx] NFC, Make swift::getTypeMetadata accessor part of struct template
This allows partial template specializations for adding metadata accessor for generic types 🤩
2022-08-31 17:16:45 -07:00
Alex Lorenz
4154b56745 [interop][SwiftToCxx] unify generic function printing with generic struct printing
This is a pre-requisite for supporting methods in generic structs.
2022-08-31 15:31:04 -07:00
Alex Lorenz
907b3a949c [interop][SwiftToCxx] NFC, test remove unused warning flag 2022-08-31 14:02:17 -07:00
Alex Lorenz
f89f64a5cb [interop][SwiftToCxx] add support for passing generic structs with concrete type params 2022-08-31 14:02:17 -07:00
Alex Lorenz
031b779031 [interop][SwiftToCxx] add support for returning generic types bounded to concrete generic params 2022-08-31 14:02:17 -07:00
Alex Lorenz
c526ac8a0d [interop][SwiftToCxx] add 'inout' support for passing generic struct 2022-08-31 14:02:17 -07:00
Alex Lorenz
7012efd2cd [interop][SwiftToCxx] add a testcase for generic struct passthrough 2022-08-31 14:02:17 -07:00
Alex Lorenz
6f43efe264 [interop][SwiftToCxx] add a restriction for calling only supported type metadata accessor function for generic types 2022-08-31 14:02:17 -07:00
Alex Lorenz
9f26709ffc [interop][SwiftToCxx] cleanup generic struct tests 2022-08-31 14:02:17 -07:00
Alex Lorenz
7d6cdbc445 [interop][SwiftToCxx] pass generic type to a function by value (non specialized generic though) 2022-08-31 14:02:17 -07:00
Alex Lorenz
ebd8dea0fd [interop][SwiftToCxx] return generic structs without concrete type specialization 2022-08-31 14:02:17 -07:00
Alex Lorenz
45d209fe1c [interop][SwiftToCxx] initial generic struct support 2022-08-31 14:02:15 -07:00
Alex Lorenz
a89d4f3ced [interop][SwiftToCxx] add support for generic methods 2022-08-29 14:11:33 -07:00
Alex Lorenz
c08428cd56 [interop][SwiftToCxx] do not support generics with requirements for now 2022-08-29 12:14:33 -07:00
Alex Lorenz
f371c4307b [interop][SwiftToCxx] pass boxed resilient value types to generic functions correctly 2022-08-09 14:16:58 -07:00
Alex Lorenz
330fc0b07a [interop][SwiftToCxx] generic functions should return value types correctly 2022-08-09 05:20:58 -07:00
Alex Lorenz
bf224c75a6 [interop][SwiftToCxx] pass structs to generic functions 2022-08-08 15:28:00 -07:00
Alex Lorenz
a9f262e322 [interop][SwiftToCxx] add support for passing and returning class values to generic functions 2022-08-08 08:38:28 -07:00
Alex Lorenz
af32bbf8f3 [interop][SwiftToCxx] generics: add support for returning primitive generic types 2022-08-01 10:28:03 +01:00
Alex Lorenz
c31b6cfb0c [interop][SwiftToCxx] generics: support inOut generic param 2022-07-29 09:15:40 +01:00