diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-12-04 08:20:37 +0100 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-12-06 15:23:33 +0100 |
commit | 9b4bf7de6c9a7c25f116c7a502384c20b5cfaea3 (patch) | |
tree | 2b0c843168dafb939d8df8a15b2aa72b76dee51d /deps/v8/src/base/macros.h | |
parent | b8fbe69db1292307adb2c2b2e0d5ef48c4ab2faf (diff) | |
download | android-node-v8-9b4bf7de6c9a7c25f116c7a502384c20b5cfaea3.tar.gz android-node-v8-9b4bf7de6c9a7c25f116c7a502384c20b5cfaea3.tar.bz2 android-node-v8-9b4bf7de6c9a7c25f116c7a502384c20b5cfaea3.zip |
deps: update V8 to 7.1.302.28
PR-URL: https://github.com/nodejs/node/pull/23423
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Diffstat (limited to 'deps/v8/src/base/macros.h')
-rw-r--r-- | deps/v8/src/base/macros.h | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/deps/v8/src/base/macros.h b/deps/v8/src/base/macros.h index 081018cc2e..8a2efe61a9 100644 --- a/deps/v8/src/base/macros.h +++ b/deps/v8/src/base/macros.h @@ -14,6 +14,9 @@ // No-op macro which is used to work around MSVC's funky VA_ARGS support. #define EXPAND(x) x +// This macro does nothing. That's all. +#define NOTHING(...) + // TODO(all) Replace all uses of this macro with C++'s offsetof. To do that, we // have to make sure that only standard-layout types and simple field // designators are used. @@ -195,8 +198,9 @@ V8_INLINE Dest bit_cast(Source const& source) { #define V8_IMMEDIATE_CRASH() ((void(*)())0)() #endif - -// TODO(all) Replace all uses of this macro with static_assert, remove macro. +// A convenience wrapper around static_assert without a string message argument. +// Once C++17 becomes the default, this macro can be removed in favor of the +// new static_assert(condition) overload. #define STATIC_ASSERT(test) static_assert(test, #test) namespace v8 { @@ -276,6 +280,12 @@ struct Use { (void)unused_tmp_array_for_use_macro; \ } while (false) +// Evaluate the instantiations of an expression with parameter packs. +// Since USE has left-to-right evaluation order of it's arguments, +// the parameter pack is iterated from left to right and side effects +// have defined behavior. +#define ITERATE_PACK(...) USE(0, ((__VA_ARGS__), 0)...) + } // namespace base } // namespace v8 @@ -346,47 +356,37 @@ V8_INLINE A implicit_cast(A x) { // write V8_2PART_UINT64_C(0x12345678,90123456); #define V8_2PART_UINT64_C(a, b) (((static_cast<uint64_t>(a) << 32) + 0x##b##u)) - -// Compute the 0-relative offset of some absolute value x of type T. -// This allows conversion of Addresses and integral types into -// 0-relative int offsets. -template <typename T> -constexpr inline intptr_t OffsetFrom(T x) { - return x - static_cast<T>(0); -} - - -// Compute the absolute value of type T for some 0-relative offset x. -// This allows conversion of 0-relative int offsets into Addresses and -// integral types. -template <typename T> -constexpr inline T AddressFrom(intptr_t x) { - return static_cast<T>(static_cast<T>(0) + x); -} - - // Return the largest multiple of m which is <= x. template <typename T> inline T RoundDown(T x, intptr_t m) { + STATIC_ASSERT(std::is_integral<T>::value); // m must be a power of two. DCHECK(m != 0 && ((m & (m - 1)) == 0)); - return AddressFrom<T>(OffsetFrom(x) & -m); + return x & -m; } template <intptr_t m, typename T> constexpr inline T RoundDown(T x) { + STATIC_ASSERT(std::is_integral<T>::value); // m must be a power of two. STATIC_ASSERT(m != 0 && ((m & (m - 1)) == 0)); - return AddressFrom<T>(OffsetFrom(x) & -m); + return x & -m; } // Return the smallest multiple of m which is >= x. template <typename T> inline T RoundUp(T x, intptr_t m) { + STATIC_ASSERT(std::is_integral<T>::value); return RoundDown<T>(static_cast<T>(x + m - 1), m); } template <intptr_t m, typename T> constexpr inline T RoundUp(T x) { - return RoundDown<m, T>(static_cast<T>(x + m - 1)); + STATIC_ASSERT(std::is_integral<T>::value); + return RoundDown<m, T>(static_cast<T>(x + (m - 1))); +} + +template <typename T, typename U> +inline bool IsAligned(T value, U alignment) { + return (value & (alignment - 1)) == 0; } inline void* AlignedAddress(void* address, size_t alignment) { |