@@ -47,10 +47,26 @@ ROBOT_NS_USE_ALL;
4747
4848// //////////////////////////////////////////////////////////////////////////////
4949
50+ #if NODE_MODULE_VERSION >= 46
51+
52+ #define NEW_INSTANCE ( f, argc, argv ) f->NewInstance (v8::Context::New(isolate), argc, argv).ToLocalChecked()
53+
54+ #else
55+
56+ #define NEW_INSTANCE ( f, argc, argv ) f->NewInstance (argc, argv)
57+
58+ #endif
59+
60+ // //////////////////////////////////////////////////////////////////////////////
61+
5062#define NEW_INT ( value ) Integer::New (isolate, value )
5163#define NEW_NUM ( value ) Number ::New (isolate, value )
5264#define NEW_BOOL (value ) Boolean::New (isolate, value )
65+ #if NODE_MODULE_VERSION >= 67
66+ #define NEW_STR ( value ) String ::NewFromUtf8 (isolate, value, v8::NewStringType::kNormal ).ToLocalChecked()
67+ #else
5368#define NEW_STR ( value ) String ::NewFromUtf8 (isolate, value )
69+ #endif
5470#define NEW_OBJ Object ::New (isolate )
5571#define NEW_ARR ( length ) Array ::New (isolate, length)
5672#define NEW_NULL Null (isolate )
@@ -64,32 +80,28 @@ ROBOT_NS_USE_ALL;
6480 _jsArgs[1 ] = NEW_INT (g), \
6581 _jsArgs[2 ] = NEW_INT (b), \
6682 _jsArgs[3 ] = NEW_INT (a), \
67- Local<Function>::New \
68- (isolate, JsColor)->NewInstance (4 , _jsArgs) \
83+ NEW_INSTANCE (Local<Function>::New(isolate, JsColor), 4, _jsArgs) \
6984 )
7085
7186#define NEW_RANGE ( min, max ) \
7287 ( \
7388 _jsArgs[0 ] = NEW_INT (min), \
7489 _jsArgs[1 ] = NEW_INT (max), \
75- Local<Function>::New \
76- (isolate, JsRange)->NewInstance (2 , _jsArgs) \
90+ NEW_INSTANCE (Local<Function>::New(isolate, JsRange), 2, _jsArgs) \
7791 )
7892
7993#define NEW_POINT ( x, y ) \
8094 ( \
8195 _jsArgs[0 ] = NEW_INT (x), \
8296 _jsArgs[1 ] = NEW_INT (y), \
83- Local<Function>::New \
84- (isolate, JsPoint)->NewInstance (2 , _jsArgs) \
97+ NEW_INSTANCE (Local<Function>::New(isolate, JsPoint), 2, _jsArgs) \
8598 )
8699
87100#define NEW_SIZE ( w, h ) \
88101 ( \
89102 _jsArgs[0 ] = NEW_INT (w), \
90103 _jsArgs[1 ] = NEW_INT (h), \
91- Local<Function>::New \
92- (isolate, JsSize)->NewInstance (2 , _jsArgs) \
104+ NEW_INSTANCE (Local<Function>::New(isolate, JsSize), 2, _jsArgs) \
93105 )
94106
95107#define NEW_BOUNDS ( x, y, w, h ) \
@@ -98,14 +110,47 @@ ROBOT_NS_USE_ALL;
98110 _jsArgs[1 ] = NEW_INT (y), \
99111 _jsArgs[2 ] = NEW_INT (w), \
100112 _jsArgs[3 ] = NEW_INT (h), \
101- Local<Function>::New \
102- (isolate, JsBounds)->NewInstance (4 , _jsArgs) \
113+ NEW_INSTANCE (Local<Function>::New(isolate, JsBounds), 4, _jsArgs) \
103114 )
104115
105- #define NEW_MODULE Local<Function>::New (isolate, JsModule )->NewInstance ()
106- #define NEW_SEGMENT Local<Function>::New (isolate, JsSegment)->NewInstance ()
107- #define NEW_STATS Local<Function>::New (isolate, JsStats )->NewInstance ()
108- #define NEW_REGION Local<Function>::New (isolate, JsRegion )->NewInstance ()
116+ #define NEW_MODULE NEW_INSTANCE (Local<Function>::New(isolate, JsModule ), 0, NULL)
117+ #define NEW_SEGMENT NEW_INSTANCE (Local<Function>::New(isolate, JsSegment), 0, NULL)
118+ #define NEW_STATS NEW_INSTANCE (Local<Function>::New(isolate, JsStats ), 0, NULL)
119+ #define NEW_REGION NEW_INSTANCE (Local<Function>::New(isolate, JsRegion ), 0, NULL)
120+
121+ // //////////////////////////////////////////////////////////////////////////////
122+
123+ #if NODE_MODULE_VERSION >= 70
124+ #define BOOLEAN_VALUE ( value ) (value->BooleanValue (isolate))
125+ #define UTF8_VAR ( var, value ) String::Utf8Value var (isolate, value)
126+ #else
127+ #define BOOLEAN_VALUE ( value ) (value->BooleanValue ())
128+ #define UTF8_VAR ( var, value ) String::Utf8Value var (value)
129+ #endif
130+
131+ #if NODE_MODULE_VERSION >= 67
132+ #define TO_OBJECT ( value ) (value->ToObject (isolate->GetCurrentContext ()).ToLocalChecked())
133+ #define NUMBER_VALUE ( value ) (value->NumberValue (isolate->GetCurrentContext ()).ToChecked())
134+ #define INT32_VALUE ( value ) (value->Int32Value (isolate->GetCurrentContext ()).ToChecked())
135+ #define UINT32_VALUE ( value ) (value->Uint32Value (isolate->GetCurrentContext ()).ToChecked())
136+ #define OBJECT_GET ( map, key ) (map->Get (isolate->GetCurrentContext (), key).ToLocalChecked())
137+ #define OBJECT_SET ( map, key, value ) (map->Set (isolate->GetCurrentContext (), key, value).ToChecked())
138+ #define GET_FUNCTION ( tpl ) (tpl->GetFunction (isolate->GetCurrentContext ()).ToLocalChecked())
139+ #else
140+ #define TO_OBJECT ( value ) (value->ToObject ())
141+ #define NUMBER_VALUE ( value ) (value->NumberValue ())
142+ #define INT32_VALUE ( value ) (value->Int32Value ())
143+ #define UINT32_VALUE ( value ) (value->Uint32Value ())
144+ #define OBJECT_GET ( map, key ) (map->Get (key))
145+ #define OBJECT_SET ( map, key, value ) (map->Set (key, value))
146+ #define GET_FUNCTION ( tpl ) (tpl->GetFunction ())
147+ #endif
148+
149+ #if NODE_MODULE_VERSION >= 48
150+ #define GET_PRIVATE ( obj, key ) ((obj->GetPrivate (isolate->GetCurrentContext (), Private::ForApi (isolate, NEW_STR (key)))).ToLocalChecked())
151+ #else
152+ #define GET_PRIVATE ( obj, key ) (obj->GetHiddenValue (NEW_STR (key)))
153+ #endif
109154
110155// //////////////////////////////////////////////////////////////////////////////
111156
@@ -212,7 +257,7 @@ enum RobotType
212257// //////////////////////////////////////////////////////////////////////////////
213258
214259template <class T >
215- inline T* UnwrapRobot (Handle <Value> value)
260+ inline T* UnwrapRobot (Local <Value> value)
216261{
217262 // Get the current isolated V8 instance
218263 Isolate* isolate = Isolate::GetCurrent ();
@@ -221,30 +266,16 @@ inline T* UnwrapRobot (Handle<Value> value)
221266 if (!value->IsObject ()) return nullptr ;
222267
223268 // Retrieve the local object
224- auto obj = value->ToObject ();
225-
226- #if NODE_MODULE_VERSION >= 48
227-
228- auto context = isolate->GetCurrentContext ();
229- auto privateKeyValue = Private::ForApi
230- (isolate, NEW_STR (" _ROBOT_TYPE" ));
231-
232- auto type = obj->GetPrivate (context,
233- privateKeyValue).ToLocalChecked ();
234-
235- #else
269+ auto obj = TO_OBJECT (value);
236270
237271 // Convert and get hidden type
238- auto type = obj->GetHiddenValue
239- (NEW_STR (" _ROBOT_TYPE" ));
240-
241- #endif
272+ auto type = GET_PRIVATE (obj, " _ROBOT_TYPE" );
242273
243274 // The value must contain a handle
244275 if (type.IsEmpty ()) return nullptr ;
245276
246277 // Compare hidden type with class type
247- if (type-> Int32Value ( ) != T::ClassType)
278+ if (INT32_VALUE (type ) != T::ClassType)
248279 return nullptr ;
249280
250281 // Return the final unwrapped class
0 commit comments