⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checks.h.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
字号:
// Copyright 2006-2008 the V8 project authors. All rights reserved.// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:////     * Redistributions of source code must retain the above copyright//       notice, this list of conditions and the following disclaimer.//     * Redistributions in binary form must reproduce the above//       copyright notice, this list of conditions and the following//       disclaimer in the documentation and/or other materials provided//       with the distribution.//     * Neither the name of Google Inc. nor the names of its//       contributors may be used to endorse or promote products derived//       from this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#ifndef V8_CHECKS_H_#define V8_CHECKS_H_#include <string.h>#include "flags.h"extern "C" void V8_Fatal(const char* file, int line, const char* format, ...);void API_Fatal(const char* location, const char* format, ...);// The FATAL, UNREACHABLE and UNIMPLEMENTED macros are useful during// development, but they should not be relied on in the final product.#ifdef DEBUG#define FATAL(msg)                              \  V8_Fatal(__FILE__, __LINE__, "%s", (msg))#define UNIMPLEMENTED()                         \  V8_Fatal(__FILE__, __LINE__, "unimplemented code")#define UNREACHABLE()                           \  V8_Fatal(__FILE__, __LINE__, "unreachable code")#else#define FATAL(msg)                              \  V8_Fatal("", 0, "%s", (msg))#define UNIMPLEMENTED()                         \  V8_Fatal("", 0, "unimplemented code")#define UNREACHABLE() ((void) 0)#endif// Used by the CHECK macro -- should not be called directly.static inline void CheckHelper(const char* file,                               int line,                               const char* source,                               bool condition) {  if (!condition)    V8_Fatal(file, line, "CHECK(%s) failed", source);}// The CHECK macro checks that the given condition is true; if not, it// prints a message to stderr and aborts.#define CHECK(condition) CheckHelper(__FILE__, __LINE__, #condition, condition)// Helper function used by the CHECK_EQ function when given int// arguments.  Should not be called directly.static inline void CheckEqualsHelper(const char* file, int line,                                     const char* expected_source, int expected,                                     const char* value_source, int value) {  if (expected != value) {    V8_Fatal(file, line,             "CHECK_EQ(%s, %s) failed\n#   Expected: %i\n#   Found: %i",             expected_source, value_source, expected, value);  }}// Helper function used by the CHECK_NE function when given int// arguments.  Should not be called directly.static inline void CheckNonEqualsHelper(const char* file,                                        int line,                                        const char* unexpected_source,                                        int unexpected,                                        const char* value_source,                                        int value) {  if (unexpected == value) {    V8_Fatal(file, line, "CHECK_NE(%s, %s) failed\n#   Value: %i",             unexpected_source, value_source, value);  }}// Helper function used by the CHECK function when given string// arguments.  Should not be called directly.static inline void CheckEqualsHelper(const char* file,                                     int line,                                     const char* expected_source,                                     const char* expected,                                     const char* value_source,                                     const char* value) {  if (strcmp(expected, value) != 0) {    V8_Fatal(file, line,             "CHECK_EQ(%s, %s) failed\n#   Expected: %s\n#   Found: %s",             expected_source, value_source, expected, value);  }}static inline void CheckNonEqualsHelper(const char* file,                                        int line,                                        const char* expected_source,                                        const char* expected,                                        const char* value_source,                                        const char* value) {  if (expected == value ||      (expected != NULL && value != NULL && strcmp(expected, value) == 0)) {    V8_Fatal(file, line, "CHECK_NE(%s, %s) failed\n#   Value: %s",             expected_source, value_source, value);  }}// Helper function used by the CHECK function when given pointer// arguments.  Should not be called directly.static inline void CheckEqualsHelper(const char* file,                                     int line,                                     const char* expected_source,                                     void* expected,                                     const char* value_source,                                     void* value) {  if (expected != value) {    V8_Fatal(file, line,             "CHECK_EQ(%s, %s) failed\n#   Expected: %i\n#   Found: %i",             expected_source, value_source,             reinterpret_cast<int>(expected), reinterpret_cast<int>(value));  }}static inline void CheckNonEqualsHelper(const char* file,                                        int line,                                        const char* expected_source,                                        void* expected,                                        const char* value_source,                                        void* value) {  if (expected == value) {    V8_Fatal(file, line, "CHECK_NE(%s, %s) failed\n#   Value: %i",             expected_source, value_source, reinterpret_cast<int>(value));  }}// Helper function used by the CHECK function when given floating// point arguments.  Should not be called directly.static inline void CheckEqualsHelper(const char* file,                                     int line,                                     const char* expected_source,                                     double expected,                                     const char* value_source,                                     double value) {  if (expected != value) {    V8_Fatal(file, line,             "CHECK_EQ(%s, %s) failed\n#   Expected: %f\n#   Found: %f",             expected_source, value_source, expected, value);  }}namespace v8 {  class Value;  template <class T> class Handle;}void CheckNonEqualsHelper(const char* file,                          int line,                          const char* unexpected_source,                          v8::Handle<v8::Value> unexpected,                          const char* value_source,                          v8::Handle<v8::Value> value);void CheckEqualsHelper(const char* file,                       int line,                       const char* expected_source,                       v8::Handle<v8::Value> expected,                       const char* value_source,                       v8::Handle<v8::Value> value);#define CHECK_EQ(expected, value) CheckEqualsHelper(__FILE__, __LINE__, \  #expected, expected, #value, value)#define CHECK_NE(unexpected, value) CheckNonEqualsHelper(__FILE__, __LINE__, \  #unexpected, unexpected, #value, value)#define CHECK_GT(a, b) CHECK((a) > (b))#define CHECK_GE(a, b) CHECK((a) >= (b))// This is inspired by the static assertion facility in boost.  This// is pretty magical.  If it causes you trouble on a platform you may// find a fix in the boost code.template <bool> class StaticAssertion;template <> class StaticAssertion<true> { };// This macro joins two tokens.  If one of the tokens is a macro the// helper call causes it to be resolved before joining.#define SEMI_STATIC_JOIN(a, b) SEMI_STATIC_JOIN_HELPER(a, b)#define SEMI_STATIC_JOIN_HELPER(a, b) a##b// Causes an error during compilation of the condition is not// statically known to be true.  It is formulated as a typedef so that// it can be used wherever a typedef can be used.  Beware that this// actually causes each use to introduce a new defined type with a// name depending on the source line.template <int> class StaticAssertionHelper { };#define STATIC_CHECK(test)                                                  \  typedef                                                                   \    StaticAssertionHelper<sizeof(StaticAssertion<static_cast<bool>(test)>)> \    SEMI_STATIC_JOIN(__StaticAssertTypedef__, __LINE__)// The ASSERT macro is equivalent to CHECK except that it only// generates code in debug builds.  Ditto STATIC_ASSERT.#ifdef DEBUG#define ASSERT(condition)    CHECK(condition)#define ASSERT_EQ(v1, v2)    CHECK_EQ(v1, v2)#define ASSERT_NE(v1, v2)   CHECK_NE(v1, v2)#define STATIC_ASSERT(test)  STATIC_CHECK(test)#define SLOW_ASSERT(condition) if (FLAG_enable_slow_asserts) CHECK(condition)#else#define ASSERT(condition)      ((void) 0)#define ASSERT_EQ(v1, v2)      ((void) 0)#define ASSERT_NE(v1, v2)     ((void) 0)#define STATIC_ASSERT(test)    ((void) 0)#define SLOW_ASSERT(condition) ((void) 0)#endif#define ASSERT_TAG_ALIGNED(address) \  ASSERT((reinterpret_cast<int>(address) & kHeapObjectTagMask) == 0)#define ASSERT_SIZE_TAG_ALIGNED(size) ASSERT((size & kHeapObjectTagMask) == 0)#endif  // V8_CHECKS_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -