@@ -1874,6 +1874,60 @@ static void swift_task_startOnMainActorImpl(AsyncTask* task) {
1874
1874
_swift_task_setCurrent (originalTask);
1875
1875
}
1876
1876
1877
+ // ==== Load-time setup code ----------------------------------------------------
1878
+ //
1879
+ // The ctor below is placed here so that it must always be linked into the final
1880
+ // image even if the libswift_Concurrency is linked in as a static library.
1881
+
1882
+ #if !SWIFT_CONCURRENCY_EMBEDDED
1883
+
1884
+ // Helper macros for figuring out the mangled name of a context descriptor.
1885
+ #define DESCRIPTOR_MANGLING_SUFFIX_Structure Mn
1886
+ #define DESCRIPTOR_MANGLING_SUFFIX_Class Mn
1887
+ #define DESCRIPTOR_MANGLING_SUFFIX_Enum Mn
1888
+ #define DESCRIPTOR_MANGLING_SUFFIX_Protocol Mp
1889
+
1890
+ #define DESCRIPTOR_MANGLING_SUFFIX_ (X ) X
1891
+ #define DESCRIPTOR_MANGLING_SUFFIX (KIND ) \
1892
+ DESCRIPTOR_MANGLING_SUFFIX_ (DESCRIPTOR_MANGLING_SUFFIX_##KIND)
1893
+
1894
+ #define DESCRIPTOR_MANGLING_ (CHAR, SUFFIX ) $sSc ##CHAR##SUFFIX
1895
+ #define DESCRIPTOR_MANGLING (CHAR, SUFFIX ) DESCRIPTOR_MANGLING_(CHAR, SUFFIX)
1896
+
1897
+ // Declare context descriptors for all of the concurrency descriptors with
1898
+ // standard manglings.
1899
+ #define STANDARD_TYPE (KIND, MANGLING, TYPENAME )
1900
+ #define STANDARD_TYPE_CONCURRENCY (KIND, MANGLING, TYPENAME ) \
1901
+ extern " C" const swift::ContextDescriptor DESCRIPTOR_MANGLING ( \
1902
+ MANGLING, DESCRIPTOR_MANGLING_SUFFIX (KIND));
1903
+ #include " swift/Demangling/StandardTypesMangling.def"
1904
+
1905
+ // Defined in Swift, redeclared here so we can register it with the runtime.
1906
+ extern " C" SWIFT_CC (swift)
1907
+ bool _swift_task_isCurrentGlobalActor (
1908
+ const swift::Metadata *, const swift::WitnessTable *);
1909
+
1910
+ // Register our type descriptors with standard manglings when the concurrency
1911
+ // runtime is loaded. This allows the runtime to quickly resolve those standard
1912
+ // manglings.
1913
+ SWIFT_ALLOWED_RUNTIME_GLOBAL_CTOR_BEGIN
1914
+ __attribute__ ((constructor)) static void setupStandardConcurrencyDescriptors () {
1915
+ static const swift::ConcurrencyStandardTypeDescriptors descriptors = {
1916
+ #define STANDARD_TYPE (KIND, MANGLING, TYPENAME )
1917
+ #define STANDARD_TYPE_CONCURRENCY (KIND, MANGLING, TYPENAME ) \
1918
+ &DESCRIPTOR_MANGLING (MANGLING, DESCRIPTOR_MANGLING_SUFFIX (KIND)),
1919
+ #include " swift/Demangling/StandardTypesMangling.def"
1920
+ };
1921
+ _swift_registerConcurrencyRuntime (
1922
+ &descriptors,
1923
+ &_swift_task_isCurrentGlobalActor);
1924
+ }
1925
+ SWIFT_ALLOWED_RUNTIME_GLOBAL_CTOR_END
1926
+
1927
+ #endif
1928
+
1929
+ // ==== Back-deploy hooks -------------------------------------------------------
1930
+
1877
1931
#define OVERRIDE_TASK COMPATIBILITY_OVERRIDE
1878
1932
1879
1933
#ifdef SWIFT_STDLIB_SUPPORT_BACK_DEPLOYMENT
0 commit comments