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);