summaryrefslogtreecommitdiff
path: root/demo/wasm2wat/demo.js
diff options
context:
space:
mode:
Diffstat (limited to 'demo/wasm2wat/demo.js')
-rw-r--r--demo/wasm2wat/demo.js109
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);