Sha256: 4089181744b6a501778e3a9a78e4003379e72ae2966c184ddafd0288c233ebe0
Contents?: true
Size: 1.35 KB
Versions: 5
Compression:
Stored size: 1.35 KB
Contents
#include "v8_ref.h" #include "v8_cast.h" #include "v8_external.h" using namespace v8; void gc_v8_object_mark(v8_ref *r) { rb_gc_mark(r->origin); rb_gc_mark(r->references); } void gc_v8_object_free(v8_ref *r) { delete r; } /* * Creates new reference to V8 object for ruby object. * * v8_ref_new(rb_cV8Integer, Integer::New()); * v8_ref_new(rb_cV8String, String::Cast(*value)); * */ VALUE v8_ref_new(VALUE klass, Handle<void> handle, VALUE orig/* = Qnil */) { v8_ref *r = new v8_ref(handle, orig); return Data_Wrap_Struct(klass, gc_v8_object_mark, gc_v8_object_free, r); } /* * Appends additional reference to ruby object wrapped with v8_ref. * */ void v8_ref_set(VALUE obj, const char *name, VALUE ref) { v8_ref *r = 0; Data_Get_Struct(obj, struct v8_ref, r); r->set(name, ref); } /* * Returns original object from which v8 reflection has been created. * */ VALUE v8_ref_orig(VALUE obj) { v8_ref *r = 0; Data_Get_Struct(obj, struct v8_ref, r); return r->origin; } /* The v8_ref struct methods. */ v8_ref::v8_ref(Handle<void> object, VALUE orig/* = Qnil */) { handle = Persistent<void>::New(object); references = rb_hash_new(); origin = orig; } v8_ref::~v8_ref() { handle.Dispose(); } void v8_ref::set(const char *name, VALUE ref) { if (ref != 0 && RTEST(ref)) { rb_hash_aset(references, rb_str_new2(name), ref); } }
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
mustang-0.2.2 | ext/v8/v8_ref.cpp |
mustang-0.2.1 | ext/v8/v8_ref.cpp |
mustang-0.2.0 | ext/v8/v8_ref.cpp |
mustang-0.1.1 | ext/v8/v8_ref.cpp |
mustang-0.1.0 | ext/v8/v8_ref.cpp |