Revision: 19755
Author: [email protected]
Date: Mon Mar 10 12:08:17 2014 UTC
Log: Fix assertion failure caused by external strings.
This fixes two issues:
- Update externalize-string-extension to the behavior of the API (see
r18285)
- Convert cons strings in old pointer space to short external strings as
expected by Heap::AllowedToBeMigrated, regardless of alignment.
[email protected]
Review URL: https://codereview.chromium.org/189663011
http://code.google.com/p/v8/source/detail?r=19755
Modified:
/branches/bleeding_edge/src/extensions/externalize-string-extension.cc
/branches/bleeding_edge/src/objects.cc
=======================================
--- /branches/bleeding_edge/src/extensions/externalize-string-extension.cc
Fri Jan 17 10:52:00 2014 UTC
+++ /branches/bleeding_edge/src/extensions/externalize-string-extension.cc
Mon Mar 10 12:08:17 2014 UTC
@@ -107,7 +107,7 @@
SimpleAsciiStringResource* resource = new SimpleAsciiStringResource(
reinterpret_cast<char*>(data), string->length());
result = string->MakeExternal(resource);
- if (result && !string->IsInternalizedString()) {
+ if (result) {
i::Isolate* isolate =
reinterpret_cast<i::Isolate*>(args.GetIsolate());
isolate->heap()->external_string_table()->AddString(*string);
}
@@ -118,7 +118,7 @@
SimpleTwoByteStringResource* resource = new
SimpleTwoByteStringResource(
data, string->length());
result = string->MakeExternal(resource);
- if (result && !string->IsInternalizedString()) {
+ if (result) {
i::Isolate* isolate =
reinterpret_cast<i::Isolate*>(args.GetIsolate());
isolate->heap()->external_string_table()->AddString(*string);
}
=======================================
--- /branches/bleeding_edge/src/objects.cc Mon Mar 10 08:28:59 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Mon Mar 10 12:08:17 2014 UTC
@@ -1280,14 +1280,13 @@
// - the space the existing string occupies is too small for a regular
// external string.
// - the existing string is in old pointer space and the backing store of
- // the external string is not aligned. The GC cannot deal with fields
- // containing an unaligned address that points to outside of V8's heap.
+ // the external string is not aligned. The GC cannot deal with a field
+ // containing a possibly unaligned address to outside of V8's heap.
// In either case we resort to a short external string instead, omitting
// the field caching the address of the backing store. When we encounter
// short external strings in generated code, we need to bailout to
runtime.
if (size < ExternalString::kSize ||
- (!IsAligned(reinterpret_cast<intptr_t>(resource->data()),
kPointerSize) &&
- heap->old_pointer_space()->Contains(this))) {
+ heap->old_pointer_space()->Contains(this)) {
this->set_map_no_write_barrier(
is_internalized
? (is_ascii
@@ -1351,14 +1350,13 @@
// - the space the existing string occupies is too small for a regular
// external string.
// - the existing string is in old pointer space and the backing store of
- // the external string is not aligned. The GC cannot deal with fields
- // containing an unaligned address that points to outside of V8's heap.
+ // the external string is not aligned. The GC cannot deal with a field
+ // containing a possibly unaligned address to outside of V8's heap.
// In either case we resort to a short external string instead, omitting
// the field caching the address of the backing store. When we encounter
// short external strings in generated code, we need to bailout to
runtime.
if (size < ExternalString::kSize ||
- (!IsAligned(reinterpret_cast<intptr_t>(resource->data()),
kPointerSize) &&
- heap->old_pointer_space()->Contains(this))) {
+ heap->old_pointer_space()->Contains(this)) {
this->set_map_no_write_barrier(
is_internalized ?
heap->short_external_ascii_internalized_string_map()
: heap->short_external_ascii_string_map());
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.