Skip to content

Commit 24bd9e4

Browse files
Make eval_async to be private method, and remove evalAsync restriction
1 parent 46fef5c commit 24bd9e4

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

ext/js/lib/js.rb

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,6 @@ module JS
1616
Undefined = JS.eval("return undefined")
1717
Null = JS.eval("return null")
1818

19-
def self.promise_scheduler
20-
@promise_scheduler
21-
end
22-
23-
def self.eval_async(code, future)
24-
@promise_scheduler ||= PromiseScheduler.new Fiber.current
25-
Fiber.new do
26-
future.resolve JS::Object.wrap(Kernel.eval(code.to_s, nil, "eval_async"))
27-
rescue => e
28-
future.reject JS::Object.wrap(e)
29-
end.transfer
30-
end
31-
3219
class PromiseScheduler
3320
Task = Struct.new(:fiber, :status, :value)
3421

@@ -66,6 +53,21 @@ def enqueue(task)
6653
end
6754
end
6855
end
56+
57+
@promise_scheduler = PromiseScheduler.new Fiber.current
58+
59+
def self.promise_scheduler
60+
@promise_scheduler
61+
end
62+
63+
private
64+
def self.__eval_async_rb(rb_code, future)
65+
Fiber.new do
66+
future.resolve JS::Object.wrap(Kernel.eval(rb_code.to_s, nil, "eval_async"))
67+
rescue => e
68+
future.reject JS::Object.wrap(e)
69+
end.transfer
70+
end
6971
end
7072

7173
class JS::Object
@@ -83,13 +85,9 @@ def respond_to_missing?(sym, include_private)
8385
end
8486

8587
def await
86-
sched = JS.promise_scheduler
87-
unless sched
88-
raise "JS::Object#await can be used only in RubyVM.evalAsync"
89-
end
9088
# Promise.resolve wrap a value or flattens promise-like object and its thenable chain
9189
promise = JS.global[:Promise].resolve(self)
92-
sched.await(promise)
90+
JS.promise_scheduler.await(promise)
9391
end
9492
end
9593

packages/npm-packages/ruby-wasm-wasi/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ export class RubyVM {
229229
const JS = this.eval("require 'js'; JS");
230230
return new Promise((resolve, reject) => {
231231
JS.call(
232-
"eval_async",
232+
"__eval_async_rb",
233233
this.wrap(code),
234234
this.wrap({
235235
resolve,

0 commit comments

Comments
 (0)