tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

testSource.js (7562B)


      1 (function() {
      2 /*
      3 * NO ARGUMENT
      4 */
      5 
      6 function f0() {
      7    "use asm";
      8    function g() {}
      9    return g;
     10 
     11 }
     12 
     13 var bodyOnly = '"use asm";\n\
     14    function g() {}\n\
     15    return g;\n';
     16 
     17 var funcBody =  'function f0() {\n\
     18    "use asm";\n\
     19    function g() {}\n\
     20    return g;\n\n\
     21 }';
     22 
     23 assertEq(f0.toString(), funcBody);
     24 
     25 var f0 = function() {
     26    "use asm";
     27    function g() {}
     28    return g;
     29 
     30 }
     31 
     32 funcBody1 = funcBody.replace('function f0','function');
     33 assertEq(f0.toString(), funcBody1);
     34 
     35 var g = function g0() {
     36    "use asm";
     37    function g() {}
     38    return g;
     39 
     40 }
     41 
     42 funcBody2 = funcBody.replace('function f0', 'function g0');
     43 assertEq(g.toString(), funcBody2);
     44 
     45 f0 = new Function(bodyOnly);
     46 assertEq(f0.toString(), "function anonymous(\n) {\n" + bodyOnly + "\n}");
     47 
     48 if (isAsmJSCompilationAvailable()) {
     49    var m = new Function(bodyOnly);
     50    assertEq(isAsmJSModule(m), true);
     51    assertEq(m.toString(), "function anonymous(\n) {\n" + bodyOnly + "\n}");
     52 }
     53 
     54 })();
     55 
     56 (function() {
     57 /*
     58 * ONE ARGUMENT
     59 */
     60 function f1(glob) {
     61    "use asm";
     62    function g() {}
     63    return g;
     64 
     65 }
     66 
     67 var bodyOnly = '"use asm";\n\
     68    function g() {}\n\
     69    return g;\n';
     70 
     71 var funcBody =  'function f1(glob) {\n\
     72    "use asm";\n\
     73    function g() {}\n\
     74    return g;\n\n\
     75 }';
     76 
     77 assertEq(f1.toString(), funcBody);
     78 
     79 f1 = function(glob) {
     80    "use asm";
     81    function g() {}
     82    return g;
     83 
     84 }
     85 
     86 funcBody1 = funcBody.replace('function f1', 'function');
     87 assertEq(f1.toString(), funcBody1);
     88 
     89 var g = function g0(glob) {
     90    "use asm";
     91    function g() {}
     92    return g;
     93 
     94 }
     95 
     96 funcBody2 = funcBody.replace('function f1', 'function g0');
     97 assertEq(g.toString(), funcBody2);
     98 
     99 f1 = new Function('glob', bodyOnly);
    100 assertEq(f1.toString(), "function anonymous(glob\n) {\n" + bodyOnly + "\n}");
    101 
    102 if (isAsmJSCompilationAvailable()) {
    103    var m = new Function('glob', bodyOnly);
    104    assertEq(isAsmJSModule(m), true);
    105    assertEq(m.toString(), "function anonymous(glob\n) {\n" + bodyOnly + "\n}");
    106 }
    107 
    108 })();
    109 
    110 
    111 (function() {
    112 /*
    113 * TWO ARGUMENTS
    114 */
    115 function f2(glob, ffi) {
    116    "use asm";
    117    function g() {}
    118    return g;
    119 
    120 }
    121 
    122 var bodyOnly = '"use asm";\n\
    123    function g() {}\n\
    124    return g;\n';
    125 
    126 var funcBody =  'function f2(glob, ffi) {\n\
    127    "use asm";\n\
    128    function g() {}\n\
    129    return g;\n\n\
    130 }';
    131 
    132 assertEq(f2.toString(), funcBody);
    133 
    134 f2 = function(glob, ffi) {
    135    "use asm";
    136    function g() {}
    137    return g;
    138 
    139 }
    140 
    141 funcBody1 = funcBody.replace('function f2', 'function');
    142 assertEq(f2.toString(), funcBody1);
    143 
    144 var g = function g0(glob, ffi) {
    145    "use asm";
    146    function g() {}
    147    return g;
    148 
    149 }
    150 
    151 var funcBody2 = funcBody.replace('function f2', 'function g0');
    152 assertEq(g.toString(), funcBody2);
    153 
    154 f2 = new Function('glob', 'ffi', bodyOnly);
    155 assertEq(f2.toString(), "function anonymous(glob,ffi\n) {\n" + bodyOnly + "\n}");
    156 
    157 if (isAsmJSCompilationAvailable()) {
    158    var m = new Function('glob', 'ffi', bodyOnly);
    159    assertEq(isAsmJSModule(m), true);
    160    assertEq(m.toString(), "function anonymous(glob,ffi\n) {\n" + bodyOnly + "\n}");
    161 }
    162 
    163 })();
    164 
    165 
    166 (function() {
    167 /*
    168 * THREE ARGUMENTS
    169 */
    170 function f3(glob, ffi, heap) {
    171    "use asm";
    172    function g() {}
    173    return g;
    174 
    175 }
    176 
    177 var bodyOnly = '"use asm";\n\
    178    function g() {}\n\
    179    return g;\n';
    180 
    181 var funcBody =  'function f3(glob, ffi, heap) {\n\
    182    "use asm";\n\
    183    function g() {}\n\
    184    return g;\n\n\
    185 }';
    186 
    187 assertEq(f3.toString(), funcBody);
    188 
    189 f3 = function(glob, ffi, heap) {
    190    "use asm";
    191    function g() {}
    192    return g;
    193 
    194 }
    195 
    196 funcBody1 = funcBody.replace('function f3', 'function');
    197 assertEq(f3.toString(), funcBody1);
    198 
    199 var g = function g0(glob, ffi, heap) {
    200    "use asm";
    201    function g() {}
    202    return g;
    203 
    204 }
    205 
    206 funcBody2 = funcBody.replace('function f3', 'function g0');
    207 assertEq(g.toString(), funcBody2);
    208 
    209 f3 = new Function('glob', 'ffi', 'heap', bodyOnly);
    210 assertEq(f3.toString(), "function anonymous(glob,ffi,heap\n) {\n" + bodyOnly + "\n}");
    211 
    212 if (isAsmJSCompilationAvailable()) {
    213    var m = new Function('glob', 'ffi', 'heap', bodyOnly);
    214    assertEq(isAsmJSModule(m), true);
    215    assertEq(m.toString(), "function anonymous(glob,ffi,heap\n) {\n" + bodyOnly + "\n}");
    216 }
    217 
    218 })();
    219 
    220 /* Modules in "use strict" context */
    221 (function() {
    222 
    223 var funcSource =
    224    `function(glob, ffi, heap) {
    225        "use asm";
    226        function g() {}
    227        return g;
    228    }`;
    229 
    230 var f4 = eval("\"use strict\";\n(" + funcSource + ")");
    231 
    232 var expectedToString = funcSource;
    233 
    234 assertEq(f4.toString(), expectedToString);
    235 
    236 if (isAsmJSCompilationAvailable()) {
    237    var f5 = eval("\"use strict\";\n(" + funcSource + ")");
    238    assertEq(isAsmJSModule(f5), true);
    239    assertEq(f5.toString(), expectedToString);
    240 }
    241 })();
    242 
    243 /* Functions */
    244 (function() {
    245 
    246 var noSrc = "function noArgument() {\n\
    247    return 42;\n\
    248 }"
    249 var oneSrc = "function oneArgument(x) {\n\
    250    x = x | 0;\n\
    251    return x + 1 | 0;\n\
    252 }";
    253 var twoSrc = "function twoArguments(x, y) {\n\
    254    x = x | 0;\n\
    255    y = y | 0;\n\
    256    return x + y | 0;\n\
    257 }";
    258 var threeSrc = "function threeArguments(a, b, c) {\n\
    259    a = +a;\n\
    260    b = +b;\n\
    261    c = +c;\n\
    262    return +(+(a * b) + c);\n\
    263 }";
    264 
    265 var funcBody = '\n\
    266    "use asm";\n'
    267    + noSrc + '\n'
    268    + oneSrc + '\n'
    269    + twoSrc + '\n'
    270    + threeSrc + '\n'
    271    + 'return {\n\
    272    no: noArgument,\n\
    273    one: oneArgument,\n\
    274    two: twoArguments,\n\
    275    three: threeArguments\n\
    276    }';
    277 
    278 var g = new Function(funcBody);
    279 var moduleG = g();
    280 
    281 function checkFuncSrc(m) {
    282    assertEq(m.no.toString(), noSrc);
    283 
    284    assertEq(m.one.toString(), oneSrc);
    285 
    286    assertEq(m.two.toString(), twoSrc);
    287 
    288    assertEq(m.three.toString(), threeSrc);
    289 }
    290 checkFuncSrc(moduleG);
    291 
    292 if (isAsmJSCompilationAvailable()) {
    293    var g2 = new Function(funcBody);
    294    assertEq(isAsmJSModule(g2), true);
    295    m = g2();
    296    checkFuncSrc(m);
    297 
    298    var moduleDecl = 'function g3() {' + funcBody + '}';
    299    eval(moduleDecl);
    300    m = g3();
    301    assertEq(isAsmJSModule(g3), true);
    302    checkFuncSrc(m);
    303 
    304    eval('var x = 42;' + moduleDecl);
    305    m = g3();
    306    assertEq(isAsmJSModule(g3), true);
    307    checkFuncSrc(m);
    308 }
    309 
    310 })();
    311 
    312 /* Functions in "use strict" context */
    313 (function () {
    314 
    315 var funcCode = 'function g(x) {\n\
    316    x=x|0;\n\
    317    return x + 1 | 0;}';
    318 var moduleCode = 'function () {\n\
    319    "use asm";\n' + funcCode + '\n\
    320    return g;\n\
    321    }',
    322    useStrict = '"use strict";';
    323 
    324 var f5 = eval(useStrict + ";\n(" + moduleCode + "())");
    325 
    326 var expectedToString = funcCode;
    327 
    328 assertEq(f5.toString(), expectedToString);
    329 
    330 if (isAsmJSCompilationAvailable()) {
    331    var mf5 = eval("\"use strict\";\n(" + moduleCode + ")");
    332    assertEq(isAsmJSModule(mf5), true);
    333    var f5 = mf5();
    334    assertEq(f5.toString(), expectedToString);
    335 }
    336 
    337 })();
    338 
    339 /* Functions in "use strict" context with dynamic linking failure */
    340 (function () {
    341 
    342 var funcCode = 'function g(x) {\n\
    343    x=x|0;\n\
    344    return x + 1 | 0;}';
    345 var moduleCode = 'function (glob) {\n\
    346    "use asm";\n\
    347    var fround = glob.Math.fround;\n\
    348    ' + funcCode + '\n\
    349    return g;\n\
    350    }',
    351    useStrict = '"use strict";';
    352 
    353 var f6 = eval(useStrict + ";\n(" + moduleCode + "({Math:{}}))");
    354 
    355 assertEq(f6.toString(), funcCode);
    356 
    357 if (isAsmJSCompilationAvailable()) {
    358    var mf6 = eval("\"use strict\";\n(" + moduleCode + ")");
    359    assertEq(isAsmJSModule(mf6), true);
    360    var f6 = mf6({Math:{}});
    361    assertEq(f6.toString(), funcCode);
    362 }
    363 
    364 })();
    365 
    366 /* Column number > 0. */
    367 (function() {
    368 
    369 var asmSource = `function evaluate() {
    370    "use asm";
    371    function another() {}
    372    function func() {}
    373    return func
    374 }`
    375 
    376 var m = evaluate(`
    377 var f = x =>(${asmSource});
    378 f()`, {
    379    columnNumber: 100
    380 });
    381 
    382 assertEq(m.toString(), asmSource);
    383 assertEq(m().toString(), `function func() {}`)
    384 
    385 })();