1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00
therubyracer/ext/v8/isolate.cc

46 lines
1.1 KiB
C++
Raw Normal View History

// -*- mode: c++ -*-
#include "rr.h"
#include "isolate.h"
namespace rr {
void Isolate::Init() {
2015-07-06 00:36:25 -05:00
rb_eval_string("require 'v8/retained_objects'");
ClassBuilder("Isolate").
defineSingletonMethod("New", &New).
defineMethod("Dispose", &Isolate::Dispose).
defineMethod("Equals", &rr::Isolate::PointerEquals).
store(&Class);
}
2015-07-05 19:03:38 -05:00
VALUE Isolate::New(VALUE self) {
2015-07-05 19:03:38 -05:00
Isolate::IsolateData* data = new IsolateData();
2015-07-06 00:36:25 -05:00
VALUE rb_cRetainedObjects = rb_eval_string("V8::RetainedObjects");
data->retained_objects = rb_funcall(rb_cRetainedObjects, rb_intern("new"), 0);
2015-07-05 19:03:38 -05:00
v8::Isolate::CreateParams create_params;
create_params.array_buffer_allocator = &data->array_buffer_allocator;
2015-07-06 00:36:25 -05:00
2015-07-05 19:03:38 -05:00
Isolate isolate(v8::Isolate::New(create_params));
2015-07-06 00:36:25 -05:00
isolate->SetData(0, data);
isolate->AddGCPrologueCallback(&clearReferences);
2015-07-06 00:36:25 -05:00
2015-07-05 19:03:38 -05:00
return isolate;
}
VALUE Isolate::Dispose(VALUE self) {
Isolate isolate(self);
delete isolate.data();
isolate->Dispose();
return Qnil;
}
template <>
void Pointer<v8::Isolate>::unwrap(VALUE value) {
Data_Get_Struct(value, class v8::Isolate, pointer);
}
}