| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- // 1. Use eval to initialize an object.
- var x = eval("({" + '"' + "3d-cube" + '"' + ":[1]})");
- WScript.Echo(x["3d-cube"][0]);
- WScript.Echo(x);
- // 2. Use eval to assign a global variable
- eval("var i = " + '"' + "3d-cube" + '"' + ";");
- var str1 = "var x;"
- var str2 = "x = 9; g(); x = 8;"
- // 3. Use eval to define nested functions. Use nested eval to
- // manipulate local variables. Access a global variable
- // with the same name as a local.
- eval("function f()" +
- "{" +
- " eval(str1);" +
- " function g() { WScript.Echo(x); };" +
- " eval(str2);" +
- " return g;" +
- "}; " +
- "WScript.Echo(x[i][0]);" );
- // 4. Use eval to call the function defined within the previous eval
- // and get back the nested function.
- var z = eval("f()");
- eval("z()");
- // 5. Call function containing eval taking multiple params; pass it too few.
- // Test of ArgIn_A handling when params are homed to a heap location.
- function foo(a, b, c) {
- eval("WScript.Echo(a);");
- eval("WScript.Echo(b);");
- eval("WScript.Echo(c);");
- }
- foo("foo.a", "foo.b");
- (function () {
- function foo(a) {
- WScript.Echo(foo);
- eval("bar(false)");
- function bar(x) {
- if (x)
- foo(x);
- }
- };
- foo(true);
- })();
- // 6. Function declarations inside eval should go to the enclosing scope
- // (but not to a "with" object).
- var O = {xxx:'O.xxx'};
- with (O)
- {
- eval('function xxx(){}');
- }
- WScript.Echo(O.xxx);
- WScript.Echo(xxx);
- (function () { eval("function foobaz() {}") })();
- try {
- foobaz();
- WScript.Echo("fail");
- } catch(e) {
- WScript.Echo("pass");
- }
- // 7. Check 'this' inside eval. See WOOB 1127689.
- function F(obj)
- {
- this.name = "F";
- WScript.Echo("inside eval: this.name = " + obj.eval('this.name'));
- }
- this.name = "global object";
- var f = new F(this);
- var test11glob=42;
- function test11() {
- var result;
- function test()
- {
- return this.test11glob
- }
- WScript.Echo(test());
- WScript.Echo(eval("test()"));
- }
- test11();
- // Make sure that deeply aliased eval call does the right thing.
- var G = this;
- G.NSEval = G["eval"];
- function alias() {
- var x = 'hello';
- // In compat mode, print hello. In standards mode, print the global x.
- // And in compat mode, run with deferred parsing to make sure the aliasing
- // of "this" persists across parser instances.
- G.NSEval('WScript.Echo(x)');
- }
- alias();
- // bug 1147044
- eval("with ({}) (function fibonacci() {})();");
- // 8. Set up a custom eval that indirectly calls built-in eval, evoke it, and verify the effect.
- var q = eval;
- var eval = function(s) {
- // Do some extra stuff.
- WScript.Echo("Custom eval:");
- for (var index = 0; index < arguments.length; index++)
- {
- WScript.Echo("arg " + index + " = \'" + arguments[index] + "\'");
- }
- q(s);
- }
- eval("x[i][0] = 2;");
- WScript.Echo(x[i][0]);
- // 9. Test that the extra scope chain parameter is hidden.
- eval = (function (x, y) { WScript.Echo(y + ''); });
- eval('hello');
- // 10. Test jitting of a store to a closure-captured block-scoped variable.
- function test5810363() {
- (function () {
- if (false) {
- (function () {
- eval('');
- }());
- function func13() {
- }
- while (func13 = func13) {
- }
- }
- }());
- }
- test5810363();
- test5810363();
- test5810363();
|