Skip to content

Commit

Permalink
Fix Macro Errors for Windows (#34299)
Browse files Browse the repository at this point in the history
Summary:
Fix macro errors for Windows. Current syntax breaks the build of the React Common project on Windows because the ({...}) syntax is not supported; must be replaced with lambda expressions.

Resolves #34090

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[General] [Fixed] - Fix macro errors for Windows.

lyahdav JoshuaGross

Pull Request resolved: #34299

Test Plan: Build on react-native-windows repo. Tested in RNW app.

Reviewed By: javache

Differential Revision: D38272966

Pulled By: NickGerleman

fbshipit-source-id: e76eac11cde173ef49465d01d793c593017f2ab7
  • Loading branch information
chiaramooney authored and facebook-github-bot committed Aug 2, 2022
1 parent cd595bd commit fc26dbf
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 21 deletions.
8 changes: 4 additions & 4 deletions ReactCommon/react/renderer/components/text/BaseTextProps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
#include <react/renderer/graphics/conversions.h>

#define GET_FIELD_VALUE(field, fieldName, defaultValue, rawValue) \
(rawValue.hasValue() ? ({ \
(rawValue.hasValue() ? ([&rawValue, &context] { \
decltype(defaultValue) res; \
fromRawValue(context, rawValue, res); \
res; \
}) \
: defaultValue)
return res; \
}()) \
: defaultValue);

#define REBUILD_FIELD_SWITCH_CASE( \
defaults, rawValue, property, field, fieldName) \
Expand Down
23 changes: 12 additions & 11 deletions ReactCommon/react/renderer/components/view/ViewProps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,18 @@ ViewProps::ViewProps(
#endif
{};

#define VIEW_EVENT_CASE(eventType, eventString) \
case CONSTEXPR_RAW_PROPS_KEY_HASH(eventString): { \
ViewEvents defaultViewEvents{}; \
events[eventType] = ({ \
bool res = defaultViewEvents[eventType]; \
if (value.hasValue()) { \
fromRawValue(context, value, res); \
} \
res; \
}); \
return; \
#define VIEW_EVENT_CASE(eventType, eventString) \
case CONSTEXPR_RAW_PROPS_KEY_HASH(eventString): { \
ViewEvents defaultViewEvents{}; \
events[eventType] = [ defaultViewEvents, &value, &context ]() constexpr { \
bool res = defaultViewEvents[eventType]; \
if (value.hasValue()) { \
fromRawValue(context, value, res); \
} \
return res; \
} \
(); \
return; \
}

void ViewProps::setProp(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class ConcreteComponentDescriptor : public ComponentDescriptor {
rawProps.iterateOverValues([&](RawPropsPropNameHash hash,
const char *propName,
RawValue const &fn) {
shadowNodeProps.get()->setProp(context, hash, propName, fn);
shadowNodeProps.get()->Props::setProp(context, hash, propName, fn);
});
}

Expand Down
8 changes: 3 additions & 5 deletions ReactCommon/react/renderer/core/PropsMacros.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@

// Get hash at compile-time. sizeof(str) - 1 == strlen
#define CONSTEXPR_RAW_PROPS_KEY_HASH(s) \
({ \
([]() constexpr { \
CLANG_PRAGMA("clang diagnostic push") \
CLANG_PRAGMA("clang diagnostic ignored \"-Wshadow\"") \
constexpr RawPropsPropNameHash propNameHash = \
folly::hash::fnv32_buf(s, sizeof(s) - 1); \
propNameHash; \
return folly::hash::fnv32_buf(s, sizeof(s) - 1); \
CLANG_PRAGMA("clang diagnostic pop") \
})
}())

#define RAW_PROPS_KEY_HASH(s) folly::hash::fnv32_buf(s, std::strlen(s))

Expand Down

0 comments on commit fc26dbf

Please sign in to comment.