diff --git a/src/node_buffer.cc b/src/node_buffer.cc index 5d5a389fb..5682f9379 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -119,6 +119,15 @@ class AsciiSliceExt: public String::ExternalAsciiStringResource { }; #endif +Buffer* Buffer::New(size_t size) { + HandleScope scope; + + Local arg = Integer::NewFromUnsigned(size); + Local b = constructor_template->GetFunction()->NewInstance(1, &arg); + + return ObjectWrap::Unwrap(b); +} + Handle Buffer::New(const Arguments &args) { HandleScope scope; diff --git a/src/node_buffer.h b/src/node_buffer.h index d7c849a7b..dd9d0db51 100644 --- a/src/node_buffer.h +++ b/src/node_buffer.h @@ -30,13 +30,10 @@ struct Blob_; class Buffer : public ObjectWrap { public: - static v8::Persistent constructor_template; - - Buffer(size_t length); - Buffer(Buffer *parent, size_t start, size_t end); ~Buffer(); static void Initialize(v8::Handle target); + static Buffer* New(size_t length); // public constructor static inline bool HasInstance(v8::Handle val) { if (!val->IsObject()) return false; v8::Local obj = val->ToObject(); @@ -47,7 +44,12 @@ class Buffer : public ObjectWrap { size_t length() const { return length_; } struct Blob_* blob() const { return blob_; } - protected: + int AsciiWrite(char *string, int offset, int length); + int Utf8Write(char *string, int offset, int length); + + private: + static v8::Persistent constructor_template; + static v8::Handle New(const v8::Arguments &args); static v8::Handle Slice(const v8::Arguments &args); static v8::Handle BinarySlice(const v8::Arguments &args); @@ -60,10 +62,9 @@ class Buffer : public ObjectWrap { static v8::Handle Unpack(const v8::Arguments &args); static v8::Handle Copy(const v8::Arguments &args); - int AsciiWrite(char *string, int offset, int length); - int Utf8Write(char *string, int offset, int length); + Buffer(size_t length); + Buffer(Buffer *parent, size_t start, size_t end); - private: size_t off_; // offset inside blob_ size_t length_; // length inside blob_ struct Blob_ *blob_; diff --git a/src/node_object_wrap.h b/src/node_object_wrap.h index 7e26f25b0..534567b2e 100644 --- a/src/node_object_wrap.h +++ b/src/node_object_wrap.h @@ -13,7 +13,6 @@ class ObjectWrap { } virtual ~ObjectWrap ( ) { - assert(handle_.IsNearDeath()); handle_->SetInternalField(0, v8::Undefined()); handle_.Dispose(); handle_.Clear();