Skip to content
This repository was archived by the owner on Jun 5, 2020. It is now read-only.

Commit 69c2152

Browse files
committed
Update ArrayBuffer.h
1 parent 20227ab commit 69c2152

File tree

1 file changed

+41
-32
lines changed

1 file changed

+41
-32
lines changed

ArrayBuffer.h

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)