2009-12-07 09:20:16 +02:00
|
|
|
#include <v8_ref.h>
|
|
|
|
#include "stdio.h"
|
|
|
|
using namespace v8;
|
|
|
|
|
2009-12-07 09:44:18 +02:00
|
|
|
|
2009-12-11 19:11:05 +02:00
|
|
|
v8_ref::v8_ref(Handle<void> object, VALUE ref) : handle(Persistent<void>::New(object)), references(ref) {
|
2010-01-10 00:13:03 +02:00
|
|
|
|
2009-12-07 09:20:16 +02:00
|
|
|
}
|
|
|
|
|
2009-12-07 16:06:06 +02:00
|
|
|
v8_ref::~v8_ref() {
|
2009-12-07 16:36:40 +02:00
|
|
|
handle.Dispose();
|
2009-12-07 09:20:16 +02:00
|
|
|
}
|
|
|
|
|
2009-12-07 16:06:06 +02:00
|
|
|
void v8_ref_mark(v8_ref* ref) {
|
2009-12-11 19:11:05 +02:00
|
|
|
if (ref->references != 0) {
|
|
|
|
rb_gc_mark(ref->references);
|
|
|
|
}
|
2009-12-07 09:20:16 +02:00
|
|
|
}
|
|
|
|
|
2009-12-07 16:06:06 +02:00
|
|
|
void v8_ref_free(v8_ref* ref) {
|
2009-12-07 09:20:16 +02:00
|
|
|
delete ref;
|
|
|
|
}
|
|
|
|
|
2009-12-13 17:08:55 +02:00
|
|
|
VALUE V8_Ref_Create(VALUE ruby_class, v8::Handle<void> handle, VALUE ref) {
|
|
|
|
return Data_Wrap_Struct(ruby_class, v8_ref_mark, v8_ref_free, new v8_ref(handle, ref));
|
|
|
|
}
|