diff --git a/src/generate/createGenerator.js b/src/generate/createGenerator.js index e6e2b59d2f..4a6608d967 100644 --- a/src/generate/createGenerator.js +++ b/src/generate/createGenerator.js @@ -131,22 +131,31 @@ export default function createGenerator ( parsed, source, names ) { if ( parent && parent.type === 'CallExpression' && node === parent.callee && generator.helpers[ name ] ) { generator.code.prependRight( node.start, `template.helpers.` ); - return; } - if ( name === 'event' && isEventHandler ) { - return; + else if ( name === 'event' && isEventHandler ) { + // noop } - if ( contexts[ name ] ) { + else if ( contexts[ name ] ) { dependencies.push( ...contextDependencies[ name ] ); if ( !~usedContexts.indexOf( name ) ) usedContexts.push( name ); - } else if ( indexes[ name ] ) { + } + + else if ( indexes[ name ] ) { const context = indexes[ name ]; if ( !~usedContexts.indexOf( context ) ) usedContexts.push( context ); - } else if ( !globalWhitelist[ name ] ) { + } + + else { + if ( globalWhitelist[ name ] ) { + generator.code.prependRight( node.start, `( '${name}' in root ? root.` ); + generator.code.appendLeft( node.object.end, ` : ${name} )` ); + } else { + generator.code.prependRight( node.start, `root.` ); + } + dependencies.push( name ); - generator.code.prependRight( node.start, `root.` ); if ( !~usedContexts.indexOf( 'root' ) ) usedContexts.push( 'root' ); } diff --git a/test/generator/globals-shadowed-by-data/_config.js b/test/generator/globals-shadowed-by-data/_config.js new file mode 100644 index 0000000000..ed1fbcef3d --- /dev/null +++ b/test/generator/globals-shadowed-by-data/_config.js @@ -0,0 +1,12 @@ +export default { + data: { + x: 10 + }, + + html: 'potato', + + test ( assert, component, target ) { + component.set({ x: 3 }); + assert.htmlEqual( target.innerHTML, 'potato' ); + } +}; diff --git a/test/generator/globals-shadowed-by-data/main.html b/test/generator/globals-shadowed-by-data/main.html new file mode 100644 index 0000000000..73fd9437af --- /dev/null +++ b/test/generator/globals-shadowed-by-data/main.html @@ -0,0 +1,15 @@ +{{Math.min(x, 5)}} + + diff --git a/test/generator/globals-shadowed-by-helpers/_config.js b/test/generator/globals-shadowed-by-helpers/_config.js new file mode 100644 index 0000000000..ed1fbcef3d --- /dev/null +++ b/test/generator/globals-shadowed-by-helpers/_config.js @@ -0,0 +1,12 @@ +export default { + data: { + x: 10 + }, + + html: 'potato', + + test ( assert, component, target ) { + component.set({ x: 3 }); + assert.htmlEqual( target.innerHTML, 'potato' ); + } +}; diff --git a/test/generator/globals-shadowed-by-helpers/main.html b/test/generator/globals-shadowed-by-helpers/main.html new file mode 100644 index 0000000000..6746617b6d --- /dev/null +++ b/test/generator/globals-shadowed-by-helpers/main.html @@ -0,0 +1,13 @@ +{{Math.min(x, 5)}} + +