| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index c93b23c47105f70a630af1cc6cdf3548dde88712..04a6a90a02922c9f9dee90570d498563506f477f 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -780,8 +780,8 @@ static void* DecodeSmiToAligned(i::Object* value, const char* location) {
|
| }
|
|
|
|
|
| -static i::Smi* EncodeAlignedAsSmi(void* value, const char* location) {
|
| - i::Smi* smi = reinterpret_cast<i::Smi*>(value);
|
| +static i::Smi* EncodeAlignedAsSmi(const void* value, const char* location) {
|
| + i::Smi* smi = const_cast<i::Smi*>(reinterpret_cast<const i::Smi*>(value));
|
| ApiCheck(smi->IsSmi(), location, "Pointer is not aligned");
|
| return smi;
|
| }
|
| @@ -5938,6 +5938,10 @@ Local<String> v8::String::NewExternal(
|
| LOG_API(isolate, "String::NewExternal");
|
| ENTER_V8(isolate);
|
| CHECK(resource && resource->data());
|
| + // Resource pointers need to look like Smis since ExternalString objects
|
| + // are sometimes put into old pointer space (see i::String::MakeExternal).
|
| + CHECK(EncodeAlignedAsSmi(resource, "v8::String::NewExternal()"));
|
| + CHECK(EncodeAlignedAsSmi(resource->data(), "v8::String::NewExternal()"));
|
| i::Handle<i::String> result = NewExternalStringHandle(isolate, resource);
|
| isolate->heap()->external_string_table()->AddString(*result);
|
| return Utils::ToLocal(result);
|
| @@ -5959,6 +5963,10 @@ bool v8::String::MakeExternal(v8::String::ExternalStringResource* resource) {
|
| return false;
|
| }
|
| CHECK(resource && resource->data());
|
| + // Resource pointers need to look like Smis since ExternalString objects
|
| + // are sometimes put into old pointer space (see i::String::MakeExternal).
|
| + CHECK(EncodeAlignedAsSmi(resource, "v8::String::MakeExternal()"));
|
| + CHECK(EncodeAlignedAsSmi(resource->data(), "v8::String::MakeExternal()"));
|
| bool result = obj->MakeExternal(resource);
|
| if (result && !obj->IsInternalizedString()) {
|
| isolate->heap()->external_string_table()->AddString(*obj);
|
| @@ -5974,6 +5982,10 @@ Local<String> v8::String::NewExternal(
|
| LOG_API(isolate, "String::NewExternal");
|
| ENTER_V8(isolate);
|
| CHECK(resource && resource->data());
|
| + // Resource pointers need to look like Smis since ExternalString objects
|
| + // are sometimes put into old pointer space (see i::String::MakeExternal).
|
| + CHECK(EncodeAlignedAsSmi(resource, "v8::String::NewExternal()"));
|
| + CHECK(EncodeAlignedAsSmi(resource->data(), "v8::String::NewExternal()"));
|
| i::Handle<i::String> result = NewExternalAsciiStringHandle(isolate, resource);
|
| isolate->heap()->external_string_table()->AddString(*result);
|
| return Utils::ToLocal(result);
|
| @@ -5996,6 +6008,10 @@ bool v8::String::MakeExternal(
|
| return false;
|
| }
|
| CHECK(resource && resource->data());
|
| + // Resource pointers need to look like Smis since ExternalString objects
|
| + // are sometimes put into old pointer space (see i::String::MakeExternal).
|
| + CHECK(EncodeAlignedAsSmi(resource, "v8::String::MakeExternal()"));
|
| + CHECK(EncodeAlignedAsSmi(resource->data(), "v8::String::MakeExternal()"));
|
| bool result = obj->MakeExternal(resource);
|
| if (result && !obj->IsInternalizedString()) {
|
| isolate->heap()->external_string_table()->AddString(*obj);
|
|
|