| // Extended API |
| |
| // Makes the internal buffer iterable so we can use Uint8Array.from |
| if (typeof Symbol !== 'undefined' && Symbol.iterator) { |
| Module['BufferWithRandomAccess'].prototype[Symbol.iterator] = function() { |
| var b = this, i = 0, L = b.size(); |
| return { |
| next: function() { |
| if (i < L) { |
| return { done: false, value: b.at(i++) } |
| } else { |
| return { done: true } |
| } |
| } |
| } |
| }; |
| } |
| |
| // Converts (copies) a BufferWithRandomAccess to native ArrayBuffer |
| if (typeof Uint8Array !== 'undefined') { |
| Module['BufferWithRandomAccess'].prototype['toArrayBuffer'] = function() { |
| return Uint8Array['from'](this).buffer; // :ArrayBuffer |
| }; |
| } |
| |
| // Parse and compile S-expression text syntax into WASM code. |
| // When running in NodeJS, this functions returns a Buffer instead of ArrayBuffer. |
| Module['compileWast'] = function compileWast(sourceText /*:string*/) /*:ArrayBuffer*/ { |
| var parser = new Module['SExpressionParser'](sourceText); |
| |
| // console.log('s-expr dump:'); |
| // parser.get_root().dump(); |
| |
| var s_module = parser.get_root().getChild(0); |
| // console.log('s_module', s_module) |
| |
| // strange API for creating WASM `module` from S-expression AST |
| var module = new Module['Module'](); |
| new Module['SExpressionWasmBuilder'](module, s_module); |
| |
| // console.log('module:', module); |
| // this.WasmPrinter.prototype.printModule(module); |
| |
| // emit WASM |
| var debug = false; |
| var buf0 = new Module['BufferWithRandomAccess'](debug); |
| var wasmWriter = new Module['WasmBinaryWriter'](module, buf0, debug); |
| wasmWriter.write(); |
| |
| if (ENVIRONMENT_IS_NODE) { |
| return Buffer['from'](Uint8Array['from'](buf0)); |
| } else { |
| return buf0['toArrayBuffer'](); |
| } |
| }; |
| |