#include "rr.h" #include "v8_handle.h" #include "v8_function.h" #include "v8_template.h" #include "v8_external.h" #include "v8_callbacks.h" using namespace v8; namespace { VALUE ObjectTemplateClass; VALUE FunctionTemplateClass; struct v8_callback_data { VALUE handler; VALUE getter; VALUE setter; VALUE query; VALUE deleter; VALUE enumerator; VALUE data; }; void delete_v8_data(Persistent value, void* parameter) { value.Dispose(); delete (v8_callback_data*)parameter; } Local make_v8_data(int argc, VALUE *argv, const char* argf) { VALUE handler; VALUE data; rb_scan_args(argc, argv, argf, &handler, &data); v8_callback_data* v8_data = new v8_callback_data(); v8_data->handler = handler; v8_data->data = data; Local external = External::New((void*)v8_data); Persistent::New(external).MakeWeak((void*)v8_data, delete_v8_data); return external; } Persistent