Use enum classes in C++ Turbo Modules (#41923)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41923

Changelog: [Internal][BREAKING] Use C++ enum classes in C++ Turbo Modules

Problem:
Using **C styles** `enums` can easily cause compiliation errors if symbol names collide. This code does not compile:
```
enum CustomEnumInt { A = 23, B = 42 };

static int A = 22;
```

This **C++ code**, using `enum classes` compiles:
```
enum class CustomEnumInt : int32_t { A = 23, B = 42 };

static int A = 22;
```

Reviewed By: rshest

Differential Revision: D52098598

fbshipit-source-id: c919bd2e41970c83a032fec91b0537cd6fae8397
This commit is contained in:
Christoph Purrer
2023-12-14 06:54:49 -08:00
committed by Facebook GitHub Bot
parent 1e22fa39ea
commit 8183afeb81
4 changed files with 55 additions and 58 deletions
@@ -180,11 +180,7 @@ function translatePrimitiveJSTypeToCpp(
case 'EnumDeclaration':
switch (realTypeAnnotation.memberType) {
case 'NumberTypeAnnotation':
return getAreEnumMembersInteger(
enumMap[realTypeAnnotation.name].members,
)
? wrap('int')
: wrap('double');
return wrap('jsi::Value');
case 'StringTypeAnnotation':
return wrap('jsi::String');
default:
@@ -466,7 +462,7 @@ const EnumTemplate = ({
return `
#pragma mark - ${enumName}
enum ${enumName} { ${values} };
enum class ${enumName} { ${values} };
template <>
struct Bridging<${enumName}> {