v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
oddball.h
Go to the documentation of this file.
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_H_
6#define V8_OBJECTS_ODDBALL_H_
7
9
10// Has to be the last include (doesn't have include guards):
12
13namespace v8 {
14namespace internal {
15
16// The Oddball describes objects null, undefined, true, and false.
18 public:
19 // [to_number_raw]: Cached raw to_number computed at startup.
20 DECL_PRIMITIVE_ACCESSORS(to_number_raw, double)
21 inline void set_to_number_raw_as_bits(uint64_t bits);
22
23 // [to_string]: Cached to_string computed at startup.
24 inline Tagged<String> to_string() const;
25 inline void set_to_string(Tagged<String> value,
27
28 // [to_number]: Cached to_number computed at startup.
29 inline Tagged<Number> to_number() const;
30 inline void set_to_number(Tagged<Number> value,
32
33 // [typeof]: Cached type_of computed at startup.
34 inline Tagged<String> type_of() const;
35 inline void set_type_of(Tagged<String> value,
37
38 inline uint8_t kind() const;
39 inline void set_kind(uint8_t kind);
40
41 // ES6 section 7.1.3 ToNumber for Boolean, Null, Undefined.
43 Isolate* isolate, DirectHandle<Oddball> input);
44
45 // Dispatched behavior.
47
48 // Initialize the fields.
49 static void Initialize(Isolate* isolate, DirectHandle<Oddball> oddball,
51 const char* type_of, uint8_t kind);
52
53 static constexpr uint8_t kFalse = 0;
54 static constexpr uint8_t kTrue = 1;
55 static constexpr uint8_t kNotBooleanMask = static_cast<uint8_t>(~1);
56 static constexpr uint8_t kNull = 3;
57 static constexpr uint8_t kUndefined = 4;
58
60
61 private:
62 friend struct ObjectTraits<Oddball>;
63 friend struct OffsetsForDebug;
64 friend class CodeStubAssembler;
68
75
76template <>
79 FixedBodyDescriptor<offsetof(Oddball, to_string_),
80 offsetof(Oddball, kind_), sizeof(Oddball)>;
81
82 static_assert(offsetof(Oddball, kind_) == Internals::kOddballKindOffset);
85};
86
87V8_OBJECT class Null : public Oddball {
89
92
93V8_OBJECT class Boolean : public Oddball {
94 public:
95 V8_INLINE bool ToBool(Isolate* isolate) const;
97
98V8_OBJECT class True : public Boolean {
100
101V8_OBJECT class False : public Boolean {
103
104} // namespace internal
105} // namespace v8
106
108
109#endif // V8_OBJECTS_ODDBALL_H_
V8_INLINE bool ToBool(Isolate *isolate) const
Definition oddball-inl.h:64
static const int kUndefinedOddballKind
static const int kNullOddballKind
static const int kOddballKindOffset
TaggedMember< Smi > kind_
Definition oddball.h:73
static constexpr uint8_t kNull
Definition oddball.h:56
friend struct OffsetsForDebug
Definition oddball.h:63
void set_kind(uint8_t kind)
Definition oddball-inl.h:49
static constexpr uint8_t kUndefined
Definition oddball.h:57
static V8_WARN_UNUSED_RESULT Handle< Number > ToNumber(Isolate *isolate, DirectHandle< Oddball > input)
Definition oddball-inl.h:54
void set_to_number(Tagged< Number > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
Definition oddball-inl.h:38
void set_to_string(Tagged< String > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
Definition oddball-inl.h:33
Tagged< String > type_of() const
Definition oddball-inl.h:42
Tagged< String > to_string() const
Definition oddball-inl.h:32
uint8_t kind() const
Definition oddball-inl.h:47
void set_type_of(Tagged< String > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
Definition oddball-inl.h:43
friend class TorqueGeneratedOddballAsserts
Definition oddball.h:67
TaggedMember< Number > to_number_
Definition oddball.h:71
static constexpr uint8_t kFalse
Definition oddball.h:53
Tagged< Number > to_number() const
Definition oddball-inl.h:37
static void Initialize(Isolate *isolate, DirectHandle< Oddball > oddball, const char *to_string, DirectHandle< Number > to_number, const char *type_of, uint8_t kind)
Definition objects.cc:4274
void set_to_number_raw_as_bits(uint64_t bits)
Definition oddball-inl.h:27
TaggedMember< String > type_of_
Definition oddball.h:72
static constexpr uint8_t kTrue
Definition oddball.h:54
TaggedMember< String > to_string_
Definition oddball.h:70
static constexpr uint8_t kNotBooleanMask
Definition oddball.h:55
UnalignedDoubleMember to_number_raw_
Definition oddball.h:69
const PropertyKind kind_
@ UPDATE_WRITE_BARRIER
Definition objects.h:55
v8::internal::LoadHandler V8_OBJECT_END
#define DECL_VERIFIER(Name)
#define V8_OBJECT
#define DECL_PRIMITIVE_ACCESSORS(name, type)
#define DECL_PRINTER(Name)
#define V8_INLINE
Definition v8config.h:500
#define V8_WARN_UNUSED_RESULT
Definition v8config.h:671