IteratorOperations.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /*
  2. * Copyright (c) 2020, Matthew Olsson <mattco@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <LibJS/Runtime/Object.h>
  9. namespace JS {
  10. // 7.4 Operations on Iterator Objects, https://tc39.es/ecma262/#sec-operations-on-iterator-objects
  11. enum class IteratorHint {
  12. Sync,
  13. Async,
  14. };
  15. Object* get_iterator(GlobalObject&, Value value, IteratorHint hint = IteratorHint::Sync, Value method = {});
  16. Object* iterator_next(Object& iterator, Value value = {});
  17. Object* iterator_step(GlobalObject&, Object& iterator);
  18. bool iterator_complete(GlobalObject&, Object& iterator_result);
  19. Value iterator_value(GlobalObject&, Object& iterator_result);
  20. void iterator_close(Object& iterator);
  21. Value create_iterator_result_object(GlobalObject&, Value value, bool done);
  22. MarkedValueList iterable_to_list(GlobalObject&, Value iterable, Value method = {});
  23. enum class CloseOnAbrupt {
  24. No,
  25. Yes
  26. };
  27. void get_iterator_values(GlobalObject&, Value value, Function<IterationDecision(Value)> callback, Value method = {}, CloseOnAbrupt close_on_abrupt = CloseOnAbrupt::Yes);
  28. }