From: Katie Bell Date: Fri, 31 May 2024 07:58:46 +0000 (+1000) Subject: gh-97747: Improvements to WASM browser REPL. (#97665) X-Git-Tag: v3.14.0a1~1688 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=010aaa32fb93c5033a698d7213469af02d76fef3;p=thirdparty%2FPython%2Fcpython.git gh-97747: Improvements to WASM browser REPL. (#97665) Improvements to WASM browser REPL. Adds a text box to write and run code outside the REPL, a stop button, and handling of Ctrl-D for EOF. --- diff --git a/Tools/wasm/python.html b/Tools/wasm/python.html index 17ffa0ea8bfe..81a035a5c4cd 100644 --- a/Tools/wasm/python.html +++ b/Tools/wasm/python.html @@ -35,11 +35,12 @@

Simple REPL for Python WASM

-
+
+ +
+
The simple REPL provides a limited Python experience in the browser. diff --git a/Tools/wasm/python.worker.js b/Tools/wasm/python.worker.js index 1b794608fffe..4ce4e16fc0fa 100644 --- a/Tools/wasm/python.worker.js +++ b/Tools/wasm/python.worker.js @@ -19,18 +19,18 @@ class StdinBuffer { } stdin = () => { - if (this.numberOfCharacters + 1 === this.readIndex) { + while (this.numberOfCharacters + 1 === this.readIndex) { if (!this.sentNull) { // Must return null once to indicate we're done for now. this.sentNull = true return null } this.sentNull = false + // Prompt will reset this.readIndex to 1 this.prompt() } const char = this.buffer[this.readIndex] this.readIndex += 1 - // How do I send an EOF?? return char } } @@ -71,7 +71,11 @@ var Module = { onmessage = (event) => { if (event.data.type === 'run') { - // TODO: Set up files from event.data.files + if (event.data.files) { + for (const [filename, contents] of Object.entries(event.data.files)) { + Module.FS.writeFile(filename, contents) + } + } const ret = callMain(event.data.args) postMessage({ type: 'finished',