integrate readablestream with fetch and blob

This commit is contained in:
Gregory Terzian 2020-02-29 11:59:10 +08:00
parent 0281acea95
commit bd5796c90b
74 changed files with 2219 additions and 899 deletions

View file

@ -906,6 +906,40 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
return handleOptional(templateBody, declType, handleDefault("None"))
if type.isReadableStream():
assert not isEnforceRange and not isClamp
if failureCode is None:
unwrapFailureCode = '''throw_type_error(*cx, "This object is not \
an instance of ReadableStream.");\n'''
else:
unwrapFailureCode = failureCode
templateBody = fill(
"""
{
use crate::realms::{AlreadyInRealm, InRealm};
let in_realm_proof = AlreadyInRealm::assert_for_cx(cx);
match ReadableStream::from_js(cx, $${val}.get().to_object(), InRealm::Already(&in_realm_proof)) {
Ok(val) => val,
Err(()) => {
$*{failureCode}
}
}
}
""",
failureCode=unwrapFailureCode + "\n",
)
templateBody = wrapObjectTemplate(templateBody, "None",
isDefinitelyObject, type, failureCode)
declType = CGGeneric("DomRoot<ReadableStream>")
return handleOptional(templateBody, declType,
handleDefault("None"))
elif type.isSpiderMonkeyInterface():
raise TypeError("Can't handle SpiderMonkey interface arguments other than typed arrays yet")
@ -4481,6 +4515,9 @@ def getUnionTypeTemplateVars(type, descriptorProvider):
elif type.isObject():
name = type.name
typeName = "Heap<*mut JSObject>"
elif type.isReadableStream():
name = type.name
typeName = "DomRoot<ReadableStream>"
elif is_typed_array(type):
name = type.name
typeName = "typedarray::Heap" + name