@@ -33,6 +33,7 @@ var outputEl = document.getElementById('output');
3333var jsLogEl = document . getElementById ( 'js_log' ) ;
3434var selectEl = document . getElementById ( 'select' ) ;
3535var downloadEl = document . getElementById ( 'download' ) ;
36+ var runEl = document . getElementById ( 'run' ) ;
3637var downloadLink = document . getElementById ( 'downloadLink' ) ;
3738var buildLogEl = document . getElementById ( 'buildLog' ) ;
3839var base64El = document . getElementById ( 'base64' ) ;
@@ -49,16 +50,6 @@ for (const [f, v] of Object.entries(wabt.FEATURES)) {
4950 } ) ;
5051}
5152
52- var wasmInstance = null ;
53-
54- var wrappedConsole = Object . create ( console ) ;
55-
56- wrappedConsole . log = ( ...args ) => {
57- let line = args . map ( String ) . join ( '' ) + '\n' ;
58- jsLogEl . textContent += line ;
59- console . log ( ...args ) ;
60- }
61-
6253var watEditor = CodeMirror ( ( elt ) => {
6354 document . getElementById ( 'top-left' ) . appendChild ( elt ) ;
6455} , {
@@ -124,17 +115,20 @@ function compile() {
124115 }
125116}
126117
118+ let activeWorker = null ;
127119function run ( ) {
120+ runEl . classList . add ( 'disabled' ) ;
128121 jsLogEl . textContent = '' ;
129122 if ( binaryBuffer === null ) return ;
130- try {
131- let wasm = new WebAssembly . Module ( binaryBuffer ) ;
132- let js = jsEditor . getValue ( ) ;
133- let fn = new Function ( 'wasmModule' , 'console' , js + '//# sourceURL=demo.js' ) ;
134- fn ( wasm , wrappedConsole ) ;
135- } catch ( e ) {
136- jsLogEl . textContent += String ( e ) ;
137- }
123+ const js = jsEditor . getValue ( ) ;
124+ if ( activeWorker != null ) activeWorker . terminate ( ) ;
125+ activeWorker = new Worker ( './worker.js' ) ;
126+ activeWorker . addEventListener ( 'message' , function ( event ) {
127+ if ( event . data . type !== 'log' ) return ;
128+ jsLogEl . textContent += event . data . data ;
129+ } ) ;
130+ activeWorker . postMessage ( { binaryBuffer : binaryBuffer . buffer , js } , [ ] ) ;
131+ runEl . classList . remove ( 'disabled' ) ;
138132}
139133
140134var onWatChange = debounce ( compile , kCompileMinMS ) ;
@@ -152,6 +146,10 @@ function onSelectChanged(e) {
152146 setExample ( this . selectedIndex ) ;
153147}
154148
149+ function onRunClicked ( e ) {
150+ onJsChange ( ) ;
151+ }
152+
155153function onDownloadClicked ( e ) {
156154 // See https://developer.mozilla.com/en-US/docs/Web/API/MouseEvent
157155 var event = new MouseEvent ( 'click' , {
@@ -179,6 +177,7 @@ function onBase64Clicked(e) {
179177watEditor . on ( 'change' , onWatChange ) ;
180178jsEditor . on ( 'change' , onJsChange ) ;
181179selectEl . addEventListener ( 'change' , onSelectChanged ) ;
180+ runEl . addEventListener ( 'click' , onRunClicked ) ;
182181downloadEl . addEventListener ( 'click' , onDownloadClicked ) ;
183182buildLogEl . addEventListener ( 'click' , onBuildLogClicked ) ;
184183base64El . addEventListener ( 'click' , onBase64Clicked ) ;
@@ -191,5 +190,6 @@ for (var i = 0; i < examples.length; ++i) {
191190}
192191selectEl . selectedIndex = 1 ;
193192setExample ( selectEl . selectedIndex ) ;
193+ runEl . classList . remove ( 'disabled' ) ;
194194
195195} ) ;
0 commit comments