disposal-during-throw-generators.js (945B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 const values = []; 6 7 function* gen() { 8 using d = { 9 value: "d", 10 [Symbol.dispose]() { 11 values.push(this.value); 12 } 13 } 14 yield "a"; 15 yield "b"; 16 using c = { 17 value: "c", 18 [Symbol.dispose]() { 19 values.push(this.value); 20 } 21 } 22 throw new Error("err"); 23 } 24 25 assertThrowsInstanceOf(() => { 26 let x = gen(); 27 values.push(x.next().value); 28 values.push(x.next().value); 29 x.next(); 30 }, Error); 31 assertArrayEq(values, ["a", "b", "c", "d"]); 32 33 const values2 = []; 34 function* gen2() { 35 using c = { 36 value: "c", 37 [Symbol.dispose]() { 38 values2.push(this.value); 39 } 40 } 41 yield "a"; 42 yield "b"; 43 return; 44 } 45 46 assertThrowsInstanceOf(() => { 47 let x = gen2(); 48 values2.push(x.next().value); 49 x.throw(new Error("err")); 50 }, Error); 51 52 assertArrayEq(values2, ["a", "c"]);