System.register([], (function () {
	'use strict';
	return {
		execute: (function () {

			const wrapper = {
				foo() {
					console.log(this);
				}
			};

			// Indirectly called member expressions set the callee's context to global "this"
			(0, wrapper.foo)();
			(0, wrapper.foo )();
			(0, wrapper.foo)();
			((0, wrapper.foo))();
			((0, wrapper.foo ))();
			((0, wrapper.foo))();

			// Only callees of call expressions should be wrapped
			console.log(wrapper.foo);

			// Indirectly invoked eval is executed in the global scope
			function testEval() {
				console.log((0, eval)('this'));
				console.log((0, eval )('this'));
				console.log((0, eval)('this'));
			}

			testEval.call('test');

		})
	};
}));
