v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
js-iterator-helpers.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_JS_ITERATOR_HELPERS_H_
6
#define V8_OBJECTS_JS_ITERATOR_HELPERS_H_
7
8
#include "
src/objects/js-objects.h
"
9
10
// Has to be the last include (doesn't have include guards):
11
#include "
src/objects/object-macros.h
"
12
13
namespace
v8
{
14
namespace
internal
{
15
16
class
Boolean;
17
18
#include "torque-generated/src/objects/js-iterator-helpers-tq.inc"
19
20
// Iterator helpers are iterators that transform an underlying iterator in some
21
// way. They are specified as spec generators. That is, the spec defines the
22
// body of iterator helpers using algorithm steps with yields (like JS
23
// generators) packaged in an Abstract Closure, and then makes a generator
24
// object internally. Generator machinery such as GeneratorResume [1] are then
25
// used to specify %IteratorHelperPrototype%.{next,return}. While this aids
26
// understandability of the specification, it is not conducive to ease of
27
// implementation or performance in V8.
28
//
29
// Instead, each iterator helper is implemented as an iterator directly, with
30
// JSIteratorHelper acting as a superclass to multiplex the various kinds of
31
// helpers.
32
//
33
// Each helper has its own Torque class to hold the state it needs. (In the
34
// spec, the state is captured in the Abstract Closures.) The classes are named
35
// after the name of the method that produces them. E.g., the iterator helper
36
// returned by Iterator.prototype.map is named JSIteratorMapHelper, and has
37
// fields for the underlying iterator, the mapper function, and a counter.
38
//
39
// The algorithm steps in the body Abstract Closure in the specification is
40
// implemented directly as next() (and return(), if necessary) builtin
41
// methods. E.g., the map helper's body is implemented as
42
// Builtin::kIteratorMapHelperNext.
43
//
44
// All iterator helper objects have %IteratorHelperPrototype% as their
45
// [[Prototype]]. The implementations of %IteratorHelperPrototype%.{next,return}
46
// multiplex, typeswitching over all known iterator helpers and manually calling
47
// their next() (and return(), if necessary) builtins. E.g., Calling next() on
48
// JSIteratorMapHelper would ultimately call Builtin::kIteratorMapHelperNext.
49
//
50
// [1] https://tc39.es/ecma262/#sec-generatorresume
51
52
// The superclass of all iterator helpers.
53
class
JSIteratorHelper
54
:
public
TorqueGeneratedJSIteratorHelper<JSIteratorHelper, JSObject> {
55
public
:
56
void
JSIteratorHelperPrintHeader
(std::ostream& os,
const
char
* helper_name);
57
58
TQ_OBJECT_CONSTRUCTORS
(
JSIteratorHelper
)
59
};
60
61
// The iterator helper returned by Iterator.prototype.map.
62
class
JSIteratorMapHelper
63
:
public
TorqueGeneratedJSIteratorMapHelper<JSIteratorMapHelper,
64
JSIteratorHelper> {
65
public
:
66
DECL_PRINTER
(
JSIteratorMapHelper
)
67
DECL_VERIFIER
(
JSIteratorMapHelper
)
68
69
TQ_OBJECT_CONSTRUCTORS
(
JSIteratorMapHelper
)
70
};
71
72
// The iterator helper returned by Iterator.prototype.filter.
73
class
JSIteratorFilterHelper
74
:
public
TorqueGeneratedJSIteratorFilterHelper<JSIteratorFilterHelper,
75
JSIteratorHelper> {
76
public
:
77
DECL_PRINTER
(
JSIteratorFilterHelper
)
78
DECL_VERIFIER
(
JSIteratorFilterHelper
)
79
80
TQ_OBJECT_CONSTRUCTORS
(
JSIteratorFilterHelper
)
81
};
82
83
// The iterator helper returned by Iterator.prototype.take.
84
class
JSIteratorTakeHelper
85
:
public
TorqueGeneratedJSIteratorTakeHelper<JSIteratorTakeHelper,
86
JSIteratorHelper> {
87
public
:
88
DECL_PRINTER
(
JSIteratorTakeHelper
)
89
DECL_VERIFIER
(
JSIteratorTakeHelper
)
90
91
TQ_OBJECT_CONSTRUCTORS
(
JSIteratorTakeHelper
)
92
};
93
94
// The iterator helper returned by Iterator.prototype.drop.
95
class
JSIteratorDropHelper
96
:
public
TorqueGeneratedJSIteratorDropHelper<JSIteratorDropHelper,
97
JSIteratorHelper> {
98
public
:
99
DECL_PRINTER
(
JSIteratorDropHelper
)
100
DECL_VERIFIER
(
JSIteratorDropHelper
)
101
102
TQ_OBJECT_CONSTRUCTORS
(
JSIteratorDropHelper
)
103
};
104
105
// The iterator helper returned by Iterator.prototype.flatMap.
106
class
JSIteratorFlatMapHelper
107
:
public
TorqueGeneratedJSIteratorFlatMapHelper<JSIteratorFlatMapHelper,
108
JSIteratorHelper> {
109
public
:
110
DECL_PRINTER
(
JSIteratorFlatMapHelper
)
111
DECL_VERIFIER
(
JSIteratorFlatMapHelper
)
112
113
TQ_OBJECT_CONSTRUCTORS
(
JSIteratorFlatMapHelper
)
114
};
115
116
}
// namespace internal
117
}
// namespace v8
118
119
#include "
src/objects/object-macros-undef.h
"
120
121
#endif
// V8_OBJECTS_JS_ITERATOR_HELPERS_H_
v8::internal::JSIteratorDropHelper
Definition
js-iterator-helpers.h:97
v8::internal::JSIteratorFilterHelper
Definition
js-iterator-helpers.h:75
v8::internal::JSIteratorFlatMapHelper
Definition
js-iterator-helpers.h:108
v8::internal::JSIteratorHelper
Definition
js-iterator-helpers.h:54
v8::internal::JSIteratorHelper::JSIteratorHelperPrintHeader
void JSIteratorHelperPrintHeader(std::ostream &os, const char *helper_name)
v8::internal::JSIteratorMapHelper
Definition
js-iterator-helpers.h:64
v8::internal::JSIteratorTakeHelper
Definition
js-iterator-helpers.h:86
js-objects.h
v8::internal::internal
internal
Definition
wasm-objects-inl.h:458
v8
Definition
api-arguments-inl.h:19
object-macros-undef.h
object-macros.h
DECL_VERIFIER
#define DECL_VERIFIER(Name)
Definition
object-macros.h:962
DECL_PRINTER
#define DECL_PRINTER(Name)
Definition
object-macros.h:949
TQ_OBJECT_CONSTRUCTORS
#define TQ_OBJECT_CONSTRUCTORS(Type)
Definition
object-macros.h:984
src
objects
js-iterator-helpers.h
Generated on Sun Apr 6 2025 21:08:55 for v8 by
1.12.0