1 | // Copyright 2018 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 | #ifndef V8_OBJECTS_ODDBALL_INL_H_ |
6 | #define V8_OBJECTS_ODDBALL_INL_H_ |
7 | |
8 | #include "src/objects/oddball.h" |
9 | |
10 | #include "src/handles.h" |
11 | #include "src/heap/heap-write-barrier-inl.h" |
12 | #include "src/objects-inl.h" |
13 | #include "src/objects/string-inl.h" |
14 | |
15 | // Has to be the last include (doesn't have include guards): |
16 | #include "src/objects/object-macros.h" |
17 | |
18 | namespace v8 { |
19 | namespace internal { |
20 | |
21 | OBJECT_CONSTRUCTORS_IMPL(Oddball, HeapObject) |
22 | |
23 | CAST_ACCESSOR(Oddball) |
24 | |
25 | double Oddball::to_number_raw() const { |
26 | return READ_DOUBLE_FIELD(*this, kToNumberRawOffset); |
27 | } |
28 | |
29 | void Oddball::set_to_number_raw(double value) { |
30 | WRITE_DOUBLE_FIELD(*this, kToNumberRawOffset, value); |
31 | } |
32 | |
33 | void Oddball::set_to_number_raw_as_bits(uint64_t bits) { |
34 | WRITE_UINT64_FIELD(*this, kToNumberRawOffset, bits); |
35 | } |
36 | |
37 | ACCESSORS(Oddball, to_string, String, kToStringOffset) |
38 | ACCESSORS(Oddball, to_number, Object, kToNumberOffset) |
39 | ACCESSORS(Oddball, type_of, String, kTypeOfOffset) |
40 | |
41 | byte Oddball::kind() const { |
42 | return Smi::ToInt(READ_FIELD(*this, kKindOffset)); |
43 | } |
44 | |
45 | void Oddball::set_kind(byte value) { |
46 | WRITE_FIELD(*this, kKindOffset, Smi::FromInt(value)); |
47 | } |
48 | |
49 | // static |
50 | Handle<Object> Oddball::ToNumber(Isolate* isolate, Handle<Oddball> input) { |
51 | return Handle<Object>(input->to_number(), isolate); |
52 | } |
53 | |
54 | bool HeapObject::IsBoolean() const { |
55 | return IsOddball() && |
56 | ((Oddball::cast(*this)->kind() & Oddball::kNotBooleanMask) == 0); |
57 | } |
58 | |
59 | } // namespace internal |
60 | } // namespace v8 |
61 | |
62 | #include "src/objects/object-macros-undef.h" |
63 | |
64 | #endif // V8_OBJECTS_ODDBALL_INL_H_ |
65 | |