diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap index 9ea502132..5a94de5a6 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap @@ -14,6 +14,21 @@ return function render(_ctx, _cache, $props, $setup, $data, $options) { }" `; +exports[`compiler: expression transform > should allow leak of var declarations in for loop 1`] = ` +"const { openBlock: _openBlock, createElementBlock: _createElementBlock } = Vue + +return function render(_ctx, _cache) { + return (_openBlock(), _createElementBlock("div", { + onClick: () => { + for (var i = 0; i < _ctx.list.length; i++) { + _ctx.log(i) + } + _ctx.error(i) + } + }, null, 8 /* PROPS */, ["onClick"])) +}" +`; + exports[`compiler: expression transform > should not prefix catch block param 1`] = ` "const { openBlock: _openBlock, createElementBlock: _createElementBlock } = Vue @@ -53,6 +68,7 @@ return function render(_ctx, _cache) { for (let i = 0; i < _ctx.list.length; i++) { _ctx.log(i) } + _ctx.error(_ctx.i) } }, null, 8 /* PROPS */, ["onClick"])) }" @@ -67,6 +83,7 @@ return function render(_ctx, _cache) { for (const x in _ctx.list) { _ctx.log(x) } + _ctx.error(_ctx.x) } }, null, 8 /* PROPS */, ["onClick"])) }" @@ -81,6 +98,7 @@ return function render(_ctx, _cache) { for (const x of _ctx.list) { _ctx.log(x) } + _ctx.error(_ctx.x) } }, null, 8 /* PROPS */, ["onClick"])) }" diff --git a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts index af14265e2..c92814089 100644 --- a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts @@ -468,9 +468,11 @@ describe('compiler: expression transform', () => { for (const x in list) { log(x) } + error(x) }"/>`, ) - expect(code).not.toMatch(`_ctx.x`) + expect(code).not.toMatch(`log(_ctx.x)`) + expect(code).toMatch(`error(_ctx.x)`) expect(code).toMatchSnapshot() }) @@ -480,9 +482,11 @@ describe('compiler: expression transform', () => { for (const x of list) { log(x) } + error(x) }"/>`, ) - expect(code).not.toMatch(`_ctx.x`) + expect(code).not.toMatch(`log(_ctx.x)`) + expect(code).toMatch(`error(_ctx.x)`) expect(code).toMatchSnapshot() }) @@ -492,9 +496,25 @@ describe('compiler: expression transform', () => { for (let i = 0; i < list.length; i++) { log(i) } + error(i) }"/>`, ) - expect(code).not.toMatch(`_ctx.i`) + expect(code).not.toMatch(`log(_ctx.i)`) + expect(code).toMatch(`error(_ctx.i)`) + expect(code).toMatchSnapshot() + }) + + test('should allow leak of var declarations in for loop', () => { + const { code } = compile( + `