Sha256: 731834f0027d6321a819ac42d016003f013f738035ba06e76692ebea4dbc6630

Contents?: true

Size: 811 Bytes

Versions: 17

Compression:

Stored size: 811 Bytes

Contents

#include <v8_ref.h>
#include "stdio.h"
using namespace v8;

v8_ref::v8_ref(Handle<void> object) : handle(Persistent<void>::New(object)) {
  this->references = rb_hash_new();
}

v8_ref::~v8_ref() {  
  handle.Dispose();
}

void v8_ref::set(const char *name, VALUE ref) {
  if (ref != 0 && RTEST(ref)) {
    rb_hash_aset(this->references, rb_str_new2(name), ref);    
  }
}

namespace {
  void gc_mark(v8_ref* ref) {
    rb_gc_mark(ref->references);
  }

  void gc_free(v8_ref* ref) {
    delete ref;
  }
}

VALUE rr_v8_ref_create(VALUE rbclass, v8::Handle<void> handle) {
  return Data_Wrap_Struct(rbclass, gc_mark, gc_free, new v8_ref(handle));
}

void rr_v8_ref_setref(VALUE handle, const char *name, VALUE newref) {
  v8_ref *ref = 0;
  Data_Get_Struct(handle, struct v8_ref, ref);
  ref->set(name, newref);
}

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
therubyracer-0.8.2 ext/v8/v8_ref.cpp
therubyracer-0.8.2.pre2 ext/v8/v8_ref.cpp
therubyracer-0.8.2.pre ext/v8/v8_ref.cpp
therubyracer-0.8.1 ext/v8/v8_ref.cpp
therubyracer-0.8.1.pre2 ext/v8/v8_ref.cpp
therubyracer-heroku-0.8.1.pre3 ext/v8/v8_ref.cpp
therubyracer-heroku-0.8.1.pre2 ext/v8/v8_ref.cpp
therubyracer-0.8.1.pre1 ext/v8/v8_ref.cpp
therubyracer-0.8.0 ext/v8/v8_ref.cpp
therubyracer-0.8.0.pre3 ext/v8/v8_ref.cpp
therubyracer-0.8.0.pre2 ext/v8/v8_ref.cpp
therubyracer-0.8.0.pre ext/v8/v8_ref.cpp
therubyracer-0.7.5 ext/v8/v8_ref.cpp
therubyracer-0.7.4 ext/v8/v8_ref.cpp
therubyracer-0.7.3 ext/v8/v8_ref.cpp
therubyracer-0.7.2 ext/v8/v8_ref.cpp
therubyracer-0.7.2.pre ext/v8/v8_ref.cpp