v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
abstract-code-inl.h
Go to the documentation of this file.
1// Copyright 2023 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_ABSTRACT_CODE_INL_H_
6#define V8_OBJECTS_ABSTRACT_CODE_INL_H_
7
9// Include the non-inl header before the rest of the headers.
10
14
15// Has to be the last include (doesn't have include guards):
17
18namespace v8 {
19namespace internal {
20
21OBJECT_CONSTRUCTORS_IMPL(AbstractCode, HeapObject)
22
23int AbstractCode::InstructionSize(PtrComprCageBase cage_base) {
24 Tagged<Map> map_object = map(cage_base);
25 if (InstanceTypeChecker::IsCode(map_object)) {
26 return GetCode()->instruction_size();
27 } else {
28 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
29 return GetBytecodeArray()->length();
30 }
31}
32
34 Isolate* isolate, Tagged<SharedFunctionInfo> sfi) {
35 Tagged<Map> map_object = map(isolate);
36 if (InstanceTypeChecker::IsCode(map_object)) {
37 return GetCode()->SourcePositionTable(isolate, sfi);
38 } else {
39 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
40 return GetBytecodeArray()->SourcePositionTable(isolate);
41 }
42}
43
45 Tagged<Map> map_object = map(cage_base);
46 if (InstanceTypeChecker::IsCode(map_object)) {
47 return GetCode()->SizeIncludingMetadata();
48 } else {
49 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
50 return GetBytecodeArray()->SizeIncludingMetadata();
51 }
52}
53
55 Tagged<Map> map_object = map(cage_base);
56 if (InstanceTypeChecker::IsCode(map_object)) {
57 return GetCode()->instruction_start();
58 } else {
59 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
60 return GetBytecodeArray()->GetFirstBytecodeAddress();
61 }
62}
63
65 Tagged<Map> map_object = map(cage_base);
66 if (InstanceTypeChecker::IsCode(map_object)) {
67 return GetCode()->instruction_end();
68 } else {
69 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
70 Tagged<BytecodeArray> bytecode_array = GetBytecodeArray();
71 return bytecode_array->GetFirstBytecodeAddress() + bytecode_array->length();
72 }
73}
74
75bool AbstractCode::contains(Isolate* isolate, Address inner_pointer) {
76 PtrComprCageBase cage_base(isolate);
77 Tagged<Map> map_object = map(cage_base);
78 if (InstanceTypeChecker::IsCode(map_object)) {
79 return GetCode()->contains(isolate, inner_pointer);
80 } else {
81 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
82 return (address() <= inner_pointer) &&
83 (inner_pointer <= address() + Size(cage_base));
84 }
85}
86
88 Tagged<Map> map_object = map(cage_base);
89 if (InstanceTypeChecker::IsCode(map_object)) {
90 return GetCode()->kind();
91 } else {
92 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
93 return CodeKind::INTERPRETED_FUNCTION;
94 }
95}
96
98 Tagged<Map> map_object = map(cage_base);
99 if (InstanceTypeChecker::IsCode(map_object)) {
100 return GetCode()->builtin_id();
101 } else {
102 DCHECK(InstanceTypeChecker::IsBytecodeArray(map_object));
104 }
105}
106
108 DCHECK(InstanceTypeChecker::IsCode(map(cage_base)));
109 return GetCode()->has_instruction_stream();
110}
111
113
117
118} // namespace internal
119} // namespace v8
120
122
123#endif // V8_OBJECTS_ABSTRACT_CODE_INL_H_
CodeKind kind(PtrComprCageBase cage_base)
Builtin builtin_id(PtrComprCageBase cage_base)
Address InstructionEnd(PtrComprCageBase cage_base)
bool contains(Isolate *isolate, Address pc)
Address InstructionStart(PtrComprCageBase cage_base)
Tagged< BytecodeArray > GetBytecodeArray()
bool has_instruction_stream(PtrComprCageBase cage_base)
Tagged< TrustedByteArray > SourcePositionTable(Isolate *isolate, Tagged< SharedFunctionInfo > sfi)
int SizeIncludingMetadata(PtrComprCageBase cage_base)
Address address() const
std::map< const std::string, const std::string > map
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
Definition casting.h:150
#define OBJECT_CONSTRUCTORS_IMPL(Type, Super)
#define DCHECK(condition)
Definition logging.h:482