Skip to content

Commit 2e6850f

Browse files
committed
allow a symbol for define_functions' first arg
1 parent 5a62204 commit 2e6850f

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

ext/quickjsrb/quickjsrb.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ static JSValue js_quickjsrb_call_global(JSContext *ctx, JSValueConst _this, int
311311
const char *funcName = JS_ToCString(ctx, func_data[0]);
312312

313313
VMData *data = JS_GetContextOpaque(ctx);
314-
VALUE r_proc = rb_hash_aref(data->defined_functions, rb_str_new2(funcName));
314+
VALUE r_proc = rb_hash_aref(data->defined_functions, ID2SYM(rb_intern(funcName)));
315315
// Shouldn't happen
316316
if (r_proc == Qnil)
317317
{
@@ -631,8 +631,11 @@ static VALUE vm_m_defineGlobalFunction(int argc, VALUE *argv, VALUE r_self)
631631
VMData *data;
632632
TypedData_Get_Struct(r_self, VMData, &vm_type, data);
633633

634-
rb_hash_aset(data->defined_functions, r_name, r_block);
635-
char *funcName = StringValueCStr(r_name);
634+
VALUE r_name_sym = rb_funcall(r_name, rb_intern("to_sym"), 0);
635+
636+
rb_hash_aset(data->defined_functions, r_name_sym, r_block);
637+
VALUE r_name_str = rb_funcall(r_name, rb_intern("to_s"), 0);
638+
char *funcName = StringValueCStr(r_name_str);
636639

637640
JSValueConst ruby_data[2];
638641
ruby_data[0] = JS_NewString(data->context, funcName);
@@ -646,7 +649,7 @@ static VALUE vm_m_defineGlobalFunction(int argc, VALUE *argv, VALUE r_self)
646649
JS_FreeValue(data->context, ruby_data[0]);
647650
JS_FreeValue(data->context, ruby_data[1]);
648651

649-
return rb_funcall(r_name, rb_intern("to_sym"), 0);
652+
return r_name_sym;
650653
}
651654

652655
static VALUE vm_m_import(int argc, VALUE *argv, VALUE r_self)

test/quickjs_test.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,11 @@ class GlobalFunction < QuickjsVmTest
330330
end
331331
end
332332

333+
test "function's name can be a symbol" do
334+
@vm.define_function(:sym) { true }
335+
assert(@vm.eval_code('sym()'))
336+
end
337+
333338
[
334339
["'symsym'", :symsym],
335340
["null", nil],

0 commit comments

Comments
 (0)