1 /* 2 * Copyright (c) 2012 Joyent, Inc. All rights reserved. 3 */ 4 5 #ifndef _V8PLUS_IMPL_H 6 #define _V8PLUS_IMPL_H 7 8 #include <sys/ccompile.h> 9 #include <stdarg.h> 10 #include <libnvpair.h> 11 #include <v8.h> 12 #include <unordered_map> 13 #include "v8plus_glue.h" 14 15 /* 16 * STOP! 17 * 18 * Do not #include this header in code that consumes v8+. This is a private 19 * implementation header for use by v8+ internal C++ code. It cannot be 20 * included from C code and contains nothing usable by consumers. 21 */ 22 23 #define V8PLUS_THROW(_t, _e, _f, _args...) \ 24 v8::ThrowException(v8plus::exception((_t), (_e), (_f), ## _args)) 25 #define V8PLUS_THROW_DEFAULT() V8PLUS_THROW(NULL, NULL, NULL) 26 #define V8PLUS_THROW_DECORATED(_e) V8PLUS_THROW(NULL, (_e), NULL) 27 28 #if NODE_MINOR_VERSION > 7 || NODE_MAJOR_VERSION > 0 29 #define NODE_MAKECALLBACK_RETURN 30 #endif 31 32 extern "C" boolean_t v8plus_in_event_thread(void); 33 extern "C" void v8plus_crossthread_init(void); 34 35 namespace v8plus { 36 37 class ObjectWrap; 38 39 class ObjectWrap : public node::ObjectWrap { 40 public: 41 static void init(v8::Handle<v8::Object>); 42 static v8::Handle<v8::Value> cons(const v8::Arguments &); 43 static ObjectWrap *objlookup(const void *); 44 v8::Handle<v8::Value> call(const char *, int, v8::Handle<v8::Value>[]); 45 void public_Ref(void); 46 void public_Unref(void); 47 48 private: 49 static v8::Persistent<v8::Function> _constructor; 50 static v8plus_method_descr_t *_mtbl; 51 static v8plus_static_descr_t *_stbl; 52 static std::unordered_map<void *, ObjectWrap *> _objhash; 53 void *_c_impl; 54 55 ObjectWrap() : _c_impl(NULL) {}; 56 ~ObjectWrap(); 57 58 static v8::Handle<v8::Value> _new(const v8::Arguments &); 59 static v8::Handle<v8::Value> _entry(const v8::Arguments &); 60 static v8::Handle<v8::Value> _static_entry(const v8::Arguments &); 61 }; 62 63 extern nvlist_t *v8_Arguments_to_nvlist(const v8::Arguments &); 64 extern v8::Handle<v8::Value> nvpair_to_v8_Value(const nvpair_t *); 65 extern v8::Local<v8::Value> exception(const char *, const nvlist_t *, 66 const char *, ...) __PRINTFLIKE(3); 67 68 }; /* namespace v8plus */ 69 70 #endif /* _V8PLUS_IMPL_H */