Skip to content

Commit 4990a8b

Browse files
committed
fix: upgrade wasi shim and use wasi stdout/stderr
1 parent 97dce9d commit 4990a8b

File tree

4 files changed

+45
-27
lines changed

4 files changed

+45
-27
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"dev": "npm-run-all --parallel watch:*"
1111
},
1212
"dependencies": {
13-
"@bjorn3/browser_wasi_shim": "^0.2.18",
13+
"@bjorn3/browser_wasi_shim": "^0.2.19",
1414
"@ruby/wasm-wasi": "^2.4.1",
1515
"@shoelace-style/shoelace": "^2.13.0",
1616
"monaco-editor": "^0.45.0"

src/app.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ export default class App {
9494
const newSource = this.transpile(this.codeEditor.getValue());
9595
this.previewEditor.setValue(newSource);
9696

97-
const result = this.execute(newSource);
98-
let output = window.$puts.flush();
97+
let { result, output } = this.executeWithOutput(newSource);
9998

10099
if (result) output += "\n\n> " + result;
101100

@@ -233,6 +232,13 @@ export default class App {
233232
}
234233
}
235234

235+
executeWithOutput(source) {
236+
this.vm.$output.flush();
237+
const result = this.execute(source);
238+
const output = this.vm.$output.flush();
239+
return { result, output };
240+
}
241+
236242
async setCurrentVMVersion() {
237243
const versionContainer = document.getElementById("currentVersion");
238244
if (!versionContainer) return;
@@ -286,7 +292,7 @@ export default class App {
286292
}
287293

288294
onSelectEditor(e) {
289-
if (!e.target.value) return;
295+
if (!e.target.value || !e.target.value.match(/Editor$/)) return;
290296

291297
this.showEditor(e.target.value);
292298
}

src/vm.js

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,55 @@
1-
import { DefaultRubyVM } from "@ruby/wasm-wasi/dist/browser";
1+
import { RubyVM } from "@ruby/wasm-wasi";
2+
import { File, WASI, OpenFile, ConsoleStdout } from "@bjorn3/browser_wasi_shim";
3+
24
import ruby from "./ruby.wasm";
35

46
export default async function initVM() {
57
const module = await ruby();
68

79
const output = [];
8-
const originalLog = console.log;
9-
window.$puts = function (val) {
10-
originalLog(val);
10+
output.flush = function () {
11+
return this.splice(0, this.length).join("\n");
12+
};
13+
14+
const setStdout = function (val) {
15+
console.log(val);
1116
output.push(val);
1217
};
1318

14-
const { vm } = await DefaultRubyVM(module);
19+
const setStderr = function (val) {
20+
console.warn(val);
21+
output.push(`[warn] ${val}`);
22+
};
23+
24+
const fds = [
25+
new OpenFile(new File([])),
26+
ConsoleStdout.lineBuffered(setStdout),
27+
ConsoleStdout.lineBuffered(setStderr),
28+
];
29+
const wasi = new WASI([], [], fds, { debug: false });
30+
const vm = new RubyVM();
31+
const imports = {
32+
wasi_snapshot_preview1: wasi.wasiImport,
33+
};
34+
vm.addToImports(imports);
35+
36+
const instance = await WebAssembly.instantiate(module, imports);
37+
await vm.setInstance(instance);
1538

16-
window.$puts.flush = () => output.splice(0, output.length).join("\n");
39+
wasi.initialize(instance);
40+
vm.initialize();
41+
vm.$output = output;
1742

1843
vm.eval(`
1944
require "/bundle/setup"
2045
require "rubygems"
2146
2247
require "js"
2348
24-
module Kernel
25-
def puts(val)
26-
JS.eval("window.$puts('#{val.inspect}')")
27-
nil
28-
end
29-
30-
def p(val)
31-
JS.eval("window.$puts('#{val}')")
32-
nil
33-
end
34-
end
35-
3649
require "ruby-next/language"
3750
require "ruby-next/language/rewriters/edge"
3851
require "ruby-next/language/rewriters/proposed"
3952
40-
4153
module RubyNext
4254
class << self
4355
attr_accessor :custom_rewriters

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
88
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
99

10-
"@bjorn3/browser_wasi_shim@^0.2.18":
11-
version "0.2.18"
12-
resolved "https://registry.yarnpkg.com/@bjorn3/browser_wasi_shim/-/browser_wasi_shim-0.2.18.tgz#7b4274802625b58adb52b1363357af660767b963"
13-
integrity sha512-oTArSGucj3UVfzyfVX1PH0/d94XiZpRu0c0grLTv0RHjlpTqsSeqONE6se/pS03ydKFvs90liMEVD0+ZKG/9SA==
10+
"@bjorn3/browser_wasi_shim@^0.2.19":
11+
version "0.2.19"
12+
resolved "https://registry.yarnpkg.com/@bjorn3/browser_wasi_shim/-/browser_wasi_shim-0.2.19.tgz#24b6dc7417677b641da6f0a24729b6d7766e0c5b"
13+
integrity sha512-Zu5KVxRp7MBwwdOtXSmu14NUwPASNE6zK/BSwWKf0Fsc4g5NOqPYto5C0Nc6EixDb0AEXCoLFDMKP9RN7n2yPQ==
1414

1515
"@ctrl/tinycolor@^4.0.2":
1616
version "4.0.3"

0 commit comments

Comments
 (0)