summaryrefslogtreecommitdiff
path: root/src/string_bytes.cc
diff options
context:
space:
mode:
authorFedor Indutny <fedor.indutny@gmail.com>2014-02-21 17:02:42 +0400
committerFedor Indutny <fedor.indutny@gmail.com>2014-02-22 03:20:56 +0400
commit75adde07f9a2de7f38a67bec72bd377d450bdb52 (patch)
treef93e9faebbe53c44c6806c9d52ae539a95fe58d5 /src/string_bytes.cc
parente746bbdc2b79881b2c991c829b5437340583a064 (diff)
downloadandroid-node-v8-75adde07f9a2de7f38a67bec72bd377d450bdb52.tar.gz
android-node-v8-75adde07f9a2de7f38a67bec72bd377d450bdb52.tar.bz2
android-node-v8-75adde07f9a2de7f38a67bec72bd377d450bdb52.zip
src: remove `node_isolate` from source
fix #6899
Diffstat (limited to 'src/string_bytes.cc')
-rw-r--r--src/string_bytes.cc98
1 files changed, 60 insertions, 38 deletions
diff --git a/src/string_bytes.cc b/src/string_bytes.cc
index 17352995f5..cb8a537c71 100644
--- a/src/string_bytes.cc
+++ b/src/string_bytes.cc
@@ -38,6 +38,7 @@ namespace node {
using v8::Handle;
using v8::HandleScope;
+using v8::Isolate;
using v8::Local;
using v8::String;
using v8::Value;
@@ -46,9 +47,12 @@ using v8::Value;
template <typename ResourceType, typename TypeName>
class ExternString: public ResourceType {
public:
+ explicit ExternString(Isolate* isolate) : isolate_(isolate) {
+ }
+
~ExternString() {
delete[] data_;
- node_isolate->AdjustAmountOfExternalAllocatedMemory(-length_);
+ isolate()->AdjustAmountOfExternalAllocatedMemory(-length_);
}
const TypeName* data() const {
@@ -59,37 +63,46 @@ class ExternString: public ResourceType {
return length_;
}
- static Local<String> NewFromCopy(const TypeName* data, size_t length) {
- HandleScope scope(node_isolate);
+ static Local<String> NewFromCopy(Isolate* isolate,
+ const TypeName* data,
+ size_t length) {
+ HandleScope scope(isolate);
if (length == 0)
- return scope.Close(String::Empty(node_isolate));
+ return scope.Close(String::Empty(isolate));
TypeName* new_data = new TypeName[length];
memcpy(new_data, data, length * sizeof(*new_data));
- return scope.Close(ExternString<ResourceType, TypeName>::New(new_data,
+ return scope.Close(ExternString<ResourceType, TypeName>::New(isolate,
+ new_data,
length));
}
// uses "data" for external resource, and will be free'd on gc
- static Local<String> New(const TypeName* data, size_t length) {
- HandleScope scope(node_isolate);
+ static Local<String> New(Isolate* isolate,
+ const TypeName* data,
+ size_t length) {
+ HandleScope scope(isolate);
if (length == 0)
- return scope.Close(String::Empty(node_isolate));
+ return scope.Close(String::Empty(isolate));
- ExternString* h_str = new ExternString<ResourceType, TypeName>(data,
+ ExternString* h_str = new ExternString<ResourceType, TypeName>(isolate,
+ data,
length);
Local<String> str = String::NewExternal(h_str);
- node_isolate->AdjustAmountOfExternalAllocatedMemory(length);
+ isolate->AdjustAmountOfExternalAllocatedMemory(length);
return scope.Close(str);
}
+ inline Isolate* isolate() const { return isolate_; }
+
private:
- ExternString(const TypeName* data, size_t length)
- : data_(data), length_(length) { }
+ ExternString(Isolate* isolate, const TypeName* data, size_t length)
+ : isolate_(isolate), data_(data), length_(length) { }
+ Isolate* isolate_;
const TypeName* data_;
size_t length_;
};
@@ -244,7 +257,8 @@ size_t hex_decode(char* buf,
}
-bool StringBytes::GetExternalParts(Handle<Value> val,
+bool StringBytes::GetExternalParts(Isolate* isolate,
+ Handle<Value> val,
const char** data,
size_t* len) {
if (Buffer::HasInstance(val)) {
@@ -277,15 +291,16 @@ bool StringBytes::GetExternalParts(Handle<Value> val,
}
-size_t StringBytes::Write(char* buf,
+size_t StringBytes::Write(Isolate* isolate,
+ char* buf,
size_t buflen,
Handle<Value> val,
enum encoding encoding,
int* chars_written) {
- HandleScope scope(node_isolate);
+ HandleScope scope(isolate);
const char* data;
size_t len = 0;
- bool is_extern = GetExternalParts(val, &data, &len);
+ bool is_extern = GetExternalParts(isolate, val, &data, &len);
Local<String> str = val.As<String>();
len = len < buflen ? len : buflen;
@@ -358,7 +373,9 @@ size_t StringBytes::Write(char* buf,
}
-bool StringBytes::IsValidString(Handle<String> string, enum encoding enc) {
+bool StringBytes::IsValidString(Isolate* isolate,
+ Handle<String> string,
+ enum encoding enc) {
if (enc == HEX && string->Length() % 2 != 0)
return false;
// TODO(bnoordhuis) Add BASE64 check?
@@ -369,8 +386,10 @@ bool StringBytes::IsValidString(Handle<String> string, enum encoding enc) {
// Quick and dirty size calculation
// Will always be at least big enough, but may have some extra
// UTF8 can be as much as 3x the size, Base64 can have 1-2 extra bytes
-size_t StringBytes::StorageSize(Handle<Value> val, enum encoding encoding) {
- HandleScope scope(node_isolate);
+size_t StringBytes::StorageSize(Isolate* isolate,
+ Handle<Value> val,
+ enum encoding encoding) {
+ HandleScope scope(isolate);
size_t data_size = 0;
bool is_buffer = Buffer::HasInstance(val);
@@ -416,8 +435,10 @@ size_t StringBytes::StorageSize(Handle<Value> val, enum encoding encoding) {
}
-size_t StringBytes::Size(Handle<Value> val, enum encoding encoding) {
- HandleScope scope(node_isolate);
+size_t StringBytes::Size(Isolate* isolate,
+ Handle<Value> val,
+ enum encoding encoding) {
+ HandleScope scope(isolate);
size_t data_size = 0;
bool is_buffer = Buffer::HasInstance(val);
@@ -425,7 +446,7 @@ size_t StringBytes::Size(Handle<Value> val, enum encoding encoding) {
return Buffer::Length(val);
const char* data;
- if (GetExternalParts(val, &data, &data_size))
+ if (GetExternalParts(isolate, val, &data, &data_size))
return data_size;
Local<String> str = val->ToString();
@@ -651,14 +672,15 @@ static size_t hex_encode(const char* src, size_t slen, char* dst, size_t dlen) {
-Local<Value> StringBytes::Encode(const char* buf,
+Local<Value> StringBytes::Encode(Isolate* isolate,
+ const char* buf,
size_t buflen,
enum encoding encoding) {
- HandleScope scope(node_isolate);
+ HandleScope scope(isolate);
assert(buflen <= Buffer::kMaxLength);
if (!buflen && encoding != BUFFER)
- return scope.Close(String::Empty(node_isolate));
+ return scope.Close(String::Empty(isolate));
Local<String> val;
switch (encoding) {
@@ -670,21 +692,21 @@ Local<Value> StringBytes::Encode(const char* buf,
char* out = new char[buflen];
force_ascii(buf, out, buflen);
if (buflen < EXTERN_APEX) {
- val = OneByteString(node_isolate, out, buflen);
+ val = OneByteString(isolate, out, buflen);
delete[] out;
} else {
- val = ExternOneByteString::New(out, buflen);
+ val = ExternOneByteString::New(isolate, out, buflen);
}
} else {
if (buflen < EXTERN_APEX)
- val = OneByteString(node_isolate, buf, buflen);
+ val = OneByteString(isolate, buf, buflen);
else
- val = ExternOneByteString::NewFromCopy(buf, buflen);
+ val = ExternOneByteString::NewFromCopy(isolate, buf, buflen);
}
break;
case UTF8:
- val = String::NewFromUtf8(node_isolate,
+ val = String::NewFromUtf8(isolate,
buf,
String::kNormalString,
buflen);
@@ -692,9 +714,9 @@ Local<Value> StringBytes::Encode(const char* buf,
case BINARY:
if (buflen < EXTERN_APEX)
- val = OneByteString(node_isolate, buf, buflen);
+ val = OneByteString(isolate, buf, buflen);
else
- val = ExternOneByteString::NewFromCopy(buf, buflen);
+ val = ExternOneByteString::NewFromCopy(isolate, buf, buflen);
break;
case BASE64: {
@@ -705,10 +727,10 @@ Local<Value> StringBytes::Encode(const char* buf,
assert(written == dlen);
if (dlen < EXTERN_APEX) {
- val = OneByteString(node_isolate, dst, dlen);
+ val = OneByteString(isolate, dst, dlen);
delete[] dst;
} else {
- val = ExternOneByteString::New(dst, dlen);
+ val = ExternOneByteString::New(isolate, dst, dlen);
}
break;
}
@@ -716,12 +738,12 @@ Local<Value> StringBytes::Encode(const char* buf,
case UCS2: {
const uint16_t* out = reinterpret_cast<const uint16_t*>(buf);
if (buflen < EXTERN_APEX)
- val = String::NewFromTwoByte(node_isolate,
+ val = String::NewFromTwoByte(isolate,
out,
String::kNormalString,
buflen / 2);
else
- val = ExternTwoByteString::NewFromCopy(out, buflen / 2);
+ val = ExternTwoByteString::NewFromCopy(isolate, out, buflen / 2);
break;
}
@@ -732,10 +754,10 @@ Local<Value> StringBytes::Encode(const char* buf,
assert(written == dlen);
if (dlen < EXTERN_APEX) {
- val = OneByteString(node_isolate, dst, dlen);
+ val = OneByteString(isolate, dst, dlen);
delete[] dst;
} else {
- val = ExternOneByteString::New(dst, dlen);
+ val = ExternOneByteString::New(isolate, dst, dlen);
}
break;
}