#ifndef THE_RUBY_RACER #define THE_RUBY_RACER #include #include namespace rr { /** * A Reference to a V8 managed object */ template class Ref { public: Ref(VALUE wrapper); virtual operator VALUE(); static Ref create(v8::Handle handle, VALUE klass); inline v8::Handle operator->() const { return holder->handle; } private: class Holder { Holder(v8::Handle handle, VALUE klass); virtual ~Holder(); VALUE value; v8::Persistent handle; friend class Ref; static void enqueue(Holder* holder); }; Ref(Holder* holder); Holder* holder; }; class Context : public Ref { public: inline Context(VALUE value) : Ref(value) {}; static void Init(); }; VALUE defineClass(const char *name, VALUE superclass = rb_cObject); VALUE defineModule(const char *name); } #define RR_DEFINE_METHOD(klass, name, impl, argc) rb_define_method(klass, name, (VALUE(*)(...))impl, argc) #define RR_DEFINE_SINGLETON_METHOD(object, name, impl, argc) rb_define_singleton_method(object, name, (VALUE(*)(...))impl, argc) #endif