disposal-during-non-local-jump-loop.js (2214B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 { 6 const disposed = []; 7 const d = { 8 [Symbol.dispose]() { 9 disposed.push(1); 10 } 11 }; 12 outer: for (let a of [1]) { 13 for (using x of [d]) { 14 { 15 let a = 0, b = () => a; 16 break outer; 17 } 18 } 19 } 20 assertArrayEq(disposed, [1]); 21 } 22 23 { 24 const disposed = []; 25 const d = { 26 [Symbol.dispose]() { 27 disposed.push(1); 28 } 29 }; 30 outer: for (let a of [1]) { 31 for (using x of [d]) { 32 continue outer; 33 } 34 } 35 assertArrayEq(disposed, [1]); 36 } 37 38 { 39 const disposed = []; 40 const d = { 41 [Symbol.dispose]() { 42 disposed.push(1); 43 } 44 }; 45 outer: for (let a of [1]) { 46 for (using x of [d]) { 47 { 48 let a = 0, b = () => a; 49 continue outer; 50 } 51 } 52 } 53 assertArrayEq(disposed, [1]); 54 } 55 56 { 57 const disposed = []; 58 const d = { 59 [Symbol.dispose]() { 60 disposed.push(1); 61 } 62 } 63 for (const i in { a: 1 }) { 64 using x = d; 65 break; 66 } 67 assertArrayEq(disposed, [1]); 68 } 69 70 { 71 const disposed = []; 72 const d = { 73 [Symbol.dispose]() { 74 disposed.push(1); 75 } 76 } 77 outer: for (const i in { a: 1 }) { 78 for (const j in { b: 1 }) { 79 using x = d; 80 break outer; 81 } 82 } 83 assertArrayEq(disposed, [1]); 84 } 85 86 { 87 const disposed = []; 88 const d = { 89 [Symbol.dispose]() { 90 disposed.push(1); 91 } 92 } 93 outer: for (const i in { a: 1 }) { 94 for (const j in { b: 1 }) { 95 using x = d; 96 continue outer; 97 } 98 } 99 assertArrayEq(disposed, [1]); 100 } 101 102 { 103 const disposed = []; 104 const d = { 105 [Symbol.dispose]() { 106 disposed.push(1); 107 } 108 } 109 outer: for (const i in { a: 1 }) { 110 for (const j in { b: 1 }) { 111 using x = d; 112 { 113 let a = 0, b = () => a; 114 break outer; 115 } 116 } 117 } 118 assertArrayEq(disposed, [1]); 119 } 120 121 { 122 const disposed = []; 123 const d = { 124 [Symbol.dispose]() { 125 disposed.push(1); 126 } 127 } 128 outer: for (const i in { a: 1 }) { 129 for (const j in { b: 1 }) { 130 using x = d; 131 { 132 let a = 0, b = () => a; 133 continue outer; 134 } 135 } 136 } 137 assertArrayEq(disposed, [1]); 138 }