summaryrefslogtreecommitdiff
path: root/extensions/webidl/00_webidl.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/webidl/00_webidl.js')
-rw-r--r--extensions/webidl/00_webidl.js39
1 files changed, 30 insertions, 9 deletions
diff --git a/extensions/webidl/00_webidl.js b/extensions/webidl/00_webidl.js
index 49f586135..a54d2fe6e 100644
--- a/extensions/webidl/00_webidl.js
+++ b/extensions/webidl/00_webidl.js
@@ -566,6 +566,7 @@
converters["sequence<double>"] = createSequenceConverter(
converters["double"],
);
+ converters["Promise<undefined>"] = createPromiseConverter(() => undefined);
function requiredArguments(length, required, opts = {}) {
if (length < required) {
@@ -578,11 +579,6 @@
}
}
- function isEmptyObject(V) {
- for (const _ in V) return false;
- return true;
- }
-
function createDictionaryConverter(name, ...dictionaries) {
let hasRequiredKey = false;
const allMembers = [];
@@ -642,10 +638,8 @@
const idlDict = { ...defaultValues };
- // NOTE: fast path Null and Undefined and empty objects.
- if (
- (V === undefined || V === null || isEmptyObject(V)) && !hasRequiredKey
- ) {
+ // NOTE: fast path Null and Undefined.
+ if ((V === undefined || V === null) && !hasRequiredKey) {
return idlDict;
}
@@ -774,6 +768,31 @@
};
}
+ function createPromiseConverter(converter) {
+ return (V, opts) => Promise.resolve(V).then((V) => converter(V, opts));
+ }
+
+ function invokeCallbackFunction(
+ callable,
+ args,
+ thisArg,
+ returnValueConverter,
+ opts,
+ ) {
+ try {
+ const rv = Reflect.apply(callable, thisArg, args);
+ return returnValueConverter(rv, {
+ prefix: opts.prefix,
+ context: "return value",
+ });
+ } catch (err) {
+ if (opts.returnsPromise === true) {
+ return Promise.reject(err);
+ }
+ throw err;
+ }
+ }
+
const brand = Symbol("[[webidl.brand]]");
function createInterfaceConverter(name, prototype) {
@@ -927,6 +946,8 @@
createNullableConverter,
createSequenceConverter,
createRecordConverter,
+ createPromiseConverter,
+ invokeCallbackFunction,
createInterfaceConverter,
brand,
createBranded,