Disable externalization of sliced/cons strings in old pointer space.

This is a temporary workaround for the fact that a good deal of the code that triggers access checks, which in turn externalize strings, is not yet handlified and therefore not GC safe.

R=yangguo@chromium.org

Review URL: https://codereview.chromium.org/25146008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17023 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent aa4eaeeb
...@@ -5610,6 +5610,12 @@ bool v8::String::CanMakeExternal() { ...@@ -5610,6 +5610,12 @@ bool v8::String::CanMakeExternal() {
if (!internal::FLAG_clever_optimizations) return false; if (!internal::FLAG_clever_optimizations) return false;
i::Handle<i::String> obj = Utils::OpenHandle(this); i::Handle<i::String> obj = Utils::OpenHandle(this);
i::Isolate* isolate = obj->GetIsolate(); i::Isolate* isolate = obj->GetIsolate();
// TODO(yangguo): Externalizing sliced/cons strings allocates.
// This rule can be removed when all code that can
// trigger an access check is handlified and therefore GC safe.
if (isolate->heap()->old_pointer_space()->Contains(*obj)) return false;
if (isolate->string_tracker()->IsFreshUnusedString(obj)) return false; if (isolate->string_tracker()->IsFreshUnusedString(obj)) return false;
int size = obj->Size(); // Byte size of the original string. int size = obj->Size(); // Byte size of the original string.
if (size < i::ExternalString::kShortSize) return false; if (size < i::ExternalString::kShortSize) return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment