| var tempNum; | |
| function tempFunc() { | |
| } | |
| function rootedFunc1() { | |
| } | |
| Module['rootedFunc1'] = rootedFunc1; | |
| function rootedFunc2() { | |
| } | |
| var use = rootedFunc2(); | |
| function user() { | |
| used(); | |
| } | |
| function used() { | |
| } | |
| function useExportA() { | |
| expD7(); | |
| } | |
| function useExportB() { | |
| Module['expD7'](); | |
| } | |
| function useManySorted() { | |
| Module['expD9'](); | |
| expD8(); | |
| expD7(); | |
| Module['expD7'](); | |
| } | |
| var wasmImports = { | |
| 'tempNum': tempNum, | |
| 'tempFunc': tempFunc, | |
| 'rootedFunc1': rootedFunc1, | |
| 'rootedFunc2': rootedFunc2, | |
| 'user': user, | |
| 'used': used, | |
| 'useExportA': useExportA, | |
| 'useExportB': useExportB, | |
| 'useManySorted': useManySorted, | |
| }; | |
| // exports gotten directly | |
| var expD1 = Module['expD1'] = wasmExports['expD1']; | |
| var expD2 = Module['expD2'] = wasmExports['expD2']; | |
| var expD3 = Module['expD3'] = wasmExports['expD3']; | |
| var expD4 = Module['expD4'] = wasmExports['expD4']; | |
| // Same as above but not export on the Module | |
| var expD5 = wasmExports['expD5']; | |
| var expD6 = wasmExports['expD6']; | |
| var expD7 = wasmExports['expD7']; | |
| var expD8 = wasmExports['expD8']; | |
| var expD9 = wasmExports['expD9']; | |
| function applySignatureConversions() { | |
| // Wrapping functions should not constitute a usage | |
| wasmExports['expD6'] = foo(wasmExports['expD6']); | |
| } | |
| // add uses for some of them | |
| expD1; | |
| Module['expD2']; | |
| wasmExports['expD3']; | |
| // deep uses, that we can't scan | |
| function usedFromDeep() { | |
| } | |
| var Something = { | |
| property: function() { | |
| usedFromDeep(); | |
| }, | |
| }; | |
| function usedFromDeep2() { | |
| } | |
| var func = function() { | |
| usedFromDeep2(); | |
| }; | |
| // dyncalls | |
| var dynCall_v = Module["dynCall_v"] = () => wasmExports["dynCall_v"](); | |
| var dynCall_vi = Module["dynCall_vi"] = () => wasmExports["dynCall_vi"](); | |
| var dynCall_vii = Module["dynCall_vii"] = () => wasmExports["dynCall_vii"](); | |
| var dynCall_viii = Module["dynCall_viii"] = () => wasmExports["dynCall_viii"](); | |
| dynCall_v(ptr); // use directly | |
| Module['dynCall_vi'](ptr, 1); // use on module | |
| dynCall('vii', ptr, [2, 3]); // use indirectly, depending on analysis of dynCall(string, ) | |
| // and viii is never used, so definitely legitimately eliminatable | |
| // Don't crash on this code pattern, which regressed in #10724 | |
| (function(output) { | |
| x++; | |
| }); | |
| // Don't crash on this code pattern, which we should ignore. | |
| var _bad = function() { | |
| return something(); | |
| }; |