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
18namespace v8 {
19namespace internal {
20
21OBJECT_CONSTRUCTORS_IMPL(Oddball, HeapObject)
22
23CAST_ACCESSOR(Oddball)
24
25double Oddball::to_number_raw() const {
26 return READ_DOUBLE_FIELD(*this, kToNumberRawOffset);
27}
28
29void Oddball::set_to_number_raw(double value) {
30 WRITE_DOUBLE_FIELD(*this, kToNumberRawOffset, value);
31}
32
33void Oddball::set_to_number_raw_as_bits(uint64_t bits) {
34 WRITE_UINT64_FIELD(*this, kToNumberRawOffset, bits);
35}
36
37ACCESSORS(Oddball, to_string, String, kToStringOffset)
38ACCESSORS(Oddball, to_number, Object, kToNumberOffset)
39ACCESSORS(Oddball, type_of, String, kTypeOfOffset)
40
41byte Oddball::kind() const {
42 return Smi::ToInt(READ_FIELD(*this, kKindOffset));
43}
44
45void Oddball::set_kind(byte value) {
46 WRITE_FIELD(*this, kKindOffset, Smi::FromInt(value));
47}
48
49// static
50Handle<Object> Oddball::ToNumber(Isolate* isolate, Handle<Oddball> input) {
51 return Handle<Object>(input->to_number(), isolate);
52}
53
54bool 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