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