Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Change the definition of YGUndefined from NAN to __builtin_nanf(\"0\")",
"packageName": "react-native-windows",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

#pragma once

#include <math.h>
#include "YGEnums.h"
#include "YGMacros.h"

#if defined(_MSC_VER) && defined(__clang__)
#define COMPILING_WITH_CLANG_ON_WINDOWS
#endif
#if defined(COMPILING_WITH_CLANG_ON_WINDOWS)
#include <limits>
constexpr float YGUndefined = std::numeric_limits<float>::quiet_NaN();
#else
YG_EXTERN_C_BEGIN

#if defined(_MSC_VER)
#define YGUndefined __builtin_nanf("0")
#else
#define YGUndefined NAN
#endif

#endif

typedef struct YGValue {
float value;
YGUnit unit;
} YGValue;

YOGA_EXPORT extern const YGValue YGValueAuto;
YOGA_EXPORT extern const YGValue YGValueUndefined;
YOGA_EXPORT extern const YGValue YGValueZero;

#if !defined(COMPILING_WITH_CLANG_ON_WINDOWS)
YG_EXTERN_C_END
#endif
#undef COMPILING_WITH_CLANG_ON_WINDOWS

#ifdef __cplusplus

inline bool operator==(const YGValue& lhs, const YGValue& rhs) {
if (lhs.unit != rhs.unit) {
return false;
}

switch (lhs.unit) {
case YGUnitUndefined:
case YGUnitAuto:
return true;
case YGUnitPoint:
case YGUnitPercent:
return lhs.value == rhs.value;
}

return false;
}

inline bool operator!=(const YGValue& lhs, const YGValue& rhs) {
return !(lhs == rhs);
}

inline YGValue operator-(const YGValue& value) {
return {-value.value, value.unit};
}

namespace facebook {
namespace yoga {
namespace literals {

inline YGValue operator"" _pt(long double value) {
return YGValue{static_cast<float>(value), YGUnitPoint};
}
inline YGValue operator"" _pt(unsigned long long value) {
return operator"" _pt(static_cast<long double>(value));
}

inline YGValue operator"" _percent(long double value) {
return YGValue{static_cast<float>(value), YGUnitPercent};
}
inline YGValue operator"" _percent(unsigned long long value) {
return operator"" _percent(static_cast<long double>(value));
}

} // namespace literals
} // namespace yoga
} // namespace facebook

#endif
8 changes: 7 additions & 1 deletion vnext/overrides.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@
"baseHash": "95a6fd14e80719f9796942ffe59dd850a56d544c",
"issue": 9791
},
{
"type": "patch",
"file": "ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGValue.h",
"baseFile": "ReactCommon/yoga/yoga/YGValue.h",
"baseHash": "0b6b49a41787b7f5caee1792af488c66d33db3d8"
},
{
"type": "patch",
"file": "ReactCommon/Yoga.cpp",
Expand Down Expand Up @@ -514,4 +520,4 @@
"file": "src/typings-index.ts"
}
]
}
}