Merge pull request #389 from sveltejs/gh-388-deconflict-non-helper-functions

Deconflict non helper functions
pull/394/head
Rich Harris 8 years ago committed by GitHub
commit ec3c81f58c

@ -138,6 +138,10 @@ class DomGenerator extends Generator {
this.uses[ name ] = true; this.uses[ name ] = true;
return this.alias( name );
}
alias ( name ) {
if ( !( name in this.aliases ) ) { if ( !( name in this.aliases ) ) {
let alias = name; let alias = name;
let i = 1; let i = 1;
@ -188,7 +192,7 @@ export default function dom ( parsed, source, options, names ) {
} }
generator.push({ generator.push({
name: 'renderMainFragment', name: generator.alias( 'renderMainFragment' ),
namespace, namespace,
target: 'target', target: 'target',
localElementDepth: 0, localElementDepth: 0,
@ -238,12 +242,12 @@ export default function dom ( parsed, source, options, names ) {
}); });
builders.main.addBlock( deindent` builders.main.addBlock( deindent`
function applyComputations ( state, newState, oldState, isInitial ) { function ${generator.alias( 'applyComputations' )} ( state, newState, oldState, isInitial ) {
${builder} ${builder}
} }
` ); ` );
builders._set.addLine( `applyComputations( this._state, newState, oldState, false )` ); builders._set.addLine( `${generator.alias( 'applyComputations' )}( this._state, newState, oldState, false )` );
} }
// TODO is the `if` necessary? // TODO is the `if` necessary?
@ -259,13 +263,13 @@ export default function dom ( parsed, source, options, names ) {
if ( parsed.css && options.css !== false ) { if ( parsed.css && options.css !== false ) {
builders.main.addBlock( deindent` builders.main.addBlock( deindent`
var addedCss = false; var ${generator.alias( 'addedCss' )} = false;
function addCss () { function ${generator.alias( 'addCss' )} () {
var style = ${generator.helper( 'createElement' )}( 'style' ); var style = ${generator.helper( 'createElement' )}( 'style' );
style.textContent = ${JSON.stringify( processCss( parsed, generator.code ) )}; style.textContent = ${JSON.stringify( processCss( parsed, generator.code ) )};
${generator.helper( 'appendNode' )}( style, document.head ); ${generator.helper( 'appendNode' )}( style, document.head );
addedCss = true; ${generator.alias( 'addedCss' )} = true;
} }
` ); ` );
} }
@ -276,7 +280,7 @@ export default function dom ( parsed, source, options, names ) {
builders.init.addLine( `this._torndown = false;` ); builders.init.addLine( `this._torndown = false;` );
if ( parsed.css && options.css !== false ) { if ( parsed.css && options.css !== false ) {
builders.init.addLine( `if ( !addedCss ) addCss();` ); builders.init.addLine( `if ( !${generator.alias( 'addedCss' )} ) ${generator.alias( 'addCss' )}();` );
} }
if ( generator.hasComponents ) { if ( generator.hasComponents ) {
@ -286,7 +290,7 @@ export default function dom ( parsed, source, options, names ) {
if ( generator.hasComplexBindings ) { if ( generator.hasComplexBindings ) {
builders.init.addBlock( deindent` builders.init.addBlock( deindent`
this._bindings = []; this._bindings = [];
this._fragment = renderMainFragment( this._state, this ); this._fragment = ${generator.alias( 'renderMainFragment' )}( this._state, this );
if ( options.target ) this._fragment.mount( options.target, null ); if ( options.target ) this._fragment.mount( options.target, null );
while ( this._bindings.length ) this._bindings.pop()(); while ( this._bindings.length ) this._bindings.pop()();
` ); ` );
@ -294,7 +298,7 @@ export default function dom ( parsed, source, options, names ) {
builders._set.addLine( `while ( this._bindings.length ) this._bindings.pop()();` ); builders._set.addLine( `while ( this._bindings.length ) this._bindings.pop()();` );
} else { } else {
builders.init.addBlock( deindent` builders.init.addBlock( deindent`
this._fragment = renderMainFragment( this._state, this ); this._fragment = ${generator.alias( 'renderMainFragment' )}( this._state, this );
if ( options.target ) this._fragment.mount( options.target, null ); if ( options.target ) this._fragment.mount( options.target, null );
` ); ` );
} }
@ -327,7 +331,7 @@ export default function dom ( parsed, source, options, names ) {
if ( templateProperties.computed ) { if ( templateProperties.computed ) {
constructorBlock.addLine( constructorBlock.addLine(
`applyComputations( this._state, this._state, {}, true );` `${generator.alias( 'applyComputations' )}( this._state, this._state, {}, true );`
); );
} }
@ -419,4 +423,4 @@ export default function dom ( parsed, source, options, names ) {
} }
return generator.generate( builders.main.toString(), options, { name, format } ); return generator.generate( builders.main.toString(), options, { name, format } );
} }

@ -0,0 +1,8 @@
export default {
html: `ABCD`,
test ( assert, component ) {
assert.equal( component.get( 'compute' ), 'ABCD' );
component.destroy();
}
};

@ -0,0 +1,17 @@
{{compute}}
<script>
import { addCss, addedCss, applyComputations, renderMainFragment } from './module.js';
export default {
data() {
return {
value: addCss + addedCss + applyComputations + renderMainFragment
};
},
computed: {
compute: value => value.toUpperCase()
}
};
</script>
<style>
</style>

@ -0,0 +1,4 @@
export const addCss = 'a';
export const addedCss = 'b';
export const applyComputations = 'c';
export const renderMainFragment = 'd';
Loading…
Cancel
Save