js/src/tests/ecma_5/extensions/uneval-strict-functions.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  * Any copyright is dedicated to the Public Domain.
     3  * http://creativecommons.org/licenses/publicdomain/
     4  */
     6 /* Check that strict mode functions get decompiled properly. */
     7 function lenient() { return typeof this == "object"; }
     8 assertEq(eval(uneval(lenient) + "lenient;")(), true);
    10 function strict()  { 'use strict'; return typeof this == "undefined"; }
    11 print(uneval(strict));
    12 assertEq(eval(uneval(strict) + "strict;")(), true);
    14 function lenient_outer() {
    15     function lenient_inner() {
    16         return typeof this == "object";
    17     }
    18     return lenient_inner;
    19 }
    20 assertEq(eval(uneval(lenient_outer()) + "lenient_inner;")(), true);
    22 function strict_outer() {
    23     "use strict";
    24     function strict_inner() {
    25         return typeof this == "undefined";
    26     }
    27     return strict_inner;
    28 }
    29 assertEq(eval(uneval(strict_outer()) + "strict_inner;")(), true);
    31 function lenient_outer_closure() {
    32     return function lenient_inner_closure() { 
    33                return typeof this == "object"; 
    34            };
    35 }
    36 assertEq(eval(uneval(lenient_outer_closure()))(), true);
    38 function strict_outer_closure() {
    39     "use strict";
    40     return function strict_inner_closure() { 
    41                return typeof this == "undefined"; 
    42            };
    43 }
    44 assertEq(eval(uneval(strict_outer_closure()))(), true);
    46 function lenient_outer_expr() {
    47     return function lenient_inner_expr() (typeof this == "object");
    48 }
    49 assertEq(eval(uneval(lenient_outer_expr()))(), true);
    51 /*
    52  * This doesn't work, because we have no way to include strict mode
    53  * directives in expression closures.
    54  *
    55  *   function strict_outer_expr() {
    56  *       return function strict_inner_expr() (typeof this == "undefined");
    57  *   }
    58  *   assertEq(eval(uneval(strict_outer_expr()))(), true);
    59  */
    61 reportCompare(true, true);

mercurial