System.register([], function (exports, module) {
	'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');

		}
	};
});
