Sha256: 286da6382b4bfa84b16345299d8b34d54c808b3144a6e0ccf15a8fc7e4f0d849

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

#include "v8_ref.h"
#include "v8_cast.h"
#include "v8_value.h"
#include "v8_external.h"
#include "v8_macros.h"

using namespace v8;

VALUE rb_cV8External;
UNWRAPPER(External);

/* Typecasting helpers */

Handle<Value> to_v8_external(VALUE value)
{
  return External::New((void*)value);
}

/* V8::External methods */

/*
 * call-seq:
 *   V8::External.new(obj)   => new_external_obj
 *   V8::External.wrap(obj)  => new_external_obj
 *
 * Wraps given object as new v8 external.
 *
 */
static VALUE rb_v8_external_new(VALUE klass, VALUE obj)
{
  HandleScope scope;
  PREVENT_CREATION_WITHOUT_CONTEXT();
  return v8_ref_new(klass, to_v8_external(obj));
}
  
/*
 * call-seq:
 *   ext.value   => native_obj
 *   ext.to_obj  => native_obj
 *   ext.unwrap  => native_obj
 *
 * Returns original value of wraped external. 
 *
 */
static VALUE rb_v8_external_value(VALUE self)
{
  HandleScope scope;
  return (VALUE)unwrap(self)->Value();
}

/* Public constructors */

VALUE rb_v8_external_new2(VALUE data)
{
  return rb_v8_external_new(rb_cV8External, data);
}


/* V8::External initializer. */
void Init_V8_External()
{
  rb_cV8External = rb_define_class_under(rb_mV8, "External", rb_cV8Value);
  rb_define_singleton_method(rb_cV8External, "new", RUBY_METHOD_FUNC(rb_v8_external_new), 1);
  rb_define_singleton_method(rb_cV8External, "wrap", RUBY_METHOD_FUNC(rb_v8_external_new), 1);
  rb_define_method(rb_cV8External, "value", RUBY_METHOD_FUNC(rb_v8_external_value), 0);
  rb_define_method(rb_cV8External, "to_obj", RUBY_METHOD_FUNC(rb_v8_external_value), 0);
}

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mustang-0.2.2 ext/v8/v8_external.cpp
mustang-0.2.1 ext/v8/v8_external.cpp
mustang-0.2.0 ext/v8/v8_external.cpp