diff options
Diffstat (limited to 'demo/wasm2wat/demo.js')
-rw-r--r-- | demo/wasm2wat/demo.js | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/demo/wasm2wat/demo.js b/demo/wasm2wat/demo.js new file mode 100644 index 00000000..a1b6b442 --- /dev/null +++ b/demo/wasm2wat/demo.js @@ -0,0 +1,109 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var editorEl = document.querySelector('.editor'); +var uploadEl = document.getElementById('upload'); +var selectEl = document.getElementById('select'); +var uploadInputEl = document.getElementById('uploadInput'); +var generateNamesEl = document.getElementById('generateNames'); +var foldExprsEl = document.getElementById('foldExprs'); +var inlineExportEl = document.getElementById('inlineExport'); +var readDebugNamesEl = document.getElementById('readDebugNames'); + +var options = {mode: 'wast', lineNumbers: true}; +var editor = CodeMirror.fromTextArea(editorEl, options); + +var fileBuffer = null; + +function compile(contents) { + if (!contents) { + return; + } + + var readDebugNames = readDebugNamesEl.checked; + var generateNames = generateNamesEl.checked; + var foldExprs = foldExprsEl.checked; + var inlineExport = inlineExportEl.checked; + + wabt.ready.then(function() { + try { + var module = wabt.readWasm(contents, {readDebugNames: readDebugNames}); + if (generateNames) { + module.generateNames(); + module.applyNames(); + } + var result = + module.toText({foldExprs: foldExprs, inlineExport: inlineExport}); + editor.setValue(result); + } catch (e) { + editor.setValue(e.toString()); + } finally { + if (module) module.destroy(); + } + }); +} + +function onUploadClicked(e) { + uploadInput.value = ''; + // See https://developer.mozilla.com/en-US/docs/Web/API/MouseEvent + var event = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: true, + }); + uploadInput.dispatchEvent(event); +} + +function onUploadedFile(e) { + var file = e.target.files[0]; + var reader = new FileReader(); + reader.onload = function(e) { + fileBuffer = new Uint8Array(e.target.result); + compile(fileBuffer); + }; + reader.readAsArrayBuffer(file); +} + +function recompileIfChanged(el) { + el.addEventListener('change', function() { compile(fileBuffer); }); +} + +function setExample(index) { + var contents = examples[index].contents; + fileBuffer = contents; + compile(contents); +} + +function onSelectChanged(e) { + setExample(this.selectedIndex); +} + +uploadEl.addEventListener('click', onUploadClicked); +uploadInputEl.addEventListener('change', onUploadedFile); +recompileIfChanged(generateNamesEl); +recompileIfChanged(foldExprsEl); +recompileIfChanged(inlineExportEl); +recompileIfChanged(readDebugNamesEl); +selectEl.addEventListener('change', onSelectChanged); + +for (var i = 0; i < examples.length; ++i) { + var example = examples[i]; + var option = document.createElement('option'); + option.textContent = example.name; + selectEl.appendChild(option); +} +selectEl.selectedIndex = 0; +setExample(selectEl.selectedIndex); |