| console.log("SideEffects.None=" + binaryen.SideEffects.None); | |
| console.log("SideEffects.Branches=" + binaryen.SideEffects.Branches); | |
| console.log("SideEffects.Calls=" + binaryen.SideEffects.Calls); | |
| console.log("SideEffects.ReadsLocal=" + binaryen.SideEffects.ReadsLocal); | |
| console.log("SideEffects.WritesLocal=" + binaryen.SideEffects.WritesLocal); | |
| console.log("SideEffects.ReadsGlobal=" + binaryen.SideEffects.ReadsGlobal); | |
| console.log("SideEffects.WritesGlobal=" + binaryen.SideEffects.WritesGlobal); | |
| console.log("SideEffects.ReadsMemory=" + binaryen.SideEffects.ReadsMemory); | |
| console.log("SideEffects.WritesMemory=" + binaryen.SideEffects.WritesMemory); | |
| console.log("SideEffects.ReadsTable=" + binaryen.SideEffects.ReadsTable); | |
| console.log("SideEffects.WritesTable=" + binaryen.SideEffects.WritesTable); | |
| console.log("SideEffects.ImplicitTrap=" + binaryen.SideEffects.ImplicitTrap); | |
| console.log("SideEffects.IsAtomic=" + binaryen.SideEffects.IsAtomic); | |
| console.log("SideEffects.Throws=" + binaryen.SideEffects.Throws); | |
| console.log("SideEffects.DanglingPop=" + binaryen.SideEffects.DanglingPop); | |
| console.log("SideEffects.TrapsNeverHappen=" + binaryen.SideEffects.TrapsNeverHappen); | |
| console.log("SideEffects.Any=" + binaryen.SideEffects.Any); | |
| var module = new binaryen.Module(); | |
| module.setMemory(1, 1, null); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.i32.const(1), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.None | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.br("test"), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.Branches | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.call("test", [], binaryen.i32), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.Calls | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.local.get("test", binaryen.i32), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.ReadsLocal | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.local.set("test", | |
| module.i32.const(1) | |
| ), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.WritesLocal | |
| ); | |
| // Add a global for the test, as computing side effects will look for it. | |
| module.addGlobal('test', binaryen.i32, true, module.i32.const(42)); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.global.get("test", binaryen.i32), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.ReadsGlobal | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.global.set("test", module.i32.const(1)), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.WritesGlobal | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.i32.load(0, 0, | |
| module.i32.const(0) | |
| ), | |
| module | |
| ) | |
| == | |
| (binaryen.SideEffects.ReadsMemory | binaryen.SideEffects.ImplicitTrap) | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.i32.store(0, 0, | |
| module.i32.const(0), | |
| module.i32.const(1) | |
| ), | |
| module | |
| ) | |
| == | |
| (binaryen.SideEffects.WritesMemory | binaryen.SideEffects.ImplicitTrap) | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.i32.div_s( | |
| module.i32.const(1), | |
| module.i32.const(0) | |
| ), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.ImplicitTrap | |
| ); | |
| // If exception handling feature is enabled, calls can throw | |
| module.setFeatures(binaryen.Features.All); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.call("test", [], binaryen.i32), | |
| module | |
| ) | |
| == | |
| (binaryen.SideEffects.Calls | binaryen.SideEffects.Throws) | |
| ); | |
| assert( | |
| binaryen.getSideEffects( | |
| module.drop(module.i32.pop()), | |
| module | |
| ) | |
| == | |
| binaryen.SideEffects.DanglingPop | |
| ); |