| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | 27 |
| 28 #ifndef V8_GLOBALS_H_ | 28 #ifndef V8_GLOBALS_H_ |
| 29 #define V8_GLOBALS_H_ | 29 #define V8_GLOBALS_H_ |
| 30 | 30 |
| 31 #include "../include/v8stdint.h" | 31 #include "../include/v8stdint.h" |
| 32 | 32 |
| 33 #include "base/macros.h" |
| 34 |
| 33 // Unfortunately, the INFINITY macro cannot be used with the '-pedantic' | 35 // Unfortunately, the INFINITY macro cannot be used with the '-pedantic' |
| 34 // warning flag and certain versions of GCC due to a bug: | 36 // warning flag and certain versions of GCC due to a bug: |
| 35 // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11931 | 37 // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11931 |
| 36 // For now, we use the more involved template-based version from <limits>, but | 38 // For now, we use the more involved template-based version from <limits>, but |
| 37 // only when compiling with GCC versions affected by the bug (2.96.x - 4.0.x) | 39 // only when compiling with GCC versions affected by the bug (2.96.x - 4.0.x) |
| 38 #if V8_CC_GNU && V8_GNUC_PREREQ(2, 96, 0) && !V8_GNUC_PREREQ(4, 1, 0) | 40 #if V8_CC_GNU && V8_GNUC_PREREQ(2, 96, 0) && !V8_GNUC_PREREQ(4, 1, 0) |
| 39 # include <limits> // NOLINT | 41 # include <limits> // NOLINT |
| 40 # define V8_INFINITY std::numeric_limits<double>::infinity() | 42 # define V8_INFINITY std::numeric_limits<double>::infinity() |
| 41 #elif V8_LIBC_MSVCRT | 43 #elif V8_LIBC_MSVCRT |
| 42 # define V8_INFINITY HUGE_VAL | 44 # define V8_INFINITY HUGE_VAL |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 typedef uint16_t uc16; | 315 typedef uint16_t uc16; |
| 314 typedef int32_t uc32; | 316 typedef int32_t uc32; |
| 315 const int kOneByteSize = kCharSize; | 317 const int kOneByteSize = kCharSize; |
| 316 const int kUC16Size = sizeof(uc16); // NOLINT | 318 const int kUC16Size = sizeof(uc16); // NOLINT |
| 317 | 319 |
| 318 | 320 |
| 319 // Round up n to be a multiple of sz, where sz is a power of 2. | 321 // Round up n to be a multiple of sz, where sz is a power of 2. |
| 320 #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) | 322 #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) |
| 321 | 323 |
| 322 | 324 |
| 323 // The expression OFFSET_OF(type, field) computes the byte-offset | |
| 324 // of the specified field relative to the containing type. This | |
| 325 // corresponds to 'offsetof' (in stddef.h), except that it doesn't | |
| 326 // use 0 or NULL, which causes a problem with the compiler warnings | |
| 327 // we have enabled (which is also why 'offsetof' doesn't seem to work). | |
| 328 // Here we simply use the non-zero value 4, which seems to work. | |
| 329 #define OFFSET_OF(type, field) \ | |
| 330 (reinterpret_cast<intptr_t>(&(reinterpret_cast<type*>(4)->field)) - 4) | |
| 331 | |
| 332 | |
| 333 // The expression ARRAY_SIZE(a) is a compile-time constant of type | |
| 334 // size_t which represents the number of elements of the given | |
| 335 // array. You should only use ARRAY_SIZE on statically allocated | |
| 336 // arrays. | |
| 337 #define ARRAY_SIZE(a) \ | |
| 338 ((sizeof(a) / sizeof(*(a))) / \ | |
| 339 static_cast<size_t>(!(sizeof(a) % sizeof(*(a))))) | |
| 340 | |
| 341 | |
| 342 // The USE(x) template is used to silence C++ compiler warnings | 325 // The USE(x) template is used to silence C++ compiler warnings |
| 343 // issued for (yet) unused variables (typically parameters). | 326 // issued for (yet) unused variables (typically parameters). |
| 344 template <typename T> | 327 template <typename T> |
| 345 inline void USE(T) { } | 328 inline void USE(T) { } |
| 346 | 329 |
| 347 | 330 |
| 348 // FUNCTION_ADDR(f) gets the address of a C function f. | 331 // FUNCTION_ADDR(f) gets the address of a C function f. |
| 349 #define FUNCTION_ADDR(f) \ | 332 #define FUNCTION_ADDR(f) \ |
| 350 (reinterpret_cast<v8::internal::Address>(reinterpret_cast<intptr_t>(f))) | 333 (reinterpret_cast<v8::internal::Address>(reinterpret_cast<intptr_t>(f))) |
| 351 | 334 |
| 352 | 335 |
| 353 // FUNCTION_CAST<F>(addr) casts an address into a function | 336 // FUNCTION_CAST<F>(addr) casts an address into a function |
| 354 // of type F. Used to invoke generated code from within C. | 337 // of type F. Used to invoke generated code from within C. |
| 355 template <typename F> | 338 template <typename F> |
| 356 F FUNCTION_CAST(Address addr) { | 339 F FUNCTION_CAST(Address addr) { |
| 357 return reinterpret_cast<F>(reinterpret_cast<intptr_t>(addr)); | 340 return reinterpret_cast<F>(reinterpret_cast<intptr_t>(addr)); |
| 358 } | 341 } |
| 359 | 342 |
| 360 | 343 |
| 361 // A macro to disallow the evil copy constructor and operator= functions | |
| 362 // This should be used in the private: declarations for a class | |
| 363 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ | |
| 364 TypeName(const TypeName&) V8_DELETE; \ | |
| 365 void operator=(const TypeName&) V8_DELETE | |
| 366 | |
| 367 | |
| 368 // A macro to disallow all the implicit constructors, namely the | |
| 369 // default constructor, copy constructor and operator= functions. | |
| 370 // | |
| 371 // This should be used in the private: declarations for a class | |
| 372 // that wants to prevent anyone from instantiating it. This is | |
| 373 // especially useful for classes containing only static methods. | |
| 374 #define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ | |
| 375 TypeName() V8_DELETE; \ | |
| 376 DISALLOW_COPY_AND_ASSIGN(TypeName) | |
| 377 | |
| 378 | |
| 379 // Newly written code should use V8_INLINE and V8_NOINLINE directly. | |
| 380 #define INLINE(declarator) V8_INLINE declarator | |
| 381 #define NO_INLINE(declarator) V8_NOINLINE declarator | |
| 382 | |
| 383 | |
| 384 // Newly written code should use V8_WARN_UNUSED_RESULT. | |
| 385 #define MUST_USE_RESULT V8_WARN_UNUSED_RESULT | |
| 386 | |
| 387 | |
| 388 // Define DISABLE_ASAN macros. | |
| 389 #if defined(__has_feature) | |
| 390 #if __has_feature(address_sanitizer) | |
| 391 #define DISABLE_ASAN __attribute__((no_sanitize_address)) | |
| 392 #endif | |
| 393 #endif | |
| 394 | |
| 395 | |
| 396 #ifndef DISABLE_ASAN | |
| 397 #define DISABLE_ASAN | |
| 398 #endif | |
| 399 | |
| 400 #if V8_CC_GNU | |
| 401 #define V8_IMMEDIATE_CRASH() __builtin_trap() | |
| 402 #else | |
| 403 #define V8_IMMEDIATE_CRASH() ((void(*)())0)() | |
| 404 #endif | |
| 405 | |
| 406 | |
| 407 // ----------------------------------------------------------------------------- | 344 // ----------------------------------------------------------------------------- |
| 408 // Forward declarations for frequently used classes | 345 // Forward declarations for frequently used classes |
| 409 // (sorted alphabetically) | 346 // (sorted alphabetically) |
| 410 | 347 |
| 411 class FreeStoreAllocationPolicy; | 348 class FreeStoreAllocationPolicy; |
| 412 template <typename T, class P = FreeStoreAllocationPolicy> class List; | 349 template <typename T, class P = FreeStoreAllocationPolicy> class List; |
| 413 | 350 |
| 414 // ----------------------------------------------------------------------------- | 351 // ----------------------------------------------------------------------------- |
| 415 // Declarations for use in both the preparser and the rest of V8. | 352 // Declarations for use in both the preparser and the rest of V8. |
| 416 | 353 |
| 417 // The Strict Mode (ECMA-262 5th edition, 4.2.2). | 354 // The Strict Mode (ECMA-262 5th edition, 4.2.2). |
| 418 | 355 |
| 419 enum StrictMode { SLOPPY, STRICT }; | 356 enum StrictMode { SLOPPY, STRICT }; |
| 420 | 357 |
| 421 | 358 |
| 422 } } // namespace v8::internal | 359 } } // namespace v8::internal |
| 423 | 360 |
| 424 #endif // V8_GLOBALS_H_ | 361 #endif // V8_GLOBALS_H_ |
| OLD | NEW |