@@ -44,11 +44,11 @@ namespace Napi {
44
44
class HandleScope {
45
45
public:
46
46
HandleScope () {
47
- env = napi_get_current_env ();
48
- scope = napi_open_handle_scope (env);
47
+ napi_get_current_env (&env );
48
+ napi_open_handle_scope (env, &scope );
49
49
}
50
50
explicit HandleScope (napi_env e) : env(e) {
51
- scope = napi_open_handle_scope (env);
51
+ napi_open_handle_scope (env, &scope );
52
52
}
53
53
~HandleScope () {
54
54
napi_close_handle_scope (env, scope);
@@ -62,18 +62,20 @@ namespace Napi {
62
62
class EscapableHandleScope {
63
63
public:
64
64
EscapableHandleScope () {
65
- env = napi_get_current_env ();
66
- scope = napi_open_escapable_handle_scope (env);
65
+ napi_get_current_env (&env );
66
+ napi_open_escapable_handle_scope (env, &scope );
67
67
}
68
68
explicit EscapableHandleScope (napi_env e) : env(e) {
69
- scope = napi_open_escapable_handle_scope (e);
69
+ napi_open_escapable_handle_scope (e, &scope );
70
70
}
71
71
~EscapableHandleScope () {
72
72
napi_close_escapable_handle_scope (env, scope);
73
73
}
74
74
75
75
napi_value Escape (napi_value escapee) {
76
- return napi_escape_handle (env, scope, escapee);
76
+ napi_value result;
77
+ napi_escape_handle (env, scope, escapee, &result);
78
+ return result;
77
79
}
78
80
79
81
private:
@@ -86,17 +88,21 @@ namespace Napi {
86
88
inline explicit Utf8String (napi_value from) :
87
89
length_(0 ), str_(str_st_) {
88
90
if (from != NULL ) {
89
- napi_env env = napi_get_current_env ();
90
- napi_value string = napi_coerce_to_string (env, from);
91
+ napi_env env;
92
+ napi_get_current_env (&env);
93
+ napi_value string;
94
+ napi_coerce_to_string (env, from, &string);
91
95
if (string != NULL ) {
92
- size_t len = 3 * napi_get_string_length (env, string) + 1 ;
93
- assert (len <= INT_MAX);
94
- if (len > sizeof (str_st_)) {
95
- str_ = new char [len];
96
+ int len;
97
+ napi_get_string_length (env, string, &len);
98
+ size_t utf8len = 3 * len + 1 ;
99
+ assert (utf8len <= INT_MAX);
100
+ if (utf8len > sizeof (str_st_)) {
101
+ str_ = new char [utf8len];
96
102
assert (str_ != 0 );
97
103
}
98
- length_ = napi_get_string_utf8 (env, string, str_,
99
- static_cast <int >(len) );
104
+ napi_get_string_utf8 (env, string, str_,
105
+ static_cast <int >(utf8len), &length_ );
100
106
str_[length_] = ' \0 ' ;
101
107
}
102
108
}
@@ -131,37 +137,52 @@ namespace Napi {
131
137
class Callback {
132
138
public:
133
139
Callback () {
134
- napi_env env = napi_get_current_env ();
140
+ napi_env env;
141
+ napi_get_current_env (&env);
135
142
HandleScope scope (env);
136
- napi_value obj = napi_create_object (env);
137
- handle = napi_create_persistent (env, obj);
143
+ napi_value obj;
144
+ napi_create_object (env, &obj);
145
+ napi_create_persistent (env, obj, &handle);
138
146
}
139
147
140
148
explicit Callback (napi_value fn) {
141
- napi_env env = napi_get_current_env ();
149
+ napi_env env;
150
+ napi_get_current_env (&env);
142
151
HandleScope scope (env);
143
- napi_value obj = napi_create_object (env);
144
- handle = napi_create_persistent (env, obj);
152
+ napi_value obj;
153
+ napi_create_object (env, &obj);
154
+ napi_create_persistent (env, obj, &handle);
145
155
SetFunction (fn);
146
156
}
147
157
148
158
~Callback () {
149
159
if (handle == NULL ) {
150
160
return ;
151
161
}
152
- napi_release_persistent (napi_get_current_env (), handle);
162
+
163
+ napi_env env;
164
+ napi_get_current_env (&env);
165
+ napi_release_persistent (env, handle);
153
166
}
154
167
155
168
bool operator ==(const Callback &other) const {
156
169
HandleScope scope;
157
- napi_env env = napi_get_current_env ();
158
- napi_value a = napi_get_element (env,
159
- napi_get_persistent_value (env, handle),
160
- kCallbackIndex );
161
- napi_value b = napi_get_element (env,
162
- napi_get_persistent_value (env,
163
- other.handle ), kCallbackIndex );
164
- return napi_strict_equals (env, a, b);
170
+ napi_env env;
171
+ napi_get_current_env (&env);
172
+
173
+ napi_value ha;
174
+ napi_get_persistent_value (env, handle, &ha);
175
+ napi_value hb;
176
+ napi_get_persistent_value (env, other.handle , &hb);
177
+
178
+ napi_value a;
179
+ napi_get_element (env, ha, kCallbackIndex , &a);
180
+ napi_value b;
181
+ napi_get_element (env, hb, kCallbackIndex , &b);
182
+
183
+ bool result;
184
+ napi_strict_equals (env, a, b, &result);
185
+ return result;
165
186
}
166
187
167
188
bool operator !=(const Callback &other) const {
@@ -186,26 +207,35 @@ namespace Napi {
186
207
187
208
inline void SetFunction (napi_value fn) {
188
209
HandleScope scope;
189
- napi_env env = napi_get_current_env ();
190
- napi_set_element (env, napi_get_persistent_value (env, handle),
191
- kCallbackIndex , fn);
210
+ napi_env env;
211
+ napi_get_current_env (&env);
212
+ napi_value h;
213
+ napi_get_persistent_value (env, handle, &h);
214
+ napi_set_element (env, h, kCallbackIndex , fn);
192
215
}
193
216
194
217
inline napi_value GetFunction () const {
195
218
EscapableHandleScope scope;
196
- napi_env env = napi_get_current_env ();
197
- return scope.Escape (
198
- napi_get_element (env, napi_get_persistent_value (env, handle),
199
- kCallbackIndex ));
219
+ napi_env env;
220
+ napi_get_current_env (&env);
221
+ napi_value h;
222
+ napi_get_persistent_value (env, handle, &h);
223
+ napi_value fn;
224
+ napi_get_element (env, h, kCallbackIndex , &fn);
225
+ return scope.Escape (fn);
200
226
}
201
227
202
228
inline bool IsEmpty () const {
203
229
HandleScope scope;
204
- napi_env env = napi_get_current_env ();
205
- napi_value fn =
206
- napi_get_element (env,
207
- napi_get_persistent_value (env, handle), kCallbackIndex );
208
- return napi_undefined == napi_get_type_of_value (env, fn);
230
+ napi_env env;
231
+ napi_get_current_env (&env);
232
+ napi_value h;
233
+ napi_get_persistent_value (env, handle, &h);
234
+ napi_value fn;
235
+ napi_get_element (env, h, kCallbackIndex , &fn);
236
+ napi_valuetype valuetype;
237
+ napi_get_type_of_value (env, fn, &valuetype);
238
+ return napi_undefined == valuetype;
209
239
}
210
240
211
241
inline napi_value
@@ -217,8 +247,11 @@ namespace Napi {
217
247
218
248
inline napi_value
219
249
Call (int argc, napi_value argv[]) const {
220
- napi_env env = napi_get_current_env ();
221
- return Call_ (napi_get_global (env), argc, argv);
250
+ napi_env env;
251
+ napi_get_current_env (&env);
252
+ napi_value global;
253
+ napi_get_global (env, &global);
254
+ return Call_ (global, argc, argv);
222
255
}
223
256
224
257
private:
@@ -230,17 +263,23 @@ namespace Napi {
230
263
int argc,
231
264
napi_value argv[]) const {
232
265
EscapableHandleScope scope;
233
- napi_env env = napi_get_current_env ();
266
+ napi_env env;
267
+ napi_get_current_env (&env);
234
268
235
- napi_value callback =
236
- napi_get_element (env, napi_get_persistent_value (env, handle),
237
- kCallbackIndex );
238
- return scope.Escape (napi_make_callback (
269
+ napi_value h;
270
+ napi_get_persistent_value (env, handle, &h);
271
+ napi_value fn;
272
+ napi_get_element (env, h, kCallbackIndex , &fn);
273
+
274
+ napi_value cb;
275
+ napi_make_callback (
239
276
env,
240
277
target,
241
- callback ,
278
+ fn ,
242
279
argc,
243
- argv));
280
+ argv,
281
+ &cb);
282
+ return scope.Escape (cb);
244
283
}
245
284
};
246
285
@@ -252,18 +291,21 @@ namespace Napi {
252
291
explicit AsyncWorker (Callback *callback_)
253
292
: callback(callback_), errmsg_(NULL ) {
254
293
request = napi_create_async_work ();
255
- napi_env env = napi_get_current_env ();
294
+ napi_env env;
295
+ napi_get_current_env (&env);
256
296
257
297
HandleScope scope;
258
- napi_value obj = napi_create_object (env);
259
- persistentHandle = napi_create_persistent (env, obj);
298
+ napi_value obj;
299
+ napi_create_object (env, &obj);
300
+ napi_create_persistent (env, obj, &persistentHandle);
260
301
}
261
302
262
303
virtual ~AsyncWorker () {
263
304
HandleScope scope;
264
305
265
306
if (persistentHandle != NULL ) {
266
- napi_env env = napi_get_current_env ();
307
+ napi_env env;
308
+ napi_get_current_env (&env);
267
309
napi_release_persistent (env, persistentHandle);
268
310
persistentHandle = NULL ;
269
311
}
@@ -287,52 +329,69 @@ namespace Napi {
287
329
inline void SaveToPersistent (
288
330
const char *key, napi_value value) {
289
331
HandleScope scope;
290
- napi_env env = napi_get_current_env ();
291
- napi_propertyname pnKey = napi_property_name (env, key);
292
- napi_set_property (env, napi_get_persistent_value (env, persistentHandle),
293
- pnKey, value);
332
+ napi_env env;
333
+ napi_get_current_env (&env);
334
+ napi_propertyname pnKey;
335
+ napi_property_name (env, key, &pnKey);
336
+ napi_value h;
337
+ napi_get_persistent_value (env, persistentHandle, &h);
338
+ napi_set_property (env, h, pnKey, value);
294
339
}
295
340
296
341
inline void SaveToPersistent (
297
342
napi_propertyname key, napi_value value) {
298
343
HandleScope scope;
299
- napi_env env = napi_get_current_env ();
300
- napi_set_property (env, napi_get_persistent_value (env, persistentHandle),
301
- key, value);
344
+ napi_env env;
345
+ napi_get_current_env (&env);
346
+ napi_value h;
347
+ napi_get_persistent_value (env, persistentHandle, &h);
348
+ napi_set_property (env, h, key, value);
302
349
}
303
350
304
351
inline void SaveToPersistent (
305
352
uint32_t index, napi_value value) {
306
353
HandleScope scope;
307
- napi_env env = napi_get_current_env ();
308
- napi_set_element (env, napi_get_persistent_value (env, persistentHandle),
309
- index , value);
354
+ napi_env env;
355
+ napi_get_current_env (&env);
356
+ napi_value h;
357
+ napi_get_persistent_value (env, persistentHandle, &h);
358
+ napi_set_element (env, h, index , value);
310
359
}
311
360
312
361
inline napi_value GetFromPersistent (const char *key) const {
313
362
EscapableHandleScope scope;
314
- napi_env env = napi_get_current_env ();
315
- napi_propertyname pnKey = napi_property_name (env, key);
316
- return scope.Escape (
317
- napi_get_property (env,
318
- napi_get_persistent_value (env, persistentHandle), pnKey));
363
+ napi_env env;
364
+ napi_get_current_env (&env);
365
+ napi_propertyname pnKey;
366
+ napi_property_name (env, key, &pnKey);
367
+ napi_value h;
368
+ napi_get_persistent_value (env, persistentHandle, &h);
369
+ napi_value v;
370
+ napi_get_property (env, h, pnKey, &v);
371
+ return scope.Escape (v);
319
372
}
320
373
321
374
inline napi_value
322
375
GetFromPersistent (napi_propertyname key) const {
323
376
EscapableHandleScope scope;
324
- napi_env env = napi_get_current_env ();
325
- return scope.Escape (
326
- napi_get_property (env,
327
- napi_get_persistent_value (env, persistentHandle), key));
377
+ napi_env env;
378
+ napi_get_current_env (&env);
379
+ napi_value h;
380
+ napi_get_persistent_value (env, persistentHandle, &h);
381
+ napi_value v;
382
+ napi_get_property (env, h, key, &v);
383
+ return scope.Escape (v);
328
384
}
329
385
330
386
inline napi_value GetFromPersistent (uint32_t index) const {
331
387
EscapableHandleScope scope;
332
- napi_env env = napi_get_current_env ();
333
- return scope.Escape (
334
- napi_get_element (env,
335
- napi_get_persistent_value (env, persistentHandle), index ));
388
+ napi_env env;
389
+ napi_get_current_env (&env);
390
+ napi_value h;
391
+ napi_get_persistent_value (env, persistentHandle, &h);
392
+ napi_value v;
393
+ napi_get_element (env, h, index , &v);
394
+ return scope.Escape (v);
336
395
}
337
396
338
397
virtual void Execute () = 0;
@@ -368,11 +427,15 @@ namespace Napi {
368
427
369
428
virtual void HandleErrorCallback () {
370
429
HandleScope scope;
371
- napi_env env = napi_get_current_env ();
430
+ napi_env env;
431
+ napi_get_current_env (&env);
432
+
433
+ napi_value s;
434
+ napi_create_string (env, ErrorMessage (), &s);
435
+
436
+ napi_value argv[1 ];
437
+ napi_create_error (env, s, argv);
372
438
373
- napi_value argv[] = {
374
- napi_create_error (env, napi_create_string (env, ErrorMessage ()))
375
- };
376
439
callback->Call (1 , argv);
377
440
}
378
441
0 commit comments