disposal-during-throw-try-catch.js (988B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 let disposed = false; 6 try { 7 using x = { 8 [Symbol.dispose]() { 9 disposed = true; 10 } 11 } 12 throw new Error("err"); 13 } catch { 14 } 15 16 assertEq(disposed, true); 17 18 const valuesInTryFinally = []; 19 try { 20 using x = { 21 value: 'x', 22 [Symbol.dispose]() { 23 valuesInTryFinally.push(this.value); 24 } 25 } 26 throw new Error("err"); 27 } catch { 28 } finally { 29 valuesInTryFinally.push("y"); 30 } 31 assertArrayEq(valuesInTryFinally, ["x", "y"]); 32 33 const valuesInFinallyThenUsing = []; 34 function testValuesInFinallyThenUsing() { 35 using x = { 36 val: 'x', 37 [Symbol.dispose]() { 38 valuesInFinallyThenUsing.push(this.val); 39 } 40 } 41 try { 42 throw new Error("err"); 43 } finally { 44 valuesInFinallyThenUsing.push("y"); 45 } 46 } 47 assertThrowsInstanceOf(testValuesInFinallyThenUsing, Error); 48 assertArrayEq(valuesInFinallyThenUsing, ["y", "x"]);