13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifndef V8_CHECKS_H_ 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define V8_CHECKS_H_ 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/base/logging.h" 9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifdef DEBUG 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifndef OPTIMIZED_DEBUG 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define ENABLE_SLOW_DCHECKS 1 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass Value; 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochtemplate <class T> class Handle; 20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochintptr_t HeapObjectTagMask(); 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifdef ENABLE_SLOW_DCHECKS 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define SLOW_DCHECK(condition) \ 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!v8::internal::FLAG_enable_slow_asserts || (condition)) 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochextern bool FLAG_enable_slow_asserts; 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#else 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define SLOW_DCHECK(condition) ((void) 0) 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst bool FLAG_enable_slow_asserts = false; 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif 33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} } // namespace v8::internal 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid CheckNonEqualsHelper(const char* file, int line, 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const char* expected_source, double expected, 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const char* value_source, double value); 40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid CheckEqualsHelper(const char* file, int line, const char* expected_source, 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch double expected, const char* value_source, double value); 43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid CheckNonEqualsHelper(const char* file, int line, 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const char* unexpected_source, 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch v8::Handle<v8::Value> unexpected, 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const char* value_source, 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch v8::Handle<v8::Value> value); 493e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid CheckEqualsHelper(const char* file, 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int line, 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const char* expected_source, 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch v8::Handle<v8::Value> expected, 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const char* value_source, 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch v8::Handle<v8::Value> value); 563e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define DCHECK_TAG_ALIGNED(address) \ 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK((reinterpret_cast<intptr_t>(address) & HeapObjectTagMask()) == 0) 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define DCHECK_SIZE_TAG_ALIGNED(size) DCHECK((size & HeapObjectTagMask()) == 0) 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif // V8_CHECKS_H_ 63