| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_BASE_MACROS_H_ | 5 #ifndef V8_BASE_MACROS_H_ |
| 6 #define V8_BASE_MACROS_H_ | 6 #define V8_BASE_MACROS_H_ |
| 7 | 7 |
| 8 #include "include/v8stdint.h" | 8 #include "include/v8stdint.h" |
| 9 #include "src/base/build_config.h" | 9 #include "src/base/build_config.h" |
| 10 #include "src/base/compiler-specific.h" |
| 10 #include "src/base/logging.h" | 11 #include "src/base/logging.h" |
| 11 | 12 |
| 12 | 13 |
| 13 // The expression OFFSET_OF(type, field) computes the byte-offset | 14 // The expression OFFSET_OF(type, field) computes the byte-offset |
| 14 // of the specified field relative to the containing type. This | 15 // of the specified field relative to the containing type. This |
| 15 // corresponds to 'offsetof' (in stddef.h), except that it doesn't | 16 // corresponds to 'offsetof' (in stddef.h), except that it doesn't |
| 16 // use 0 or NULL, which causes a problem with the compiler warnings | 17 // use 0 or NULL, which causes a problem with the compiler warnings |
| 17 // we have enabled (which is also why 'offsetof' doesn't seem to work). | 18 // we have enabled (which is also why 'offsetof' doesn't seem to work). |
| 18 // Here we simply use the non-zero value 4, which seems to work. | 19 // Here we simply use the non-zero value 4, which seems to work. |
| 19 #define OFFSET_OF(type, field) \ | 20 #define OFFSET_OF(type, field) \ |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 #define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ | 118 #define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ |
| 118 TypeName() V8_DELETE; \ | 119 TypeName() V8_DELETE; \ |
| 119 DISALLOW_COPY_AND_ASSIGN(TypeName) | 120 DISALLOW_COPY_AND_ASSIGN(TypeName) |
| 120 | 121 |
| 121 | 122 |
| 122 // Newly written code should use V8_INLINE and V8_NOINLINE directly. | 123 // Newly written code should use V8_INLINE and V8_NOINLINE directly. |
| 123 #define INLINE(declarator) V8_INLINE declarator | 124 #define INLINE(declarator) V8_INLINE declarator |
| 124 #define NO_INLINE(declarator) V8_NOINLINE declarator | 125 #define NO_INLINE(declarator) V8_NOINLINE declarator |
| 125 | 126 |
| 126 | 127 |
| 127 // Newly written code should use V8_WARN_UNUSED_RESULT. | 128 // Newly written code should use WARN_UNUSED_RESULT. |
| 128 #define MUST_USE_RESULT V8_WARN_UNUSED_RESULT | 129 #define MUST_USE_RESULT WARN_UNUSED_RESULT |
| 129 | 130 |
| 130 | 131 |
| 131 // Define V8_USE_ADDRESS_SANITIZER macros. | 132 // Define V8_USE_ADDRESS_SANITIZER macros. |
| 132 #if defined(__has_feature) | 133 #if defined(__has_feature) |
| 133 #if __has_feature(address_sanitizer) | 134 #if __has_feature(address_sanitizer) |
| 134 #define V8_USE_ADDRESS_SANITIZER 1 | 135 #define V8_USE_ADDRESS_SANITIZER 1 |
| 135 #endif | 136 #endif |
| 136 #endif | 137 #endif |
| 137 | 138 |
| 138 // Define DISABLE_ASAN macros. | 139 // Define DISABLE_ASAN macros. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 166 #define SEMI_STATIC_JOIN_HELPER(a, b) a##b | 167 #define SEMI_STATIC_JOIN_HELPER(a, b) a##b |
| 167 // Causes an error during compilation of the condition is not | 168 // Causes an error during compilation of the condition is not |
| 168 // statically known to be true. It is formulated as a typedef so that | 169 // statically known to be true. It is formulated as a typedef so that |
| 169 // it can be used wherever a typedef can be used. Beware that this | 170 // it can be used wherever a typedef can be used. Beware that this |
| 170 // actually causes each use to introduce a new defined type with a | 171 // actually causes each use to introduce a new defined type with a |
| 171 // name depending on the source line. | 172 // name depending on the source line. |
| 172 template <int> class StaticAssertionHelper { }; | 173 template <int> class StaticAssertionHelper { }; |
| 173 #define STATIC_ASSERT(test) \ | 174 #define STATIC_ASSERT(test) \ |
| 174 typedef \ | 175 typedef \ |
| 175 StaticAssertionHelper<sizeof(StaticAssertion<static_cast<bool>((test))>)> \ | 176 StaticAssertionHelper<sizeof(StaticAssertion<static_cast<bool>((test))>)> \ |
| 176 SEMI_STATIC_JOIN(__StaticAssertTypedef__, __LINE__) V8_UNUSED | 177 SEMI_STATIC_JOIN(__StaticAssertTypedef__, __LINE__) ALLOW_UNUSED |
| 177 | 178 |
| 178 #endif | 179 #endif |
| 179 | 180 |
| 180 | 181 |
| 181 // The USE(x) template is used to silence C++ compiler warnings | 182 // The USE(x) template is used to silence C++ compiler warnings |
| 182 // issued for (yet) unused variables (typically parameters). | 183 // issued for (yet) unused variables (typically parameters). |
| 183 template <typename T> | 184 template <typename T> |
| 184 inline void USE(T) { } | 185 inline void USE(T) { } |
| 185 | 186 |
| 186 | 187 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 // Returns current value of top of the stack. Works correctly with ASAN. | 323 // Returns current value of top of the stack. Works correctly with ASAN. |
| 323 DISABLE_ASAN | 324 DISABLE_ASAN |
| 324 inline uintptr_t GetCurrentStackPosition() { | 325 inline uintptr_t GetCurrentStackPosition() { |
| 325 // Takes the address of the limit variable in order to find out where | 326 // Takes the address of the limit variable in order to find out where |
| 326 // the top of stack is right now. | 327 // the top of stack is right now. |
| 327 uintptr_t limit = reinterpret_cast<uintptr_t>(&limit); | 328 uintptr_t limit = reinterpret_cast<uintptr_t>(&limit); |
| 328 return limit; | 329 return limit; |
| 329 } | 330 } |
| 330 | 331 |
| 331 #endif // V8_BASE_MACROS_H_ | 332 #endif // V8_BASE_MACROS_H_ |
| OLD | NEW |