Sha256: 485c3775f55b4d5535de0563d4296e4c3dfeb25eb0f5d338326d8cf8ebb09176
Contents?: true
Size: 1.11 KB
Versions: 3
Compression:
Stored size: 1.11 KB
Contents
#include "rr.h" namespace rr { VALUE Backref::Storage; ID Backref::_new; ID Backref::object; void Backref::Init() { Storage = rb_eval_string("V8::Weak::Ref"); rb_gc_register_address(&Storage); _new = rb_intern("new"); object = rb_intern("object"); } Backref::Backref(VALUE initial) { allocate(initial); } Backref::~Backref() { deallocate(); } void Backref::allocate(VALUE data) { this->storage = rb_funcall(Storage, _new, 1, data); rb_gc_register_address(&storage); } void Backref::deallocate() { rb_gc_unregister_address(&storage); } VALUE Backref::get() { return rb_funcall(storage, object, 0); } VALUE Backref::set(VALUE data) { deallocate(); allocate(data); return data; } v8::Handle<v8::Value> Backref::toExternal() { v8::Local<v8::Value> wrapper = v8::External::Wrap(this); v8::Persistent<v8::Value>::New(wrapper).MakeWeak(this, &release); return wrapper; } void Backref::release(v8::Persistent<v8::Value> handle, void* data) { handle.Dispose(); Backref* backref = (Backref*)data; delete backref; } }
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
therubyracer-0.11.0beta8-x86_64-linux | ext/v8/backref.cc |
therubyracer-0.11.0beta8-x86-linux | ext/v8/backref.cc |
therubyracer-0.11.0beta8 | ext/v8/backref.cc |