diff --git a/packages/react-native/React/Base/RCTBridge.h b/packages/react-native/React/Base/RCTBridge.h index 37dc4be6218..68651edb771 100644 --- a/packages/react-native/React/Base/RCTBridge.h +++ b/packages/react-native/React/Base/RCTBridge.h @@ -31,25 +31,31 @@ */ typedef NSArray> * (^RCTBridgeModuleListProvider)(void); +RCT_EXTERN_C_BEGIN + /** * This function returns the module name for a given class. */ -RCT_EXTERN NSString *RCTBridgeModuleNameForClass(Class bridgeModuleClass); +NSString *RCTBridgeModuleNameForClass(Class bridgeModuleClass); /** * Experimental. * Check/set if JSI-bound NativeModule is enabled. By default it's off. */ -RCT_EXTERN BOOL RCTTurboModuleEnabled(void); -RCT_EXTERN void RCTEnableTurboModule(BOOL enabled); +BOOL RCTTurboModuleEnabled(void); +void RCTEnableTurboModule(BOOL enabled); // Turn on TurboModule interop -RCT_EXTERN BOOL RCTTurboModuleInteropEnabled(void); -RCT_EXTERN void RCTEnableTurboModuleInterop(BOOL enabled); +BOOL RCTTurboModuleInteropEnabled(void); +void RCTEnableTurboModuleInterop(BOOL enabled); // Turn on TurboModule interop's Bridge proxy -RCT_EXTERN BOOL RCTTurboModuleInteropBridgeProxyEnabled(void); -RCT_EXTERN void RCTEnableTurboModuleInteropBridgeProxy(BOOL enabled); +BOOL RCTTurboModuleInteropBridgeProxyEnabled(void); +void RCTEnableTurboModuleInteropBridgeProxy(BOOL enabled); + +// Turn on TurboModule sync execution of void methods +BOOL RCTTurboModuleSyncVoidMethodsEnabled(void); +void RCTEnableTurboModuleSyncVoidMethods(BOOL enabled); typedef enum { kRCTBridgeProxyLoggingLevelNone, @@ -57,12 +63,12 @@ typedef enum { kRCTBridgeProxyLoggingLevelError, } RCTBridgeProxyLoggingLevel; -RCT_EXTERN RCTBridgeProxyLoggingLevel RCTTurboModuleInteropBridgeProxyLogLevel(void); -RCT_EXTERN void RCTSetTurboModuleInteropBridgeProxyLogLevel(RCTBridgeProxyLoggingLevel logLevel); +RCTBridgeProxyLoggingLevel RCTTurboModuleInteropBridgeProxyLogLevel(void); +void RCTSetTurboModuleInteropBridgeProxyLogLevel(RCTBridgeProxyLoggingLevel logLevel); // Route all TurboModules through TurboModule interop -RCT_EXTERN BOOL RCTTurboModuleInteropForAllTurboModulesEnabled(void); -RCT_EXTERN void RCTEnableTurboModuleInteropForAllTurboModules(BOOL enabled); +BOOL RCTTurboModuleInteropForAllTurboModulesEnabled(void); +void RCTEnableTurboModuleInteropForAllTurboModules(BOOL enabled); typedef enum { kRCTGlobalScope, @@ -70,8 +76,10 @@ typedef enum { kRCTTurboModuleManagerScope, } RCTTurboModuleCleanupMode; -RCT_EXTERN RCTTurboModuleCleanupMode RCTGetTurboModuleCleanupMode(void); -RCT_EXTERN void RCTSetTurboModuleCleanupMode(RCTTurboModuleCleanupMode mode); +RCTTurboModuleCleanupMode RCTGetTurboModuleCleanupMode(void); +void RCTSetTurboModuleCleanupMode(RCTTurboModuleCleanupMode mode); + +RCT_EXTERN_C_END /** * Async batched bridge used to communicate with the JavaScript application. diff --git a/packages/react-native/React/Base/RCTBridge.mm b/packages/react-native/React/Base/RCTBridge.mm index c2d9b17ba03..d0598e621e2 100644 --- a/packages/react-native/React/Base/RCTBridge.mm +++ b/packages/react-native/React/Base/RCTBridge.mm @@ -139,6 +139,17 @@ void RCTEnableTurboModuleInteropForAllTurboModules(BOOL enabled) useTurboModuleInteropForAllTurboModules = enabled; } +// Turn on TurboModule sync execution of void methods +static BOOL gTurboModuleEnableSyncVoidMethods = NO; +BOOL RCTTurboModuleSyncVoidMethodsEnabled(void) +{ + return gTurboModuleEnableSyncVoidMethods; +} +void RCTEnableTurboModuleSyncVoidMethods(BOOL enabled) +{ + gTurboModuleEnableSyncVoidMethods = enabled; +} + @interface RCTBridge () @end diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm index 060cc5743c3..43111495217 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm @@ -375,7 +375,7 @@ static Class getFallbackClassFromName(const char *name) .jsInvoker = _jsInvoker, .nativeMethodCallInvoker = nativeMethodCallInvoker, .isSyncModule = methodQueue == RCTJSThread, - .shouldVoidMethodsExecuteSync = false, + .shouldVoidMethodsExecuteSync = RCTTurboModuleSyncVoidMethodsEnabled(), }; auto turboModule = [(id)module getTurboModule:params]; @@ -438,7 +438,7 @@ static Class getFallbackClassFromName(const char *name) .jsInvoker = _jsInvoker, .nativeMethodCallInvoker = std::move(nativeMethodCallInvoker), .isSyncModule = methodQueue == RCTJSThread, - .shouldVoidMethodsExecuteSync = false, + .shouldVoidMethodsExecuteSync = RCTTurboModuleSyncVoidMethodsEnabled(), }; auto turboModule = std::make_shared(params);