@@ -75,30 +75,26 @@ namespace node {
7575 class ArrayBuffer {
7676 public:
7777 inline static ArrayBuffer* New (const char *str = 0 ) {
78- #if NODE_MINOR_VERSION >= 11
78+ #if NODE_MINOR_VERSION > 11
7979 return ArrayBuffer::New (v8::Isolate::GetCurrent (), std::string (str));
8080#else
8181 return ArrayBuffer::New (std::string (str));
8282#endif
8383 }
8484
85- inline static ArrayBuffer* New (const char *str, size_t length) {
86- #if NODE_MINOR_VERSION >= 11
87- return ArrayBuffer::New (v8::Isolate::GetCurrent (), str, length);
88- #else
89- return ArrayBuffer::New (str, length);
90- #endif
91- }
92-
9385 inline static ArrayBuffer* New (const std::string &data) {
94- #if NODE_MINOR_VERSION >= 11
86+ #if NODE_MINOR_VERSION > 11
9587 return ArrayBuffer::New (v8::Isolate::GetCurrent (), data.data (), data.size ());
9688#else
9789 return ArrayBuffer::New (data.data (), data.size ());
9890#endif
9991 }
10092
101- #if NODE_MINOR_VERSION >= 11
93+ #if NODE_MINOR_VERSION > 11
94+ inline static ArrayBuffer* New (const char *str, size_t length) {
95+ return ArrayBuffer::New (v8::Isolate::GetCurrent (), str, length);
96+ }
97+
10298 inline static ArrayBuffer* New (const v8::Local<v8::ArrayBuffer> &arrayBuffer) {
10399 return ArrayBuffer::New (v8::Isolate::GetCurrent (), arrayBuffer);
104100 }
@@ -235,8 +231,9 @@ namespace node {
235231 ArrayBuffer *buffer = new ArrayBuffer ();
236232
237233 v8::Local<v8::Object> global = v8::Context::GetCurrent ()->Global ();
238- v8::Local<v8::Object> constructor = v8::Object::Cast (global->Get (v8::String::New (" ArrayBuffer" )));
239- v8::Local<v8::Object> arrayBuffer = constructor->CallAsConstructor ();
234+ v8::Local<v8::Value> instance = global->Get (v8::String::New (" ArrayBuffer" ));
235+ v8::Local<v8::Function> constructor = v8::Local<v8::Function>::Cast (instance);
236+ v8::Local<v8::Object> arrayBuffer = constructor->NewInstance ();
240237
241238 buffer->_data = 0 ;
242239 buffer->_len = length;
@@ -252,8 +249,8 @@ namespace node {
252249 arrayBuffer->SetIndexedPropertiesToExternalArrayData (buffer->_data , v8::kExternalByteArray , buffer->_len );
253250 }
254251
255- buffer->_arrayBuffer . Reset (isolate, arrayBuffer);
256- buffer->_arrayBuffer .SetWeak (buffer, ArrayBuffer::onDispose);
252+ buffer->_arrayBuffer = v8::Persistent<v8::Object>:: New ( arrayBuffer);
253+ buffer->_arrayBuffer .MakeWeak (buffer, ArrayBuffer::onDispose);
257254 buffer->_arrayBuffer .MarkIndependent ();
258255
259256 arrayBuffer->SetHiddenValue (v8::String::New (" node::ArrayBuffer" ), v8::External::New (buffer));
@@ -262,7 +259,7 @@ namespace node {
262259
263260 inline static ArrayBuffer* New (const v8::Local<v8::Object> &arrayBuffer) {
264261 if (!arrayBuffer.IsEmpty ()) {
265- v8::Local<v8::Value> ptr = arrayBuffer->GetHiddenValue (v8::String::NewFromUtf8 (isolate, " node::ArrayBuffer" ));
262+ v8::Local<v8::Value> ptr = arrayBuffer->GetHiddenValue (v8::String::New ( " node::ArrayBuffer" ));
266263
267264 if (!ptr.IsEmpty ()) {
268265 v8::Local<v8::External> ext = v8::Local<v8::External>::Cast (ptr);
@@ -272,7 +269,8 @@ namespace node {
272269 int length = arrayBuffer->GetIndexedPropertiesExternalArrayDataLength ();
273270
274271 if (length > 0 ) {
275- return ArrayBuffer::New (arrayBuffer->GetIndexedPropertiesExternalArrayData (), static_cast <size_t >(length));
272+ char *data = static_cast <char *>(arrayBuffer->GetIndexedPropertiesExternalArrayData ());
273+ return ArrayBuffer::New (data, static_cast <size_t >(length));
276274 }
277275 }
278276 }
@@ -285,19 +283,19 @@ namespace node {
285283 if (!arg.IsEmpty ()) {
286284 if (arg->IsObject ()) {
287285 v8::Local<v8::Object> arrayBuffer = v8::Local<v8::Object>::Cast (arg);
288- return ArrayBuffer::New (isolate, arrayBuffer);
286+ return ArrayBuffer::New (arrayBuffer);
289287 }
290288
291289 if (arg->IsString ()) {
292290 v8::String::Utf8Value str (arg->ToString ());
293- return ArrayBuffer::New (isolate, *str, str.length ());
291+ return ArrayBuffer::New (*str, str.length ());
294292 }
295293 }
296294
297295 return ArrayBuffer::New ();
298296 }
299297
300- inline v8::Local<v8::ArrayBuffer > ToArrayBuffer () const {
298+ inline v8::Local<v8::Object > ToArrayBuffer () const {
301299 v8::HandleScope scope;
302300 v8::Local<v8::Object> arrayBuffer = v8::Local<v8::Object>::New (_arrayBuffer);
303301 return scope.Close (arrayBuffer);
@@ -327,48 +325,59 @@ namespace node {
327325 return _len;
328326 }
329327
328+ #if NODE_MINOR_VERSION > 11
330329 static inline void onDispose (const v8::WeakCallbackData<v8::ArrayBuffer, ArrayBuffer> &info) {
331- #if NODE_MINOR_VERSION >= 11
332330 v8::Isolate *isolate = info.GetIsolate ();
333331 v8::HandleScope scope (isolate);
334- #else
335- v8::HandleScope scope;
336- #endif
337332
338333 ArrayBuffer *wrap = info.GetParameter ();
339334
340335 if (wrap) {
341- #if NODE_MINOR_VERSION >= 11
342336 v8::Local<v8::ArrayBuffer> arrayBuffer = v8::Local<v8::ArrayBuffer>::New (isolate, wrap->_arrayBuffer );
343- #else
344- v8::Local<v8::Object> arrayBuffer = v8::Local<v8::Object>::New (wrap->_arrayBuffer );
345- #endif
346337 wrap->_arrayBuffer .Reset ();
347338
348339 if (!arrayBuffer.IsEmpty ()) {
349- #if NODE_MINOR_VERSION >= 11
350340 arrayBuffer->DeleteHiddenValue (v8::String::NewFromUtf8 (isolate, " node::ArrayBuffer" ));
341+ }
342+
343+ delete wrap;
344+ }
345+ }
351346#else
347+ static inline void onDispose (v8::Persistent<v8::Value> value, void *data) {
348+ v8::HandleScope scope;
349+ ArrayBuffer *wrap = static_cast <ArrayBuffer*>(data);
350+
351+ if (wrap) {
352+ v8::Local<v8::Object> arrayBuffer = v8::Local<v8::Object>::New (wrap->_arrayBuffer );
353+
354+ if (!arrayBuffer.IsEmpty ()) {
352355 arrayBuffer->DeleteHiddenValue (v8::String::New (" node::ArrayBuffer" ));
353- #endif
354356 }
355357
356358 delete wrap;
357359 }
358360 }
361+ #endif
359362
360363 private:
361364 virtual ~ArrayBuffer () {
365+ #if NODE_MINOR_VERSION > 11
362366 if (_len) {
363- delete[] _data;
367+ delete [] _data;
364368 }
369+ #else
370+ _arrayBuffer.ClearWeak ();
371+ _arrayBuffer.Dispose ();
372+ _arrayBuffer.Clear ();
373+ #endif
365374 }
366375
367376 protected:
368377 char * _data;
369378 size_t _len;
370379
371- #if NODE_MINOR_VERSION >= 11
380+ #if NODE_MINOR_VERSION > 11
372381 v8::Persistent<v8::ArrayBuffer> _arrayBuffer;
373382#else
374383 v8::Persistent<v8::Object> _arrayBuffer;
0 commit comments