blob: fda2ef540dd8abefe6ad952d9f52f696716ad941 [file]
// Copyright 2023 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Iterator helpers are specced as generators but implemented as direct
// iterators. As such, generator states need to be tracked manually.
extern enum JSIteratorHelperState extends uint31 {
kSuspendedStart,
kSuspendedYield,
kExecuting,
kCompleted
}
@abstract
@cppObjectLayoutDefinition
extern class JSIteratorHelper extends JSObject {
state: SmiTagged<JSIteratorHelperState>;
}
@abstract
@cppObjectLayoutDefinition
extern class JSIteratorHelperSimple extends JSIteratorHelper {
underlying_iterator: iterator::IteratorRecord;
}
@cppObjectLayoutDefinition
extern class JSIteratorMapHelper extends JSIteratorHelperSimple {
mapper: Callable;
counter: Number;
}
@cppObjectLayoutDefinition
extern class JSIteratorFilterHelper extends JSIteratorHelperSimple {
predicate: Callable;
counter: Number;
}
@cppObjectLayoutDefinition
extern class JSIteratorTakeHelper extends JSIteratorHelperSimple {
remaining: Number;
}
@cppObjectLayoutDefinition
extern class JSIteratorDropHelper extends JSIteratorHelperSimple {
remaining: Number;
}
@cppObjectLayoutDefinition
extern class JSIteratorFlatMapHelper extends JSIteratorHelperSimple {
mapper: Callable;
counter: Number;
inner_iterator: iterator::IteratorRecord;
}
@cppObjectLayoutDefinition
extern class JSIteratorConcatHelper extends JSIteratorHelperSimple {
iterables: FixedArray;
current: Smi;
}
extern enum JSIteratorZipHelperMode extends uint31 {
kShortest,
kLongest,
kStrict
}
@cppObjectLayoutDefinition
extern class JSIteratorZipHelper extends JSIteratorHelper {
underlying_iterators: FixedArray;
mode: SmiTagged<JSIteratorZipHelperMode>;
active_count: Smi;
padding: FixedArray;
}
@cppObjectLayoutDefinition
extern class JSIteratorZipKeyedHelper extends JSIteratorZipHelper {
keys: FixedArray;
}