| OLD | NEW | 
|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 180 // | 180 // | 
| 181 // Compiler-specific feature detection | 181 // Compiler-specific feature detection | 
| 182 // | 182 // | 
| 183 //  V8_HAS___ALIGNOF                    - __alignof(type) operator supported | 183 //  V8_HAS___ALIGNOF                    - __alignof(type) operator supported | 
| 184 //  V8_HAS___ALIGNOF__                  - __alignof__(type) operator supported | 184 //  V8_HAS___ALIGNOF__                  - __alignof__(type) operator supported | 
| 185 //  V8_HAS_ATTRIBUTE_ALIGNED            - __attribute__((aligned(n))) supported | 185 //  V8_HAS_ATTRIBUTE_ALIGNED            - __attribute__((aligned(n))) supported | 
| 186 //  V8_HAS_ATTRIBUTE_ALWAYS_INLINE      - __attribute__((always_inline)) | 186 //  V8_HAS_ATTRIBUTE_ALWAYS_INLINE      - __attribute__((always_inline)) | 
| 187 //                                        supported | 187 //                                        supported | 
| 188 //  V8_HAS_ATTRIBUTE_DEPRECATED         - __attribute__((deprecated)) supported | 188 //  V8_HAS_ATTRIBUTE_DEPRECATED         - __attribute__((deprecated)) supported | 
| 189 //  V8_HAS_ATTRIBUTE_NOINLINE           - __attribute__((noinline)) supported | 189 //  V8_HAS_ATTRIBUTE_NOINLINE           - __attribute__((noinline)) supported | 
|  | 190 //  V8_HAS_ATTRIBUTE_UNUSED             - __attribute__((unused)) supported | 
| 190 //  V8_HAS_ATTRIBUTE_VISIBILITY         - __attribute__((visibility)) supported | 191 //  V8_HAS_ATTRIBUTE_VISIBILITY         - __attribute__((visibility)) supported | 
| 191 //  V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT - __attribute__((warn_unused_result)) | 192 //  V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT - __attribute__((warn_unused_result)) | 
| 192 //                                        supported | 193 //                                        supported | 
| 193 //  V8_HAS_BUILTIN_EXPECT               - __builtin_expect() supported | 194 //  V8_HAS_BUILTIN_EXPECT               - __builtin_expect() supported | 
| 194 //  V8_HAS_DECLSPEC_ALIGN               - __declspec(align(n)) supported | 195 //  V8_HAS_DECLSPEC_ALIGN               - __declspec(align(n)) supported | 
| 195 //  V8_HAS_DECLSPEC_DEPRECATED          - __declspec(deprecated) supported | 196 //  V8_HAS_DECLSPEC_DEPRECATED          - __declspec(deprecated) supported | 
| 196 //  V8_HAS_DECLSPEC_NOINLINE            - __declspec(noinline) supported | 197 //  V8_HAS_DECLSPEC_NOINLINE            - __declspec(noinline) supported | 
| 197 //  V8_HAS___FINAL                      - __final supported in non-C++11 mode | 198 //  V8_HAS___FINAL                      - __final supported in non-C++11 mode | 
| 198 //  V8_HAS___FORCEINLINE                - __forceinline supported | 199 //  V8_HAS___FORCEINLINE                - __forceinline supported | 
| 199 //  V8_HAS_SEALED                       - MSVC style sealed marker supported | 200 //  V8_HAS_SEALED                       - MSVC style sealed marker supported | 
| 200 // | 201 // | 
| 201 // Note that testing for compilers and/or features must be done using #if | 202 // Note that testing for compilers and/or features must be done using #if | 
| 202 // not #ifdef. For example, to test for Intel C++ Compiler, use: | 203 // not #ifdef. For example, to test for Intel C++ Compiler, use: | 
| 203 //  #if V8_CC_INTEL | 204 //  #if V8_CC_INTEL | 
| 204 //   ... | 205 //   ... | 
| 205 //  #endif | 206 //  #endif | 
| 206 | 207 | 
| 207 #if defined(__clang__) | 208 #if defined(__clang__) | 
| 208 | 209 | 
| 209 # define V8_CC_CLANG 1 | 210 # define V8_CC_CLANG 1 | 
| 210 | 211 | 
| 211 // Clang defines __alignof__ as alias for __alignof | 212 // Clang defines __alignof__ as alias for __alignof | 
| 212 # define V8_HAS___ALIGNOF 1 | 213 # define V8_HAS___ALIGNOF 1 | 
| 213 # define V8_HAS___ALIGNOF__ V8_HAS___ALIGNOF | 214 # define V8_HAS___ALIGNOF__ V8_HAS___ALIGNOF | 
| 214 | 215 | 
| 215 # define V8_HAS_ATTRIBUTE_ALIGNED (__has_attribute(aligned)) | 216 # define V8_HAS_ATTRIBUTE_ALIGNED (__has_attribute(aligned)) | 
| 216 # define V8_HAS_ATTRIBUTE_ALWAYS_INLINE (__has_attribute(always_inline)) | 217 # define V8_HAS_ATTRIBUTE_ALWAYS_INLINE (__has_attribute(always_inline)) | 
| 217 # define V8_HAS_ATTRIBUTE_DEPRECATED (__has_attribute(deprecated)) | 218 # define V8_HAS_ATTRIBUTE_DEPRECATED (__has_attribute(deprecated)) | 
| 218 # define V8_HAS_ATTRIBUTE_NOINLINE (__has_attribute(noinline)) | 219 # define V8_HAS_ATTRIBUTE_NOINLINE (__has_attribute(noinline)) | 
|  | 220 # define V8_HAS_ATTRIBUTE_UNUSED (__has_attribute(unused)) | 
| 219 # define V8_HAS_ATTRIBUTE_VISIBILITY (__has_attribute(visibility)) | 221 # define V8_HAS_ATTRIBUTE_VISIBILITY (__has_attribute(visibility)) | 
| 220 # define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \ | 222 # define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \ | 
| 221     (__has_attribute(warn_unused_result)) | 223     (__has_attribute(warn_unused_result)) | 
| 222 | 224 | 
| 223 # define V8_HAS_BUILTIN_EXPECT (__has_builtin(__builtin_expect)) | 225 # define V8_HAS_BUILTIN_EXPECT (__has_builtin(__builtin_expect)) | 
| 224 | 226 | 
| 225 # define V8_HAS_CXX11_ALIGNAS (__has_feature(cxx_alignas)) | 227 # define V8_HAS_CXX11_ALIGNAS (__has_feature(cxx_alignas)) | 
| 226 # define V8_HAS_CXX11_STATIC_ASSERT (__has_feature(cxx_static_assert)) | 228 # define V8_HAS_CXX11_STATIC_ASSERT (__has_feature(cxx_static_assert)) | 
| 227 # define V8_HAS_CXX11_DELETE (__has_feature(cxx_deleted_functions)) | 229 # define V8_HAS_CXX11_DELETE (__has_feature(cxx_deleted_functions)) | 
| 228 # define V8_HAS_CXX11_FINAL (__has_feature(cxx_override_control)) | 230 # define V8_HAS_CXX11_FINAL (__has_feature(cxx_override_control)) | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 240 # define V8_HAS___ALIGNOF__ (V8_GNUC_PREREQ(4, 3, 0)) | 242 # define V8_HAS___ALIGNOF__ (V8_GNUC_PREREQ(4, 3, 0)) | 
| 241 | 243 | 
| 242 # define V8_HAS_ATTRIBUTE_ALIGNED (V8_GNUC_PREREQ(2, 95, 0)) | 244 # define V8_HAS_ATTRIBUTE_ALIGNED (V8_GNUC_PREREQ(2, 95, 0)) | 
| 243 // always_inline is available in gcc 4.0 but not very reliable until 4.4. | 245 // always_inline is available in gcc 4.0 but not very reliable until 4.4. | 
| 244 // Works around "sorry, unimplemented: inlining failed" build errors with | 246 // Works around "sorry, unimplemented: inlining failed" build errors with | 
| 245 // older compilers. | 247 // older compilers. | 
| 246 # define V8_HAS_ATTRIBUTE_ALWAYS_INLINE (V8_GNUC_PREREQ(4, 4, 0)) | 248 # define V8_HAS_ATTRIBUTE_ALWAYS_INLINE (V8_GNUC_PREREQ(4, 4, 0)) | 
| 247 # define V8_HAS_ATTRIBUTE_DEPRECATED (V8_GNUC_PREREQ(3, 4, 0)) | 249 # define V8_HAS_ATTRIBUTE_DEPRECATED (V8_GNUC_PREREQ(3, 4, 0)) | 
| 248 # define V8_HAS_ATTRIBUTE_DEPRECATED_MESSAGE (V8_GNUC_PREREQ(4, 5, 0)) | 250 # define V8_HAS_ATTRIBUTE_DEPRECATED_MESSAGE (V8_GNUC_PREREQ(4, 5, 0)) | 
| 249 # define V8_HAS_ATTRIBUTE_NOINLINE (V8_GNUC_PREREQ(3, 4, 0)) | 251 # define V8_HAS_ATTRIBUTE_NOINLINE (V8_GNUC_PREREQ(3, 4, 0)) | 
|  | 252 # define V8_HAS_ATTRIBUTE_UNUSED (V8_GNUC_PREREQ(2, 95, 0)) | 
| 250 # define V8_HAS_ATTRIBUTE_VISIBILITY (V8_GNUC_PREREQ(4, 3, 0)) | 253 # define V8_HAS_ATTRIBUTE_VISIBILITY (V8_GNUC_PREREQ(4, 3, 0)) | 
| 251 # define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \ | 254 # define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \ | 
| 252     (!V8_CC_INTEL && V8_GNUC_PREREQ(4, 1, 0)) | 255     (!V8_CC_INTEL && V8_GNUC_PREREQ(4, 1, 0)) | 
| 253 | 256 | 
| 254 # define V8_HAS_BUILTIN_EXPECT (V8_GNUC_PREREQ(2, 96, 0)) | 257 # define V8_HAS_BUILTIN_EXPECT (V8_GNUC_PREREQ(2, 96, 0)) | 
| 255 | 258 | 
| 256 // g++ requires -std=c++0x or -std=gnu++0x to support C++11 functionality | 259 // g++ requires -std=c++0x or -std=gnu++0x to support C++11 functionality | 
| 257 // without warnings (functionality used by the macros below).  These modes | 260 // without warnings (functionality used by the macros below).  These modes | 
| 258 // are detectable by checking whether __GXX_EXPERIMENTAL_CXX0X__ is defined or, | 261 // are detectable by checking whether __GXX_EXPERIMENTAL_CXX0X__ is defined or, | 
| 259 // more standardly, by checking whether __cplusplus has a C++11 or greater | 262 // more standardly, by checking whether __cplusplus has a C++11 or greater | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 327 #elif defined(V8_DEPRECATION_WARNINGS) && V8_HAS_ATTRIBUTE_DEPRECATED | 330 #elif defined(V8_DEPRECATION_WARNINGS) && V8_HAS_ATTRIBUTE_DEPRECATED | 
| 328 # define V8_DEPRECATED(message, declarator) \ | 331 # define V8_DEPRECATED(message, declarator) \ | 
| 329 declarator __attribute__((deprecated)) | 332 declarator __attribute__((deprecated)) | 
| 330 #elif defined(V8_DEPRECATION_WARNINGS) && V8_HAS_DECLSPEC_DEPRECATED | 333 #elif defined(V8_DEPRECATION_WARNINGS) && V8_HAS_DECLSPEC_DEPRECATED | 
| 331 # define V8_DEPRECATED(message, declarator) __declspec(deprecated) declarator | 334 # define V8_DEPRECATED(message, declarator) __declspec(deprecated) declarator | 
| 332 #else | 335 #else | 
| 333 # define V8_DEPRECATED(message, declarator) declarator | 336 # define V8_DEPRECATED(message, declarator) declarator | 
| 334 #endif | 337 #endif | 
| 335 | 338 | 
| 336 | 339 | 
|  | 340 // A macro to mark variables or types as unused, avoiding compiler warnings. | 
|  | 341 #if V8_HAS_ATTRIBUTE_UNUSED | 
|  | 342 # define V8_UNUSED __attribute__((unused)) | 
|  | 343 #else | 
|  | 344 # define V8_UNUSED | 
|  | 345 #endif | 
|  | 346 | 
|  | 347 | 
| 337 // Annotate a function indicating the caller must examine the return value. | 348 // Annotate a function indicating the caller must examine the return value. | 
| 338 // Use like: | 349 // Use like: | 
| 339 //   int foo() V8_WARN_UNUSED_RESULT; | 350 //   int foo() V8_WARN_UNUSED_RESULT; | 
| 340 #if V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT | 351 #if V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT | 
| 341 # define V8_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) | 352 # define V8_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) | 
| 342 #else | 353 #else | 
| 343 # define V8_WARN_UNUSED_RESULT /* NOT SUPPORTED */ | 354 # define V8_WARN_UNUSED_RESULT /* NOT SUPPORTED */ | 
| 344 #endif | 355 #endif | 
| 345 | 356 | 
| 346 | 357 | 
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 447 # define V8_ALIGNOF(type) __alignof__(type) | 458 # define V8_ALIGNOF(type) __alignof__(type) | 
| 448 #else | 459 #else | 
| 449 // Note that alignment of a type within a struct can be less than the | 460 // Note that alignment of a type within a struct can be less than the | 
| 450 // alignment of the type stand-alone (because of ancient ABIs), so this | 461 // alignment of the type stand-alone (because of ancient ABIs), so this | 
| 451 // should only be used as a last resort. | 462 // should only be used as a last resort. | 
| 452 namespace v8 { template <typename T> class AlignOfHelper { char c; T t; }; } | 463 namespace v8 { template <typename T> class AlignOfHelper { char c; T t; }; } | 
| 453 # define V8_ALIGNOF(type) (sizeof(::v8::AlignOfHelper<type>) - sizeof(type)) | 464 # define V8_ALIGNOF(type) (sizeof(::v8::AlignOfHelper<type>) - sizeof(type)) | 
| 454 #endif | 465 #endif | 
| 455 | 466 | 
| 456 #endif  // V8CONFIG_H_ | 467 #endif  // V8CONFIG_H_ | 
| OLD | NEW | 
|---|