@@ -47,10 +47,26 @@ ROBOT_NS_USE_ALL;
47
47
48
48
// //////////////////////////////////////////////////////////////////////////////
49
49
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
+
50
62
#define NEW_INT ( value ) Integer::New (isolate, value )
51
63
#define NEW_NUM ( value ) Number ::New (isolate, value )
52
64
#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
53
68
#define NEW_STR ( value ) String ::NewFromUtf8 (isolate, value )
69
+ #endif
54
70
#define NEW_OBJ Object ::New (isolate )
55
71
#define NEW_ARR ( length ) Array ::New (isolate, length)
56
72
#define NEW_NULL Null (isolate )
@@ -64,32 +80,28 @@ ROBOT_NS_USE_ALL;
64
80
_jsArgs[1 ] = NEW_INT (g), \
65
81
_jsArgs[2 ] = NEW_INT (b), \
66
82
_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) \
69
84
)
70
85
71
86
#define NEW_RANGE ( min, max ) \
72
87
( \
73
88
_jsArgs[0 ] = NEW_INT (min), \
74
89
_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) \
77
91
)
78
92
79
93
#define NEW_POINT ( x, y ) \
80
94
( \
81
95
_jsArgs[0 ] = NEW_INT (x), \
82
96
_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) \
85
98
)
86
99
87
100
#define NEW_SIZE ( w, h ) \
88
101
( \
89
102
_jsArgs[0 ] = NEW_INT (w), \
90
103
_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) \
93
105
)
94
106
95
107
#define NEW_BOUNDS ( x, y, w, h ) \
@@ -98,14 +110,47 @@ ROBOT_NS_USE_ALL;
98
110
_jsArgs[1 ] = NEW_INT (y), \
99
111
_jsArgs[2 ] = NEW_INT (w), \
100
112
_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) \
103
114
)
104
115
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
109
154
110
155
// //////////////////////////////////////////////////////////////////////////////
111
156
@@ -212,7 +257,7 @@ enum RobotType
212
257
// //////////////////////////////////////////////////////////////////////////////
213
258
214
259
template <class T >
215
- inline T* UnwrapRobot (Handle <Value> value)
260
+ inline T* UnwrapRobot (Local <Value> value)
216
261
{
217
262
// Get the current isolated V8 instance
218
263
Isolate* isolate = Isolate::GetCurrent ();
@@ -221,30 +266,16 @@ inline T* UnwrapRobot (Handle<Value> value)
221
266
if (!value->IsObject ()) return nullptr ;
222
267
223
268
// 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);
236
270
237
271
// 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" );
242
273
243
274
// The value must contain a handle
244
275
if (type.IsEmpty ()) return nullptr ;
245
276
246
277
// Compare hidden type with class type
247
- if (type-> Int32Value ( ) != T::ClassType)
278
+ if (INT32_VALUE (type ) != T::ClassType)
248
279
return nullptr ;
249
280
250
281
// Return the final unwrapped class
0 commit comments