diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index f5feb09e5e5..e198c123f30 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -1403,7 +1403,7 @@ export const addDisposableResourceHelper: UnscopedEmitHelper = { text: ` var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/src/testRunner/unittests/evaluation/usingDeclarations.ts b/src/testRunner/unittests/evaluation/usingDeclarations.ts index 11100c95280..701daf7208f 100644 --- a/src/testRunner/unittests/evaluation/usingDeclarations.ts +++ b/src/testRunner/unittests/evaluation/usingDeclarations.ts @@ -1658,4 +1658,29 @@ describe("unittests:: evaluation:: usingDeclarations", () => { "after block" ]); }); + + it("'using' for 'function' disposable resource ", () => { + const { main, output } = evaluator.evaluateTypeScript(` + export const output: any[] = []; + + function disposable() { + const f = () => output.push("enter"); + const d = () => output.push("exit"); + return Object.assign(f, { [Symbol.dispose]: d }); + } + + export function main() { + using run = disposable(); + run(); + } + + `, { target: ts.ScriptTarget.ES2018 }); + + main(); + + assert.deepEqual(output, [ + "enter", + "exit", + ]); + }); }); diff --git a/tests/baselines/reference/awaitUsingDeclarations.1(target=es2015).js b/tests/baselines/reference/awaitUsingDeclarations.1(target=es2015).js index 0d1aa5282bb..704d04dd43c 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.1(target=es2015).js +++ b/tests/baselines/reference/awaitUsingDeclarations.1(target=es2015).js @@ -111,7 +111,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.1(target=es2017).js b/tests/baselines/reference/awaitUsingDeclarations.1(target=es2017).js index 9732d266f7f..90b68228db0 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.1(target=es2017).js +++ b/tests/baselines/reference/awaitUsingDeclarations.1(target=es2017).js @@ -102,7 +102,7 @@ export {}; //// [awaitUsingDeclarations.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.1(target=es2022).js b/tests/baselines/reference/awaitUsingDeclarations.1(target=es2022).js index 41ca069585c..2cd219cdd24 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.1(target=es2022).js +++ b/tests/baselines/reference/awaitUsingDeclarations.1(target=es2022).js @@ -102,7 +102,7 @@ export {}; //// [awaitUsingDeclarations.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.1(target=es5).js b/tests/baselines/reference/awaitUsingDeclarations.1(target=es5).js index 7d7ec33b23b..296356438e9 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.1(target=es5).js +++ b/tests/baselines/reference/awaitUsingDeclarations.1(target=es5).js @@ -138,7 +138,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.2(target=es2015).js b/tests/baselines/reference/awaitUsingDeclarations.2(target=es2015).js index 03565e6b338..ac277978edc 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.2(target=es2015).js +++ b/tests/baselines/reference/awaitUsingDeclarations.2(target=es2015).js @@ -20,7 +20,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.2(target=es2017).js b/tests/baselines/reference/awaitUsingDeclarations.2(target=es2017).js index ab37b86fcec..33a940df872 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.2(target=es2017).js +++ b/tests/baselines/reference/awaitUsingDeclarations.2(target=es2017).js @@ -11,7 +11,7 @@ export {}; //// [awaitUsingDeclarations.2.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.2(target=es2022).js b/tests/baselines/reference/awaitUsingDeclarations.2(target=es2022).js index ab37b86fcec..33a940df872 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.2(target=es2022).js +++ b/tests/baselines/reference/awaitUsingDeclarations.2(target=es2022).js @@ -11,7 +11,7 @@ export {}; //// [awaitUsingDeclarations.2.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.2(target=es5).js b/tests/baselines/reference/awaitUsingDeclarations.2(target=es5).js index e9a87c08a11..1bff5fb3657 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.2(target=es5).js +++ b/tests/baselines/reference/awaitUsingDeclarations.2(target=es5).js @@ -47,7 +47,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.3(target=es2015).js b/tests/baselines/reference/awaitUsingDeclarations.3(target=es2015).js index 4b8939b215b..e21dc4c3a47 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.3(target=es2015).js +++ b/tests/baselines/reference/awaitUsingDeclarations.3(target=es2015).js @@ -22,7 +22,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.3(target=es2017).js b/tests/baselines/reference/awaitUsingDeclarations.3(target=es2017).js index 2edb5db731e..b070220f5d8 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.3(target=es2017).js +++ b/tests/baselines/reference/awaitUsingDeclarations.3(target=es2017).js @@ -13,7 +13,7 @@ export {}; //// [awaitUsingDeclarations.3.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.3(target=es2022).js b/tests/baselines/reference/awaitUsingDeclarations.3(target=es2022).js index 2edb5db731e..b070220f5d8 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.3(target=es2022).js +++ b/tests/baselines/reference/awaitUsingDeclarations.3(target=es2022).js @@ -13,7 +13,7 @@ export {}; //// [awaitUsingDeclarations.3.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarations.3(target=es5).js b/tests/baselines/reference/awaitUsingDeclarations.3(target=es5).js index 2cc2c25f5f4..b198385d9c9 100644 --- a/tests/baselines/reference/awaitUsingDeclarations.3(target=es5).js +++ b/tests/baselines/reference/awaitUsingDeclarations.3(target=es5).js @@ -49,7 +49,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2015).js b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2015).js index 53a07f9602f..bca9ebbbe23 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2015).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2015).js @@ -21,7 +21,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2017).js b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2017).js index bbfca93a9c7..b8190e4b820 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2017).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2017).js @@ -12,7 +12,7 @@ async function main() { //// [awaitUsingDeclarationsInFor.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2022).js b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2022).js index bbfca93a9c7..b8190e4b820 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2022).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2022).js @@ -12,7 +12,7 @@ async function main() { //// [awaitUsingDeclarationsInFor.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es5).js b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es5).js index 1ba3ab31d94..61b4144ebb5 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es5).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInFor(target=es5).js @@ -48,7 +48,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2015).js b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2015).js index 187f098c833..d9256e21a2b 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2015).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2015).js @@ -18,7 +18,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2017).js b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2017).js index 845789f9a5f..905825b1b30 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2017).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2017).js @@ -9,7 +9,7 @@ async function main() { //// [awaitUsingDeclarationsInForAwaitOf.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2022).js b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2022).js index 1d6ca04cdf4..e440639100f 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2022).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2022).js @@ -9,7 +9,7 @@ async function main() { //// [awaitUsingDeclarationsInForAwaitOf.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es5).js b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es5).js index 070dfbd4440..9f6518c1e03 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es5).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es5).js @@ -45,7 +45,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2015).js b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2015).js index 3f34c45822e..f3e50b24326 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2015).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2015).js @@ -19,7 +19,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2017).js b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2017).js index a9555cf3fb0..80b040f2096 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2017).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2017).js @@ -10,7 +10,7 @@ async function main() { //// [awaitUsingDeclarationsInForOf.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2022).js b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2022).js index a9555cf3fb0..80b040f2096 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2022).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2022).js @@ -10,7 +10,7 @@ async function main() { //// [awaitUsingDeclarationsInForOf.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es5).js b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es5).js index d9514c078d9..84357ba7b9b 100644 --- a/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es5).js +++ b/tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es5).js @@ -46,7 +46,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.1(target=es2015).js b/tests/baselines/reference/usingDeclarations.1(target=es2015).js index c10bc21fb1f..aa195d8388e 100644 --- a/tests/baselines/reference/usingDeclarations.1(target=es2015).js +++ b/tests/baselines/reference/usingDeclarations.1(target=es2015).js @@ -165,7 +165,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.1(target=es2017).js b/tests/baselines/reference/usingDeclarations.1(target=es2017).js index f65b33bc977..39f415992d2 100644 --- a/tests/baselines/reference/usingDeclarations.1(target=es2017).js +++ b/tests/baselines/reference/usingDeclarations.1(target=es2017).js @@ -156,7 +156,7 @@ export {}; //// [usingDeclarations.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.1(target=es2022).js b/tests/baselines/reference/usingDeclarations.1(target=es2022).js index f5bf25b81c9..ec38bf090c2 100644 --- a/tests/baselines/reference/usingDeclarations.1(target=es2022).js +++ b/tests/baselines/reference/usingDeclarations.1(target=es2022).js @@ -156,7 +156,7 @@ export {}; //// [usingDeclarations.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.1(target=es5).js b/tests/baselines/reference/usingDeclarations.1(target=es5).js index 369559dff3a..82ffc544605 100644 --- a/tests/baselines/reference/usingDeclarations.1(target=es5).js +++ b/tests/baselines/reference/usingDeclarations.1(target=es5).js @@ -207,7 +207,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.11.js b/tests/baselines/reference/usingDeclarations.11.js index 3cce2dda67f..449debe53d9 100644 --- a/tests/baselines/reference/usingDeclarations.11.js +++ b/tests/baselines/reference/usingDeclarations.11.js @@ -54,7 +54,7 @@ var __extends = (this && this.__extends) || (function () { })(); var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=false).js b/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=false).js index 768b5142fd3..f1785f604cc 100644 --- a/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=false).js +++ b/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=false).js @@ -16,7 +16,7 @@ class C2 extends C1 { //// [usingDeclarations.12.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=true).js b/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=true).js index 641d086c19e..10cc02241eb 100644 --- a/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=true).js +++ b/tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=true).js @@ -16,7 +16,7 @@ class C2 extends C1 { //// [usingDeclarations.12.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.2(target=es2015).js b/tests/baselines/reference/usingDeclarations.2(target=es2015).js index 66c7f0b962d..a3f08d13e52 100644 --- a/tests/baselines/reference/usingDeclarations.2(target=es2015).js +++ b/tests/baselines/reference/usingDeclarations.2(target=es2015).js @@ -10,7 +10,7 @@ //// [usingDeclarations.2.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.2(target=es2017).js b/tests/baselines/reference/usingDeclarations.2(target=es2017).js index 66c7f0b962d..a3f08d13e52 100644 --- a/tests/baselines/reference/usingDeclarations.2(target=es2017).js +++ b/tests/baselines/reference/usingDeclarations.2(target=es2017).js @@ -10,7 +10,7 @@ //// [usingDeclarations.2.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.2(target=es2022).js b/tests/baselines/reference/usingDeclarations.2(target=es2022).js index 66c7f0b962d..a3f08d13e52 100644 --- a/tests/baselines/reference/usingDeclarations.2(target=es2022).js +++ b/tests/baselines/reference/usingDeclarations.2(target=es2022).js @@ -10,7 +10,7 @@ //// [usingDeclarations.2.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.2(target=es5).js b/tests/baselines/reference/usingDeclarations.2(target=es5).js index cb89d9fb7ef..9ec10e2392d 100644 --- a/tests/baselines/reference/usingDeclarations.2(target=es5).js +++ b/tests/baselines/reference/usingDeclarations.2(target=es5).js @@ -10,7 +10,7 @@ //// [usingDeclarations.2.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.3(target=es2015).js b/tests/baselines/reference/usingDeclarations.3(target=es2015).js index 061c93eba32..ffe7df15b5c 100644 --- a/tests/baselines/reference/usingDeclarations.3(target=es2015).js +++ b/tests/baselines/reference/usingDeclarations.3(target=es2015).js @@ -12,7 +12,7 @@ //// [usingDeclarations.3.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.3(target=es2017).js b/tests/baselines/reference/usingDeclarations.3(target=es2017).js index 061c93eba32..ffe7df15b5c 100644 --- a/tests/baselines/reference/usingDeclarations.3(target=es2017).js +++ b/tests/baselines/reference/usingDeclarations.3(target=es2017).js @@ -12,7 +12,7 @@ //// [usingDeclarations.3.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.3(target=es2022).js b/tests/baselines/reference/usingDeclarations.3(target=es2022).js index 061c93eba32..ffe7df15b5c 100644 --- a/tests/baselines/reference/usingDeclarations.3(target=es2022).js +++ b/tests/baselines/reference/usingDeclarations.3(target=es2022).js @@ -12,7 +12,7 @@ //// [usingDeclarations.3.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarations.3(target=es5).js b/tests/baselines/reference/usingDeclarations.3(target=es5).js index baf9f209693..014e9bdf877 100644 --- a/tests/baselines/reference/usingDeclarations.3(target=es5).js +++ b/tests/baselines/reference/usingDeclarations.3(target=es5).js @@ -12,7 +12,7 @@ //// [usingDeclarations.3.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInFor(target=es2015).js b/tests/baselines/reference/usingDeclarationsInFor(target=es2015).js index 7138c307899..b4b18711abf 100644 --- a/tests/baselines/reference/usingDeclarationsInFor(target=es2015).js +++ b/tests/baselines/reference/usingDeclarationsInFor(target=es2015).js @@ -8,7 +8,7 @@ for (using d1 = { [Symbol.dispose]() {} }, d2 = null, d3 = undefined;;) { //// [usingDeclarationsInFor.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInFor(target=es2017).js b/tests/baselines/reference/usingDeclarationsInFor(target=es2017).js index 7138c307899..b4b18711abf 100644 --- a/tests/baselines/reference/usingDeclarationsInFor(target=es2017).js +++ b/tests/baselines/reference/usingDeclarationsInFor(target=es2017).js @@ -8,7 +8,7 @@ for (using d1 = { [Symbol.dispose]() {} }, d2 = null, d3 = undefined;;) { //// [usingDeclarationsInFor.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInFor(target=es2022).js b/tests/baselines/reference/usingDeclarationsInFor(target=es2022).js index 7138c307899..b4b18711abf 100644 --- a/tests/baselines/reference/usingDeclarationsInFor(target=es2022).js +++ b/tests/baselines/reference/usingDeclarationsInFor(target=es2022).js @@ -8,7 +8,7 @@ for (using d1 = { [Symbol.dispose]() {} }, d2 = null, d3 = undefined;;) { //// [usingDeclarationsInFor.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInFor(target=es5).js b/tests/baselines/reference/usingDeclarationsInFor(target=es5).js index c8cff8bb8d9..1d7ba0e2092 100644 --- a/tests/baselines/reference/usingDeclarationsInFor(target=es5).js +++ b/tests/baselines/reference/usingDeclarationsInFor(target=es5).js @@ -8,7 +8,7 @@ for (using d1 = { [Symbol.dispose]() {} }, d2 = null, d3 = undefined;;) { //// [usingDeclarationsInFor.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2015).js b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2015).js index 24f12546aa6..68c576899e1 100644 --- a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2015).js +++ b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2015).js @@ -19,7 +19,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2017).js b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2017).js index 988c9fbea0b..18dcd49b3b4 100644 --- a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2017).js +++ b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2017).js @@ -10,7 +10,7 @@ async function main() { //// [usingDeclarationsInForAwaitOf.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2022).js b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2022).js index 00737468c93..1c7b601473c 100644 --- a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2022).js +++ b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2022).js @@ -10,7 +10,7 @@ async function main() { //// [usingDeclarationsInForAwaitOf.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es5).js b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es5).js index 0ad207f7507..6e4858db55c 100644 --- a/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es5).js +++ b/tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es5).js @@ -46,7 +46,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2015).js b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2015).js index bf993d5fb62..44639aafc8c 100644 --- a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2015).js +++ b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2015).js @@ -8,7 +8,7 @@ for (using d1 of [{ [Symbol.dispose]() {} }, null, undefined]) { //// [usingDeclarationsInForOf.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2017).js b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2017).js index bf993d5fb62..44639aafc8c 100644 --- a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2017).js +++ b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2017).js @@ -8,7 +8,7 @@ for (using d1 of [{ [Symbol.dispose]() {} }, null, undefined]) { //// [usingDeclarationsInForOf.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2022).js b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2022).js index bf993d5fb62..44639aafc8c 100644 --- a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2022).js +++ b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es2022).js @@ -8,7 +8,7 @@ for (using d1 of [{ [Symbol.dispose]() {} }, null, undefined]) { //// [usingDeclarationsInForOf.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es5).js b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es5).js index f80303d1cfd..f7455d8f780 100644 --- a/tests/baselines/reference/usingDeclarationsInForOf.1(target=es5).js +++ b/tests/baselines/reference/usingDeclarationsInForOf.1(target=es5).js @@ -8,7 +8,7 @@ for (using d1 of [{ [Symbol.dispose]() {} }, null, undefined]) { //// [usingDeclarationsInForOf.1.js] var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); diff --git a/tests/baselines/reference/usingDeclarationsNamedEvaluationDecoratorsAndClassFields.js b/tests/baselines/reference/usingDeclarationsNamedEvaluationDecoratorsAndClassFields.js index 7bdaa309fa6..cd38d05e5f4 100644 --- a/tests/baselines/reference/usingDeclarationsNamedEvaluationDecoratorsAndClassFields.js +++ b/tests/baselines/reference/usingDeclarationsNamedEvaluationDecoratorsAndClassFields.js @@ -65,7 +65,7 @@ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, p }; var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { - if (typeof value !== "object") throw new TypeError("Object expected."); + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");