Wed, 31 Dec 2014 06:09:35 +0100
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);