ext/h8/main.cpp in h8-0.2.2 vs ext/h8/main.cpp in h8-0.2.3
- old
+ new
@@ -27,11 +27,11 @@
}
return Qnil;
}
static void rvalue_free(void* ptr) {
- delete (JsGate*) ptr;
+ delete ((JsGate*) ptr);
}
static void rvalue_mark(void* ptr) {
JsGate *gate = (JsGate*) ptr;
gate->rb_mark_gc();
@@ -124,25 +124,31 @@
H8 *prcxt;
Data_Get_Struct(self, H8, prcxt);
return prcxt;
}
-static VALUE context_eval(VALUE self, VALUE script,VALUE timeout) {
+static VALUE context_eval(VALUE self, VALUE script,VALUE timeout,VALUE script_name_ruby) {
return protect_ruby([&] {
H8* cxt = rc(self);// v8::Locker l(cxt->getIsolate());
H8::Scope s(cxt);
- return cxt->eval_to_ruby(StringValueCStr(script), FIX2INT(timeout));
+ const char* script_name = script_name_ruby != Qnil ? StringValueCStr(script_name_ruby) : NULL;
+ return cxt->eval_to_ruby(StringValueCStr(script), FIX2INT(timeout), script_name);
});
}
static VALUE context_set_var(VALUE self, VALUE name, VALUE value) {
- return protect_ruby([=] {
+ return protect_ruby([&] {
rc(self)->set_var(name, value);
return Qnil;
});
}
+static VALUE context_force_gc(VALUE self) {
+ rc(self)->gc();
+ return Qnil;
+}
+
static void context_free(void* ptr) {
delete (H8*) ptr;
}
static void context_mark(void* ptr) {
@@ -174,12 +180,13 @@
VALUE h8 = rb_define_module("H8");
context_class = rb_define_class_under(h8, "Context", rb_cObject);
ruby_gate_class = rb_define_class_under(h8, "RubyGate", rb_cObject);
rb_define_alloc_func(context_class, context_alloc);
- rb_define_method(context_class, "_eval", (ruby_method) context_eval, 2);
+ rb_define_method(context_class, "_eval", (ruby_method) context_eval, 3);
rb_define_method(context_class, "_set_var", (ruby_method) context_set_var,
2);
+ rb_define_method(context_class, "javascript_gc", (ruby_method) context_force_gc, 0);
value_class = rb_define_class_under(h8, "Value", rb_cObject);
rb_define_alloc_func(value_class, rvalue_alloc);
rb_define_method(value_class, "to_s", (ruby_method) rvalue_to_s, 0);
rb_define_method(value_class, "to_i", (ruby_method) rvalue_to_i, 0);