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)}}
+
+