js/src/jit-test/tests/asm.js/testNeuter.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 load(libdir + "asm.js");
     3 function f(stdlib, foreign, buffer) {
     4     "use asm";
     5     var i32 = new stdlib.Int32Array(buffer);
     6     function set(i,j) {
     7         i=i|0;
     8         j=j|0;
     9         i32[i>>2] = j;
    10     }
    11     function get(i) {
    12         i=i|0;
    13         return i32[i>>2]|0
    14     }
    15     return {get:get, set:set}
    16 }
    17 if (isAsmJSCompilationAvailable())
    18     assertEq(isAsmJSModule(f), true);
    20 var i32 = new Int32Array(1024);
    21 var buffer = i32.buffer;
    22 var {get, set} = f(this, null, buffer);
    23 if (isAsmJSCompilationAvailable())
    24     assertEq(isAsmJSFunction(get) && isAsmJSFunction(set), true);
    26 set(4, 42);
    27 assertEq(get(4), 42);
    29 neuter(buffer, "change-data");
    30 neuter(buffer, "same-data");
    32 // These operations may throw internal errors
    33 try {
    34     assertEq(get(4), 0);
    35     set(0, 42);
    36     assertEq(get(0), 0);
    37 } catch (e) {
    38     assertEq(String(e).indexOf("InternalError"), 0);
    39 }
    41 function f2(stdlib, foreign, buffer) {
    42     "use asm";
    43     var i32 = new stdlib.Int32Array(buffer);
    44     var ffi = foreign.ffi;
    45     function inner(i) {
    46         i=i|0;
    47         ffi();
    48         return i32[i>>2]|0
    49     }
    50     return inner
    51 }
    52 if (isAsmJSCompilationAvailable())
    53     assertEq(isAsmJSModule(f2), true);
    55 var i32 = new Int32Array(1024);
    56 var buffer = i32.buffer;
    57 var threw = false;
    58 function ffi() {
    59     try {
    60         neuter(buffer, "same-data");
    61     } catch (e) {
    62         assertEq(String(e).indexOf("InternalError"), 0);
    63         threw = true;
    64     }
    65     try {
    66         neuter(buffer, "change-data");
    67     } catch (e) {
    68         assertEq(String(e).indexOf("InternalError"), 0);
    69         threw = true;
    70     }
    71 }
    72 var inner = f2(this, {ffi:ffi}, buffer);
    73 if (isAsmJSCompilationAvailable())
    74     assertEq(isAsmJSFunction(inner), true);
    75 i32[2] = 13;
    76 var result = inner(8);
    77 if (threw)
    78     assertEq(result, 13);
    79 else
    80     assertEq(result, 0);

mercurial