void CallbackInfo::WeakCallback(Isolate* isolate, Local<Object> object) {
- SPREAD_ARG(object, obj);
- CHECK_EQ(obj_offset, 0);
- CHECK_EQ(obj_c.ByteLength(), obj_length);
-
- obj->Buffer()->Neuter();
+ CHECK(object->IsArrayBuffer());
+ Local<ArrayBuffer> buf = object.As<ArrayBuffer>();
+ ArrayBuffer::Contents obj_c = buf->GetContents();
+ char* const obj_data = static_cast<char*>(obj_c.Data());
+ if (buf->ByteLength() != 0)
+ CHECK_NE(obj_data, nullptr);
+
+ buf->Neuter();
callback_(obj_data, hint_);
int64_t change_in_bytes = -static_cast<int64_t>(sizeof(*this));
isolate->AdjustAmountOfExternalAllocatedMemory(change_in_bytes);
require('../../common');
var assert = require('assert');
var binding = require('./build/Release/binding');
-var buf = binding.alloc();
-var slice = buf.slice(32);
-buf = null;
-binding.check(slice);
+
+function check(size) {
+ var buf = binding.alloc(size);
+ var slice = buf.slice(size >>> 1);
+
+ buf = null;
+ binding.check(slice);
+ slice = null;
+ gc();
+ gc();
+ gc();
+}
+
+check(64);
+
+// Empty ArrayBuffer does not allocate data, worth checking
+check(0);