v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
handler-table-builder.cc
Go to the documentation of this file.
1
// Copyright 2016 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/interpreter/handler-table-builder.h
"
6
7
#include "
src/execution/isolate.h
"
8
#include "
src/heap/factory.h
"
9
#include "
src/interpreter/bytecode-register.h
"
10
#include "
src/objects/objects-inl.h
"
11
12
namespace
v8
{
13
namespace
internal
{
14
namespace
interpreter {
15
16
HandlerTableBuilder::HandlerTableBuilder
(
Zone
* zone) :
entries_
(zone) {}
17
18
template
<
typename
IsolateT>
19
DirectHandle<TrustedByteArray>
HandlerTableBuilder::ToHandlerTable
(
20
IsolateT* isolate) {
21
int
handler_table_size =
static_cast<
int
>
(
entries_
.size());
22
DirectHandle<TrustedByteArray>
table_byte_array =
23
isolate->factory()->NewTrustedByteArray(
24
HandlerTable::LengthForRange
(handler_table_size));
25
HandlerTable
table(*table_byte_array);
26
for
(
int
i
= 0;
i
< handler_table_size; ++
i
) {
27
Entry
& entry =
entries_
[
i
];
28
HandlerTable::CatchPrediction
pred = entry.
catch_prediction_
;
29
table.SetRangeStart(
i
,
static_cast<
int
>
(entry.
offset_start
));
30
table.SetRangeEnd(
i
,
static_cast<
int
>
(entry.
offset_end
));
31
table.SetRangeHandler(
i
,
static_cast<
int
>
(entry.
offset_target
), pred);
32
table.SetRangeData(
i
, entry.
context
.
index
());
33
}
34
return
table_byte_array;
35
}
36
37
template
DirectHandle<TrustedByteArray>
HandlerTableBuilder::ToHandlerTable
(
38
Isolate
* isolate);
39
template
DirectHandle<TrustedByteArray>
HandlerTableBuilder::ToHandlerTable
(
40
LocalIsolate
* isolate);
41
42
int
HandlerTableBuilder::NewHandlerEntry
() {
43
int
handler_id =
static_cast<
int
>
(
entries_
.size());
44
Entry
entry = {0, 0, 0,
Register::invalid_value
(),
HandlerTable::UNCAUGHT
};
45
entries_
.push_back(entry);
46
return
handler_id;
47
}
48
49
50
void
HandlerTableBuilder::SetTryRegionStart
(
int
handler_id,
size_t
offset
) {
51
DCHECK
(
Smi::IsValid
(
offset
));
// Encoding of handler table requires this.
52
entries_
[handler_id].offset_start =
offset
;
53
}
54
55
56
void
HandlerTableBuilder::SetTryRegionEnd
(
int
handler_id,
size_t
offset
) {
57
DCHECK
(
Smi::IsValid
(
offset
));
// Encoding of handler table requires this.
58
entries_
[handler_id].offset_end =
offset
;
59
}
60
61
62
void
HandlerTableBuilder::SetHandlerTarget
(
int
handler_id,
size_t
offset
) {
63
DCHECK
(
Smi::IsValid
(
offset
));
// Encoding of handler table requires this.
64
entries_
[handler_id].offset_target =
offset
;
65
}
66
67
void
HandlerTableBuilder::SetPrediction
(
68
int
handler_id,
HandlerTable::CatchPrediction
prediction) {
69
entries_
[handler_id].catch_prediction_ = prediction;
70
}
71
72
73
void
HandlerTableBuilder::SetContextRegister
(
int
handler_id,
Register
reg
) {
74
entries_
[handler_id].context =
reg
;
75
}
76
77
}
// namespace interpreter
78
}
// namespace internal
79
}
// namespace v8
bytecode-register.h
v8::internal::DirectHandle
Definition
handles.h:659
v8::internal::HandlerTable
Definition
handler-table.h:37
v8::internal::HandlerTable::CatchPrediction
CatchPrediction
Definition
handler-table.h:42
v8::internal::HandlerTable::UNCAUGHT
@ UNCAUGHT
Definition
handler-table.h:43
v8::internal::HandlerTable::LengthForRange
static int LengthForRange(int entries)
Definition
handler-table.cc:157
v8::internal::Isolate
Definition
isolate.h:586
v8::internal::LocalIsolate
Definition
local-isolate.h:45
v8::internal::Smi::IsValid
static bool constexpr IsValid(T value)
Definition
smi.h:67
v8::internal::Zone
Definition
zone.h:43
v8::internal::interpreter::HandlerTableBuilder::SetContextRegister
void SetContextRegister(int handler_id, Register reg)
Definition
handler-table-builder.cc:73
v8::internal::interpreter::HandlerTableBuilder::SetTryRegionStart
void SetTryRegionStart(int handler_id, size_t offset)
Definition
handler-table-builder.cc:50
v8::internal::interpreter::HandlerTableBuilder::HandlerTableBuilder
HandlerTableBuilder(Zone *zone)
Definition
handler-table-builder.cc:16
v8::internal::interpreter::HandlerTableBuilder::SetPrediction
void SetPrediction(int handler_id, HandlerTable::CatchPrediction prediction)
Definition
handler-table-builder.cc:67
v8::internal::interpreter::HandlerTableBuilder::SetHandlerTarget
void SetHandlerTarget(int handler_id, size_t offset)
Definition
handler-table-builder.cc:62
v8::internal::interpreter::HandlerTableBuilder::entries_
ZoneVector< Entry > entries_
Definition
handler-table-builder.h:55
v8::internal::interpreter::HandlerTableBuilder::ToHandlerTable
DirectHandle< TrustedByteArray > ToHandlerTable(IsolateT *isolate)
Definition
handler-table-builder.cc:19
v8::internal::interpreter::HandlerTableBuilder::NewHandlerEntry
int NewHandlerEntry()
Definition
handler-table-builder.cc:42
v8::internal::interpreter::HandlerTableBuilder::SetTryRegionEnd
void SetTryRegionEnd(int handler_id, size_t offset)
Definition
handler-table-builder.cc:56
v8::internal::interpreter::Register
Definition
bytecode-register.h:27
v8::internal::interpreter::Register::index
constexpr int index() const
Definition
bytecode-register.h:31
v8::internal::interpreter::Register::invalid_value
static constexpr Register invalid_value()
Definition
bytecode-register.h:42
isolate.h
factory.h
handler-table-builder.h
offset
int32_t offset
Definition
instruction-selector-ia32.cc:67
reg
LiftoffRegister reg
Definition
liftoff-compiler.cc:512
entries_
std::vector< EntryBuilder > entries_
Definition
liftoff-compiler.cc:304
v8::internal
Definition
api-arguments-inl.h:20
v8::internal::internal
internal
Definition
wasm-objects-inl.h:458
v8
Definition
api-arguments-inl.h:19
objects-inl.h
DCHECK
#define DCHECK(condition)
Definition
logging.h:482
v8::internal::interpreter::HandlerTableBuilder::Entry
Definition
handler-table-builder.h:46
v8::internal::interpreter::HandlerTableBuilder::Entry::offset_end
size_t offset_end
Definition
handler-table-builder.h:48
v8::internal::interpreter::HandlerTableBuilder::Entry::offset_start
size_t offset_start
Definition
handler-table-builder.h:47
v8::internal::interpreter::HandlerTableBuilder::Entry::offset_target
size_t offset_target
Definition
handler-table-builder.h:49
v8::internal::interpreter::HandlerTableBuilder::Entry::context
Register context
Definition
handler-table-builder.h:50
v8::internal::interpreter::HandlerTableBuilder::Entry::catch_prediction_
HandlerTable::CatchPrediction catch_prediction_
Definition
handler-table-builder.h:52
src
interpreter
handler-table-builder.cc
Generated on Sun Apr 6 2025 21:08:54 for v8 by
1.12.0