Commit db12591c authored by Christopher Dykes's avatar Christopher Dykes Committed by facebook-github-bot-1

Support constexpr_strlen under MSVC.

Summary: MSVC doesn't support evaluating strlen at compile time, so implement our own version instead.

Reviewed By: yfeldblum, lbrandy

Differential Revision: D2856926

fb-gh-sync-id: 22222350b57d9eff6a06c9d0f37d43a3cb1f2534
parent 58e3caa4
...@@ -439,9 +439,19 @@ inline void asm_pause() { ...@@ -439,9 +439,19 @@ inline void asm_pause() {
#endif #endif
} }
#ifdef _MSC_VER
constexpr size_t constexpr_strlen_internal(const char* s, size_t len) {
return *s == '\0' ? len : constexpr_strlen_internal(s + 1, len + 1);
}
static_assert(constexpr_strlen_internal("123456789", 0) == 9,
"Someone appears to have broken constexpr_strlen...");
#endif
constexpr size_t constexpr_strlen(const char* s) { constexpr size_t constexpr_strlen(const char* s) {
#if defined(__clang__) #if defined(__clang__)
return __builtin_strlen(s); return __builtin_strlen(s);
#elif defined(_MSC_VER)
return s == nullptr ? 0 : constexpr_strlen_internal(s, 0);
#else #else
return strlen(s); return strlen(s);
#endif #endif
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
#include <folly/Conv.h> #include <folly/Conv.h>
#include <folly/Portability.h>
#include <folly/Range.h> #include <folly/Range.h>
#include <folly/String.h> #include <folly/String.h>
#include <folly/Unicode.h> #include <folly/Unicode.h>
...@@ -487,7 +488,7 @@ dynamic parseNumber(Input& in) { ...@@ -487,7 +488,7 @@ dynamic parseNumber(Input& in) {
constexpr const char* maxInt = "9223372036854775807"; constexpr const char* maxInt = "9223372036854775807";
constexpr const char* minInt = "9223372036854775808"; constexpr const char* minInt = "9223372036854775808";
constexpr auto maxIntLen = __builtin_strlen(maxInt); constexpr auto maxIntLen = constexpr_strlen(maxInt);
if (*in != '.' && !wasE && in.getOpts().parse_numbers_as_strings) { if (*in != '.' && !wasE && in.getOpts().parse_numbers_as_strings) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment