current commit
261004.7 · deps: update V8 to 15.2.124.38
// 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;
}