Skip to content

Commit 56d9997

Browse files
committed
consolidate flags to use Ruby-made setTimeout
1 parent 82dd7bd commit 56d9997

File tree

5 files changed

+11
-28
lines changed

5 files changed

+11
-28
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ vm = Quickjs.eval_code(features: [::Quickjs::MODULE_STD])
5858
# Enable `os` module by quickjs: https://bellard.org/quickjs/quickjs.html#os-module
5959
vm = Quickjs.eval_code(features: [::Quickjs::MODULE_OS])
6060

61-
# Expose `os.setTimouet` and `os.clearTimeout` from `os` module
62-
vm = Quickjs.eval_code(features: [::Quickjs::FEATURES_TIMEOUT])
61+
# Provide `setTimeout` managed by CRuby
62+
vm = Quickjs.eval_code(features: [::Quickjs::FEATURE_TIMEOUT])
6363

6464
# Inject the polyfill of Intl
6565
vm = Quickjs.eval_code(features: [::Quickjs::POLYFILL_INTL])
@@ -98,8 +98,8 @@ vm = Quickjs::VM.new(features: [::Quickjs::MODULE_STD])
9898
# Enable `os` module by quickjs: https://bellard.org/quickjs/quickjs.html#os-module
9999
vm = Quickjs::VM.new(features: [::Quickjs::MODULE_OS])
100100

101-
# Expose `os.setTimouet` and `os.clearTimeout` from `os` module
102-
vm = Quickjs::VM.new(features: [::Quickjs::FEATURES_TIMEOUT])
101+
# Provide `setTimeout` managed by CRuby
102+
vm = Quickjs::VM.new(features: [::Quickjs::FEATURE_TIMEOUT])
103103

104104
# Inject the polyfill of Intl
105105
vm = Quickjs::VM.new(features: [::Quickjs::POLYFILL_INTL])

ext/quickjsrb/quickjsrb.c

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -542,22 +542,7 @@ static VALUE vm_m_initialize(int argc, VALUE *argv, VALUE r_self)
542542
JSValue j_osEval = JS_Eval(data->context, enableOs, strlen(enableOs), "<vm>", JS_EVAL_TYPE_MODULE);
543543
JS_FreeValue(data->context, j_osEval);
544544
}
545-
else if (RTEST(rb_funcall(r_features, rb_intern("include?"), 1, QUICKJSRB_SYM(featureOsTimeoutId))))
546-
{
547-
char *filename = random_string();
548-
js_init_module_os(data->context, filename); // Better if this is limited just only for setTimeout and clearTimeout
549-
const char *enableTimeoutTemplate = "import * as _os from '%s';\n"
550-
"globalThis.setTimeout = _os.setTimeout;\n"
551-
"globalThis.clearTimeout = _os.clearTimeout;\n";
552-
int length = snprintf(NULL, 0, enableTimeoutTemplate, filename);
553-
char *enableTimeout = (char *)malloc(length + 1);
554-
snprintf(enableTimeout, length + 1, enableTimeoutTemplate, filename);
555-
556-
JSValue j_timeoutEval = JS_Eval(data->context, enableTimeout, strlen(enableTimeout), "<vm>", JS_EVAL_TYPE_MODULE);
557-
free(enableTimeout);
558-
JS_FreeValue(data->context, j_timeoutEval);
559-
}
560-
else if (RTEST(rb_funcall(r_features, rb_intern("include?"), 1, QUICKJSRB_SYM(featureOsTimeoutBetaId))))
545+
else if (RTEST(rb_funcall(r_features, rb_intern("include?"), 1, QUICKJSRB_SYM(featureTimeoutId))))
561546
{
562547
JS_SetPropertyStr(
563548
data->context, j_global, "setTimeout",

ext/quickjsrb/quickjsrb.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ extern const uint8_t qjsc_polyfill_intl_en_min;
1717

1818
const char *featureStdId = "feature_std";
1919
const char *featureOsId = "feature_os";
20-
const char *featureOsTimeoutId = "feature_os_timeout";
21-
const char *featureOsTimeoutBetaId = "feature_os_timeout_beta";
20+
const char *featureTimeoutId = "feature_timeout";
2221
const char *featurePolyfillIntlId = "feature_polyfill_intl";
2322

2423
const char *undefinedId = "undefined";
@@ -137,8 +136,7 @@ static void r_define_constants(VALUE r_parent_class)
137136
{
138137
rb_define_const(r_parent_class, "MODULE_STD", QUICKJSRB_SYM(featureStdId));
139138
rb_define_const(r_parent_class, "MODULE_OS", QUICKJSRB_SYM(featureOsId));
140-
rb_define_const(r_parent_class, "FEATURES_TIMEOUT", QUICKJSRB_SYM(featureOsTimeoutId));
141-
rb_define_const(r_parent_class, "FEATURES_TIMEOUT_BETA", QUICKJSRB_SYM(featureOsTimeoutBetaId));
139+
rb_define_const(r_parent_class, "FEATURE_TIMEOUT", QUICKJSRB_SYM(featureTimeoutId));
142140
rb_define_const(r_parent_class, "POLYFILL_INTL", QUICKJSRB_SYM(featurePolyfillIntlId));
143141

144142
VALUE rb_cQuickjsValue = rb_define_class_under(r_parent_class, "Value", rb_cObject);

test/blocking_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class ProcessBlocking < QuickjsBlockingTest
8282

8383
class RubyBasedTimeout < QuickjsBlockingTest
8484
setup do
85-
@vm = Quickjs::VM.new(timeout_msec: 500, features: [::Quickjs::FEATURES_TIMEOUT_BETA])
85+
@vm = Quickjs::VM.new(timeout_msec: 500, features: [::Quickjs::FEATURE_TIMEOUT])
8686
end
8787
teardown { @vm = nil }
8888

test/quickjs_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,10 @@ class Exceptions < QuickjsTest
146146
assert_equal(::Quickjs.eval_code("!!os.kill", { features: [::Quickjs::MODULE_OS] }), true)
147147
end
148148

149-
test "js timeout funcs can be injected" do
149+
test "only setTimeout is provided per the flag" do
150150
assert_code("typeof setTimeout === 'undefined'", true)
151-
assert_code("typeof clearTimeout === 'undefined'", true)
152-
assert_equal(::Quickjs.eval_code("!!setTimeout && !!clearTimeout", { features: [::Quickjs::FEATURES_TIMEOUT] }), true)
151+
# assert_code("typeof clearTimeout === 'undefined'", true)
152+
assert_equal(::Quickjs.eval_code("typeof setTimeout", { features: [::Quickjs::FEATURE_TIMEOUT] }), 'function')
153153
end
154154

155155
class QuickjsPolyfillIntlTest < Test::Unit::TestCase

0 commit comments

Comments
 (0)