1325606 - Return wrapped async function from caller property.
parent
5f8341bf16
commit
9e9223be14
|
@ -284,6 +284,8 @@ CallerGetterImpl(JSContext* cx, const CallArgs& args)
|
|||
}
|
||||
|
||||
RootedObject caller(cx, iter.callee(cx));
|
||||
if (caller->is<JSFunction>() && caller->as<JSFunction>().isAsync())
|
||||
caller = GetWrappedAsyncFunction(&caller->as<JSFunction>());
|
||||
if (!cx->compartment()->wrap(cx, &caller))
|
||||
return false;
|
||||
|
||||
|
@ -304,6 +306,8 @@ CallerGetterImpl(JSContext* cx, const CallArgs& args)
|
|||
}
|
||||
|
||||
JSFunction* callerFun = &callerObj->as<JSFunction>();
|
||||
if (IsWrappedAsyncFunction(callerFun))
|
||||
callerFun = GetUnwrappedAsyncFunction(callerFun);
|
||||
MOZ_ASSERT(!callerFun->isBuiltin(), "non-builtin iterator returned a builtin?");
|
||||
|
||||
if (callerFun->strict()) {
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
var BUGNUMBER = 1185106;
|
||||
var summary = "caller property of function inside async function should return wrapped async function";
|
||||
|
||||
print(BUGNUMBER + ": " + summary);
|
||||
|
||||
(async function f() {
|
||||
var inner = (function g() {
|
||||
return g.caller;
|
||||
})();
|
||||
assertEq(inner, f);
|
||||
})();
|
||||
|
||||
(async function f() {
|
||||
"use strict";
|
||||
try {
|
||||
(function g() {
|
||||
return g.caller;
|
||||
})();
|
||||
assertEq(true, false);
|
||||
} catch (e) {
|
||||
assertEq(e instanceof TypeError, true);
|
||||
}
|
||||
})();
|
||||
|
||||
if (typeof reportCompare === "function")
|
||||
reportCompare(true, true);
|
Loading…
Reference in New Issue