mirror of https://github.com/lukechilds/rollup.git
Rich-Harris
8 years ago
10 changed files with 154 additions and 0 deletions
@ -0,0 +1,15 @@ |
|||
import Node from '../Node.js'; |
|||
import { STRING } from '../values.js'; |
|||
|
|||
export default class ForInStatement extends Node { |
|||
initialise ( scope ) { |
|||
super.initialise( scope ); |
|||
|
|||
// special case
|
|||
if ( this.left.type === 'VariableDeclaration' ) { |
|||
for ( const proxy of this.left.declarations[0].proxies.values() ) { |
|||
proxy.possibleValues.add( STRING ); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
import Node from '../Node.js'; |
|||
import { UNKNOWN } from '../values.js'; |
|||
|
|||
export default class ForOfStatement extends Node { |
|||
initialise ( scope ) { |
|||
super.initialise( scope ); |
|||
|
|||
// special case
|
|||
if ( this.left.type === 'VariableDeclaration' ) { |
|||
for ( const proxy of this.left.declarations[0].proxies.values() ) { |
|||
proxy.possibleValues.add( UNKNOWN ); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
module.exports = { |
|||
description: 'includes effects in for-of loop (#870)' |
|||
} |
@ -0,0 +1,19 @@ |
|||
define(function () { 'use strict'; |
|||
|
|||
const items = [{}, {}, {}]; |
|||
|
|||
function x () { |
|||
for ( const item of items.children ) { |
|||
item.foo = 'bar'; |
|||
} |
|||
} |
|||
|
|||
x(); |
|||
|
|||
assert.deepEqual( items, [ |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' } |
|||
]); |
|||
|
|||
}); |
@ -0,0 +1,17 @@ |
|||
'use strict'; |
|||
|
|||
const items = [{}, {}, {}]; |
|||
|
|||
function x () { |
|||
for ( const item of items.children ) { |
|||
item.foo = 'bar'; |
|||
} |
|||
} |
|||
|
|||
x(); |
|||
|
|||
assert.deepEqual( items, [ |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' } |
|||
]); |
@ -0,0 +1,15 @@ |
|||
const items = [{}, {}, {}]; |
|||
|
|||
function x () { |
|||
for ( const item of items.children ) { |
|||
item.foo = 'bar'; |
|||
} |
|||
} |
|||
|
|||
x(); |
|||
|
|||
assert.deepEqual( items, [ |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' } |
|||
]); |
@ -0,0 +1,20 @@ |
|||
(function () { |
|||
'use strict'; |
|||
|
|||
const items = [{}, {}, {}]; |
|||
|
|||
function x () { |
|||
for ( const item of items.children ) { |
|||
item.foo = 'bar'; |
|||
} |
|||
} |
|||
|
|||
x(); |
|||
|
|||
assert.deepEqual( items, [ |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' } |
|||
]); |
|||
|
|||
}()); |
@ -0,0 +1,23 @@ |
|||
(function (global, factory) { |
|||
typeof exports === 'object' && typeof module !== 'undefined' ? factory() : |
|||
typeof define === 'function' && define.amd ? define(factory) : |
|||
(factory()); |
|||
}(this, (function () { 'use strict'; |
|||
|
|||
const items = [{}, {}, {}]; |
|||
|
|||
function x () { |
|||
for ( const item of items.children ) { |
|||
item.foo = 'bar'; |
|||
} |
|||
} |
|||
|
|||
x(); |
|||
|
|||
assert.deepEqual( items, [ |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' } |
|||
]); |
|||
|
|||
}))); |
@ -0,0 +1,23 @@ |
|||
const items = [{}, {}, {}]; |
|||
|
|||
function x () { |
|||
for ( const item of items.children ) { |
|||
item.foo = 'bar'; |
|||
} |
|||
} |
|||
|
|||
x(); |
|||
|
|||
function y () { |
|||
for ( const item of items.children ) { |
|||
// do nothing
|
|||
} |
|||
} |
|||
|
|||
y(); |
|||
|
|||
assert.deepEqual( items, [ |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' }, |
|||
{ foo: 'bar' } |
|||
]); |
Loading…
Reference in new issue