Browse Source

rewrite member expressions correctly

contingency-plan
Rich-Harris 10 years ago
parent
commit
1b0454ba8e
  1. 7
      src/Bundle/index.js
  2. 2
      src/rollup.js
  3. 15
      src/utils/replaceIdentifiers.js
  4. 3
      test/samples/rewrite-member-expressions/_config.js
  5. 5
      test/samples/rewrite-member-expressions/getLengthOfOtherQueue.js
  6. 7
      test/samples/rewrite-member-expressions/main.js
  7. 9
      test/samples/rewrite-member-expressions/mainQueue.js

7
src/Bundle/index.js

@ -28,13 +28,6 @@ export default class Bundle {
this.externalModules = [];
}
collect () {
return this.build()
.then( () => {
return this;
});
}
fetchModule ( path ) {
if ( !has( this.modulePromises, path ) ) {
this.modulePromises[ path ] = readFile( path, { encoding: 'utf-8' })

2
src/rollup.js

@ -11,7 +11,7 @@ export function rollup ( entry, options = {} ) {
base: options.base || process.cwd()
});
return bundle.collect().then( () => {
return bundle.build().then( () => {
return {
generate: options => bundle.generate( options ),
write: ( dest, options ) => {

15
src/utils/replaceIdentifiers.js

@ -29,15 +29,20 @@ export default function replaceIdentifiers ( statement, snippet, names ) {
return this.skip();
}
names = newNames;
replacementStack.push( newNames );
}
if ( node.type === 'Identifier' && parent.type !== 'MemberExpression' ) {
const name = has( names, node.name ) && names[ node.name ];
// We want to rewrite identifiers (that aren't property names)
if ( node.type !== 'Identifier' ) return;
if ( parent.type === 'MemberExpression' && node !== parent.object ) return;
if ( parent.type === 'Property' && node !== parent.value ) return;
// TODO others...?
if ( name && name !== node.name ) {
snippet.overwrite( node.start, node.end, name );
}
const name = has( names, node.name ) && names[ node.name ];
if ( name && name !== node.name ) {
snippet.overwrite( node.start, node.end, name );
}
},

3
test/samples/rewrite-member-expressions/_config.js

@ -0,0 +1,3 @@
module.exports = {
description: 'rewrites identifiers at the head of member expressions'
};

5
test/samples/rewrite-member-expressions/getLengthOfOtherQueue.js

@ -0,0 +1,5 @@
export default function getLengthOfOtherQueue () {
return queue.length;
}
var queue = new Array( 1000 );

7
test/samples/rewrite-member-expressions/main.js

@ -0,0 +1,7 @@
import { addToQueue, getQueueItem } from './mainQueue';
import getLengthOfOtherQueue from './getLengthOfOtherQueue';
addToQueue( 42 );
assert.equal( getQueueItem( 0 ), 42 );
assert.equal( getLengthOfOtherQueue(), 1000 );

9
test/samples/rewrite-member-expressions/mainQueue.js

@ -0,0 +1,9 @@
var queue = [];
export function addToQueue ( x ) {
queue.push( x );
}
export function getQueueItem ( i ) {
return queue[i];
}
Loading…
Cancel
Save