• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "src/checks.h"
6 
7 #include "src/v8.h"
8 
9 namespace v8 {
10 namespace internal {
11 
HeapObjectTagMask()12 intptr_t HeapObjectTagMask() { return kHeapObjectTagMask; }
13 
14 } }  // namespace v8::internal
15 
16 
CheckEqualsStrict(volatile double * exp,volatile double * val)17 static bool CheckEqualsStrict(volatile double* exp, volatile double* val) {
18   v8::internal::DoubleRepresentation exp_rep(*exp);
19   v8::internal::DoubleRepresentation val_rep(*val);
20   if (std::isnan(exp_rep.value) && std::isnan(val_rep.value)) return true;
21   return exp_rep.bits == val_rep.bits;
22 }
23 
24 
CheckEqualsHelper(const char * file,int line,const char * expected_source,double expected,const char * value_source,double value)25 void CheckEqualsHelper(const char* file, int line, const char* expected_source,
26                        double expected, const char* value_source,
27                        double value) {
28   // Force values to 64 bit memory to truncate 80 bit precision on IA32.
29   volatile double* exp = new double[1];
30   *exp = expected;
31   volatile double* val = new double[1];
32   *val = value;
33   if (!CheckEqualsStrict(exp, val)) {
34     V8_Fatal(file, line,
35              "CHECK_EQ(%s, %s) failed\n#   Expected: %f\n#   Found: %f",
36              expected_source, value_source, *exp, *val);
37   }
38   delete[] exp;
39   delete[] val;
40 }
41 
42 
CheckNonEqualsHelper(const char * file,int line,const char * expected_source,double expected,const char * value_source,double value)43 void CheckNonEqualsHelper(const char* file, int line,
44                           const char* expected_source, double expected,
45                           const char* value_source, double value) {
46   // Force values to 64 bit memory to truncate 80 bit precision on IA32.
47   volatile double* exp = new double[1];
48   *exp = expected;
49   volatile double* val = new double[1];
50   *val = value;
51   if (CheckEqualsStrict(exp, val)) {
52     V8_Fatal(file, line,
53              "CHECK_EQ(%s, %s) failed\n#   Expected: %f\n#   Found: %f",
54              expected_source, value_source, *exp, *val);
55   }
56   delete[] exp;
57   delete[] val;
58 }
59 
60 
CheckEqualsHelper(const char * file,int line,const char * expected_source,v8::Handle<v8::Value> expected,const char * value_source,v8::Handle<v8::Value> value)61 void CheckEqualsHelper(const char* file,
62                        int line,
63                        const char* expected_source,
64                        v8::Handle<v8::Value> expected,
65                        const char* value_source,
66                        v8::Handle<v8::Value> value) {
67   if (!expected->Equals(value)) {
68     v8::String::Utf8Value value_str(value);
69     v8::String::Utf8Value expected_str(expected);
70     V8_Fatal(file, line,
71              "CHECK_EQ(%s, %s) failed\n#   Expected: %s\n#   Found: %s",
72              expected_source, value_source, *expected_str, *value_str);
73   }
74 }
75 
76 
CheckNonEqualsHelper(const char * file,int line,const char * unexpected_source,v8::Handle<v8::Value> unexpected,const char * value_source,v8::Handle<v8::Value> value)77 void CheckNonEqualsHelper(const char* file,
78                           int line,
79                           const char* unexpected_source,
80                           v8::Handle<v8::Value> unexpected,
81                           const char* value_source,
82                           v8::Handle<v8::Value> value) {
83   if (unexpected->Equals(value)) {
84     v8::String::Utf8Value value_str(value);
85     V8_Fatal(file, line, "CHECK_NE(%s, %s) failed\n#   Value: %s",
86              unexpected_source, value_source, *value_str);
87   }
88 }
89