blob: b458867c9e0db3de45a9ef9b51da93b1a5210b72 [file] [log] [blame]
/*
* Copyright (c) 2015 Canon Inc. All rights reserved.
* Copyright (c) 2015 Igalia.
* Copyright (c) 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py
#pragma once
#if ENABLE(READABLE_STREAM_API)
#include <builtins/BuiltinUtils.h>
#include <bytecode/UnlinkedFunctionExecutable.h>
#include <runtime/Identifier.h>
#include <runtime/JSFunction.h>
namespace JSC {
class FunctionExecutable;
}
namespace WebCore {
/* ReadableStreamInternals */
extern const char* s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCode;
extern const int s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCodeConstructAbility;
extern const char* s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCode;
extern const int s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCodeConstructAbility;
extern const char* s_readableStreamInternalsReadableStreamDefaultControllerErrorCode;
extern const int s_readableStreamInternalsReadableStreamDefaultControllerErrorCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerErrorCodeConstructAbility;
extern const char* s_readableStreamInternalsTeeReadableStreamCode;
extern const int s_readableStreamInternalsTeeReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamCodeConstructAbility;
extern const char* s_readableStreamInternalsDoStructuredCloneCode;
extern const int s_readableStreamInternalsDoStructuredCloneCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsDoStructuredCloneCodeConstructAbility;
extern const char* s_readableStreamInternalsTeeReadableStreamPullFunctionCode;
extern const int s_readableStreamInternalsTeeReadableStreamPullFunctionCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamPullFunctionCodeConstructAbility;
extern const char* s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCode;
extern const int s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCodeConstructAbility;
extern const char* s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCode;
extern const int s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCodeConstructAbility;
extern const char* s_readableStreamInternalsIsReadableStreamCode;
extern const int s_readableStreamInternalsIsReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamCodeConstructAbility;
extern const char* s_readableStreamInternalsIsReadableStreamDefaultReaderCode;
extern const int s_readableStreamInternalsIsReadableStreamDefaultReaderCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamDefaultReaderCodeConstructAbility;
extern const char* s_readableStreamInternalsIsReadableStreamDefaultControllerCode;
extern const int s_readableStreamInternalsIsReadableStreamDefaultControllerCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamDefaultControllerCodeConstructAbility;
extern const char* s_readableStreamInternalsErrorReadableStreamCode;
extern const int s_readableStreamInternalsErrorReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsErrorReadableStreamCodeConstructAbility;
extern const char* s_readableStreamInternalsRequestReadableStreamPullCode;
extern const int s_readableStreamInternalsRequestReadableStreamPullCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsRequestReadableStreamPullCodeConstructAbility;
extern const char* s_readableStreamInternalsIsReadableStreamLockedCode;
extern const int s_readableStreamInternalsIsReadableStreamLockedCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamLockedCodeConstructAbility;
extern const char* s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCode;
extern const int s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCodeConstructAbility;
extern const char* s_readableStreamInternalsCancelReadableStreamCode;
extern const int s_readableStreamInternalsCancelReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsCancelReadableStreamCodeConstructAbility;
extern const char* s_readableStreamInternalsReadableStreamDefaultControllerCloseCode;
extern const int s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeConstructAbility;
extern const char* s_readableStreamInternalsCloseReadableStreamCode;
extern const int s_readableStreamInternalsCloseReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsCloseReadableStreamCodeConstructAbility;
extern const char* s_readableStreamInternalsEnqueueInReadableStreamCode;
extern const int s_readableStreamInternalsEnqueueInReadableStreamCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsEnqueueInReadableStreamCodeConstructAbility;
extern const char* s_readableStreamInternalsReadFromReadableStreamDefaultReaderCode;
extern const int s_readableStreamInternalsReadFromReadableStreamDefaultReaderCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsReadFromReadableStreamDefaultReaderCodeConstructAbility;
extern const char* s_readableStreamInternalsReadableStreamAddReadRequestCode;
extern const int s_readableStreamInternalsReadableStreamAddReadRequestCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsReadableStreamAddReadRequestCodeConstructAbility;
extern const char* s_readableStreamInternalsIsReadableStreamDisturbedCode;
extern const int s_readableStreamInternalsIsReadableStreamDisturbedCodeLength;
extern const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamDisturbedCodeConstructAbility;
#define WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_DATA(macro) \
macro(privateInitializeReadableStreamDefaultReader, readableStreamInternalsPrivateInitializeReadableStreamDefaultReader, 1) \
macro(privateInitializeReadableStreamDefaultController, readableStreamInternalsPrivateInitializeReadableStreamDefaultController, 4) \
macro(readableStreamDefaultControllerError, readableStreamInternalsReadableStreamDefaultControllerError, 2) \
macro(teeReadableStream, readableStreamInternalsTeeReadableStream, 2) \
macro(doStructuredClone, readableStreamInternalsDoStructuredClone, 1) \
macro(teeReadableStreamPullFunction, readableStreamInternalsTeeReadableStreamPullFunction, 3) \
macro(teeReadableStreamBranch1CancelFunction, readableStreamInternalsTeeReadableStreamBranch1CancelFunction, 2) \
macro(teeReadableStreamBranch2CancelFunction, readableStreamInternalsTeeReadableStreamBranch2CancelFunction, 2) \
macro(isReadableStream, readableStreamInternalsIsReadableStream, 1) \
macro(isReadableStreamDefaultReader, readableStreamInternalsIsReadableStreamDefaultReader, 1) \
macro(isReadableStreamDefaultController, readableStreamInternalsIsReadableStreamDefaultController, 1) \
macro(errorReadableStream, readableStreamInternalsErrorReadableStream, 2) \
macro(requestReadableStreamPull, readableStreamInternalsRequestReadableStreamPull, 1) \
macro(isReadableStreamLocked, readableStreamInternalsIsReadableStreamLocked, 1) \
macro(readableStreamDefaultControllerGetDesiredSize, readableStreamInternalsReadableStreamDefaultControllerGetDesiredSize, 1) \
macro(cancelReadableStream, readableStreamInternalsCancelReadableStream, 2) \
macro(readableStreamDefaultControllerClose, readableStreamInternalsReadableStreamDefaultControllerClose, 1) \
macro(closeReadableStream, readableStreamInternalsCloseReadableStream, 1) \
macro(enqueueInReadableStream, readableStreamInternalsEnqueueInReadableStream, 2) \
macro(readFromReadableStreamDefaultReader, readableStreamInternalsReadFromReadableStreamDefaultReader, 1) \
macro(readableStreamAddReadRequest, readableStreamInternalsReadableStreamAddReadRequest, 1) \
macro(isReadableStreamDisturbed, readableStreamInternalsIsReadableStreamDisturbed, 1) \
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_PRIVATEINITIALIZEREADABLESTREAMDEFAULTREADER 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_PRIVATEINITIALIZEREADABLESTREAMDEFAULTCONTROLLER 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_READABLESTREAMDEFAULTCONTROLLERERROR 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_TEEREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_DOSTRUCTUREDCLONE 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_TEEREADABLESTREAMPULLFUNCTION 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_TEEREADABLESTREAMBRANCH1CANCELFUNCTION 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_TEEREADABLESTREAMBRANCH2CANCELFUNCTION 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ISREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ISREADABLESTREAMDEFAULTREADER 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ISREADABLESTREAMDEFAULTCONTROLLER 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ERRORREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_REQUESTREADABLESTREAMPULL 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ISREADABLESTREAMLOCKED 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_READABLESTREAMDEFAULTCONTROLLERGETDESIREDSIZE 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_CANCELREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_READABLESTREAMDEFAULTCONTROLLERCLOSE 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_CLOSEREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ENQUEUEINREADABLESTREAM 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_READFROMREADABLESTREAMDEFAULTREADER 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_READABLESTREAMADDREADREQUEST 1
#define WEBCORE_BUILTIN_READABLESTREAMINTERNALS_ISREADABLESTREAMDISTURBED 1
#define WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(macro) \
macro(readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCode, privateInitializeReadableStreamDefaultReader, s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCodeLength) \
macro(readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCode, privateInitializeReadableStreamDefaultController, s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCodeLength) \
macro(readableStreamInternalsReadableStreamDefaultControllerErrorCode, readableStreamDefaultControllerError, s_readableStreamInternalsReadableStreamDefaultControllerErrorCodeLength) \
macro(readableStreamInternalsTeeReadableStreamCode, teeReadableStream, s_readableStreamInternalsTeeReadableStreamCodeLength) \
macro(readableStreamInternalsDoStructuredCloneCode, doStructuredClone, s_readableStreamInternalsDoStructuredCloneCodeLength) \
macro(readableStreamInternalsTeeReadableStreamPullFunctionCode, teeReadableStreamPullFunction, s_readableStreamInternalsTeeReadableStreamPullFunctionCodeLength) \
macro(readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCode, teeReadableStreamBranch1CancelFunction, s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCodeLength) \
macro(readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCode, teeReadableStreamBranch2CancelFunction, s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCodeLength) \
macro(readableStreamInternalsIsReadableStreamCode, isReadableStream, s_readableStreamInternalsIsReadableStreamCodeLength) \
macro(readableStreamInternalsIsReadableStreamDefaultReaderCode, isReadableStreamDefaultReader, s_readableStreamInternalsIsReadableStreamDefaultReaderCodeLength) \
macro(readableStreamInternalsIsReadableStreamDefaultControllerCode, isReadableStreamDefaultController, s_readableStreamInternalsIsReadableStreamDefaultControllerCodeLength) \
macro(readableStreamInternalsErrorReadableStreamCode, errorReadableStream, s_readableStreamInternalsErrorReadableStreamCodeLength) \
macro(readableStreamInternalsRequestReadableStreamPullCode, requestReadableStreamPull, s_readableStreamInternalsRequestReadableStreamPullCodeLength) \
macro(readableStreamInternalsIsReadableStreamLockedCode, isReadableStreamLocked, s_readableStreamInternalsIsReadableStreamLockedCodeLength) \
macro(readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCode, readableStreamDefaultControllerGetDesiredSize, s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCodeLength) \
macro(readableStreamInternalsCancelReadableStreamCode, cancelReadableStream, s_readableStreamInternalsCancelReadableStreamCodeLength) \
macro(readableStreamInternalsReadableStreamDefaultControllerCloseCode, readableStreamDefaultControllerClose, s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeLength) \
macro(readableStreamInternalsCloseReadableStreamCode, closeReadableStream, s_readableStreamInternalsCloseReadableStreamCodeLength) \
macro(readableStreamInternalsEnqueueInReadableStreamCode, enqueueInReadableStream, s_readableStreamInternalsEnqueueInReadableStreamCodeLength) \
macro(readableStreamInternalsReadFromReadableStreamDefaultReaderCode, readFromReadableStreamDefaultReader, s_readableStreamInternalsReadFromReadableStreamDefaultReaderCodeLength) \
macro(readableStreamInternalsReadableStreamAddReadRequestCode, readableStreamAddReadRequest, s_readableStreamInternalsReadableStreamAddReadRequestCodeLength) \
macro(readableStreamInternalsIsReadableStreamDisturbedCode, isReadableStreamDisturbed, s_readableStreamInternalsIsReadableStreamDisturbedCodeLength) \
#define WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(macro) \
macro(cancelReadableStream) \
macro(closeReadableStream) \
macro(doStructuredClone) \
macro(enqueueInReadableStream) \
macro(errorReadableStream) \
macro(isReadableStream) \
macro(isReadableStreamDefaultController) \
macro(isReadableStreamDefaultReader) \
macro(isReadableStreamDisturbed) \
macro(isReadableStreamLocked) \
macro(privateInitializeReadableStreamDefaultController) \
macro(privateInitializeReadableStreamDefaultReader) \
macro(readFromReadableStreamDefaultReader) \
macro(readableStreamAddReadRequest) \
macro(readableStreamDefaultControllerClose) \
macro(readableStreamDefaultControllerError) \
macro(readableStreamDefaultControllerGetDesiredSize) \
macro(requestReadableStreamPull) \
macro(teeReadableStream) \
macro(teeReadableStreamBranch1CancelFunction) \
macro(teeReadableStreamBranch2CancelFunction) \
macro(teeReadableStreamPullFunction) \
#define DECLARE_BUILTIN_GENERATOR(codeName, functionName, argumentCount) \
JSC::FunctionExecutable* codeName##Generator(JSC::VM&);
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(DECLARE_BUILTIN_GENERATOR)
#undef DECLARE_BUILTIN_GENERATOR
class ReadableStreamInternalsBuiltinsWrapper : private JSC::WeakHandleOwner {
public:
explicit ReadableStreamInternalsBuiltinsWrapper(JSC::VM* vm)
: m_vm(*vm)
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
#undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
{
}
#define EXPOSE_BUILTIN_EXECUTABLES(name, functionName, length) \
JSC::UnlinkedFunctionExecutable* name##Executable(); \
const JSC::SourceCode& name##Source() const { return m_##name##Source; }
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(EXPOSE_BUILTIN_EXECUTABLES)
#undef EXPOSE_BUILTIN_EXECUTABLES
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_IDENTIFIER_ACCESSOR)
void exportNames();
private:
JSC::VM& m_vm;
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_NAMES)
#define DECLARE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) \
JSC::SourceCode m_##name##Source;\
JSC::Weak<JSC::UnlinkedFunctionExecutable> m_##name##Executable;
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(DECLARE_BUILTIN_SOURCE_MEMBERS)
#undef DECLARE_BUILTIN_SOURCE_MEMBERS
};
#define DEFINE_BUILTIN_EXECUTABLES(name, functionName, length) \
inline JSC::UnlinkedFunctionExecutable* ReadableStreamInternalsBuiltinsWrapper::name##Executable() \
{\
if (!m_##name##Executable)\
m_##name##Executable = JSC::Weak<JSC::UnlinkedFunctionExecutable>(JSC::createBuiltinExecutable(m_vm, m_##name##Source, functionName##PublicName(), s_##name##ConstructAbility), this, &m_##name##Executable);\
return m_##name##Executable.get();\
}
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(DEFINE_BUILTIN_EXECUTABLES)
#undef DEFINE_BUILTIN_EXECUTABLES
inline void ReadableStreamInternalsBuiltinsWrapper::exportNames()
{
#define EXPORT_FUNCTION_NAME(name) m_vm.propertyNames->appendExternalName(name##PublicName(), name##PrivateName());
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(EXPORT_FUNCTION_NAME)
#undef EXPORT_FUNCTION_NAME
}
class ReadableStreamInternalsBuiltinFunctions {
public:
explicit ReadableStreamInternalsBuiltinFunctions(JSC::VM& vm) : m_vm(vm) { }
void init(JSC::JSGlobalObject&);
void visit(JSC::SlotVisitor&);
public:
JSC::VM& m_vm;
#define DECLARE_BUILTIN_SOURCE_MEMBERS(functionName) \
JSC::WriteBarrier<JSC::JSFunction> m_##functionName##Function;
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(DECLARE_BUILTIN_SOURCE_MEMBERS)
#undef DECLARE_BUILTIN_SOURCE_MEMBERS
};
inline void ReadableStreamInternalsBuiltinFunctions::init(JSC::JSGlobalObject& globalObject)
{
#define EXPORT_FUNCTION(codeName, functionName, length)\
m_##functionName##Function.set(m_vm, &globalObject, JSC::JSFunction::createBuiltinFunction(m_vm, codeName##Generator(m_vm), &globalObject));
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(EXPORT_FUNCTION)
#undef EXPORT_FUNCTION
}
inline void ReadableStreamInternalsBuiltinFunctions::visit(JSC::SlotVisitor& visitor)
{
#define VISIT_FUNCTION(name) visitor.append(&m_##name##Function);
WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_FUNCTION_NAME(VISIT_FUNCTION)
#undef VISIT_FUNCTION
}
} // namespace WebCore
#endif // ENABLE(READABLE_STREAM_API)