Revision: 20394
Author:   [email protected]
Date:     Tue Apr  1 11:30:31 2014 UTC
Log:      Remove internalized cons string types.

Currently, internalizing a cons string could result in either an
in-place converted internalized cons string or a newly created
internalized sequential string, depending on allocation success.

The former could end up being embedded into an IC, which is not
supported.

[email protected]
BUG=357103
LOG=N

Review URL: https://codereview.chromium.org/218993011
http://code.google.com/p/v8/source/detail?r=20394

Added:
 /branches/bleeding_edge/test/mjsunit/regress/regress-357103.js
Modified:
 /branches/bleeding_edge/src/heap.cc
 /branches/bleeding_edge/src/objects.cc
 /branches/bleeding_edge/src/objects.h
 /branches/bleeding_edge/src/types.cc

=======================================
--- /dev/null
+++ /branches/bleeding_edge/test/mjsunit/regress/regress-357103.js Tue Apr 1 11:30:31 2014 UTC
@@ -0,0 +1,14 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+%SetFlags("--gc-interval=1");
+
+var key = "Huckleberry Finn" + "Tom Sawyer";
+var o = {};
+function f() { o[key] = "Adventures"; }
+
+f();
+f();
=======================================
--- /branches/bleeding_edge/src/heap.cc Wed Mar 26 15:14:51 2014 UTC
+++ /branches/bleeding_edge/src/heap.cc Tue Apr  1 11:30:31 2014 UTC
@@ -4964,8 +4964,6 @@
   switch (string->map()->instance_type()) {
     case STRING_TYPE: return internalized_string_map();
     case ASCII_STRING_TYPE: return ascii_internalized_string_map();
-    case CONS_STRING_TYPE: return cons_internalized_string_map();
- case CONS_ASCII_STRING_TYPE: return cons_ascii_internalized_string_map();
     case EXTERNAL_STRING_TYPE: return external_internalized_string_map();
     case EXTERNAL_ASCII_STRING_TYPE:
       return external_ascii_internalized_string_map();
=======================================
--- /branches/bleeding_edge/src/objects.cc      Tue Apr  1 09:20:28 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc      Tue Apr  1 11:30:31 2014 UTC
@@ -13872,9 +13872,6 @@
   }

   MaybeObject* AsObject(Heap* heap) {
- // Attempt to flatten the string, so that internalized strings will most
-    // often be flat strings.
-    string_ = string_->TryFlattenGetString();
     // Internalize the string if possible.
     Map* map = heap->InternalizedStringMapForString(string_);
     if (map != NULL) {
=======================================
--- /branches/bleeding_edge/src/objects.h       Tue Apr  1 09:20:28 2014 UTC
+++ /branches/bleeding_edge/src/objects.h       Tue Apr  1 11:30:31 2014 UTC
@@ -355,8 +355,6 @@
\ V(INTERNALIZED_STRING_TYPE) \ V(ASCII_INTERNALIZED_STRING_TYPE) \ - V(CONS_INTERNALIZED_STRING_TYPE) \ - V(CONS_ASCII_INTERNALIZED_STRING_TYPE) \ V(EXTERNAL_INTERNALIZED_STRING_TYPE) \ V(EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE) \ V(EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE) \
@@ -514,14 +512,6 @@
kVariableSizeSentinel, \ ascii_internalized_string, \ AsciiInternalizedString) \ - V(CONS_INTERNALIZED_STRING_TYPE, \ - ConsString::kSize, \ - cons_internalized_string, \ - ConsInternalizedString) \ - V(CONS_ASCII_INTERNALIZED_STRING_TYPE, \ - ConsString::kSize, \ - cons_ascii_internalized_string, \ - ConsAsciiInternalizedString) \ V(EXTERNAL_INTERNALIZED_STRING_TYPE, \ ExternalTwoByteString::kSize, \ external_internalized_string, \
@@ -662,10 +652,6 @@
       | kInternalizedTag,
   ASCII_INTERNALIZED_STRING_TYPE = kOneByteStringTag | kSeqStringTag
       | kInternalizedTag,
-  CONS_INTERNALIZED_STRING_TYPE = kTwoByteStringTag | kConsStringTag
-      | kInternalizedTag,
-  CONS_ASCII_INTERNALIZED_STRING_TYPE = kOneByteStringTag | kConsStringTag
-      | kInternalizedTag,
EXTERNAL_INTERNALIZED_STRING_TYPE = kTwoByteStringTag | kExternalStringTag
       | kInternalizedTag,
   EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE = kOneByteStringTag
@@ -685,9 +671,9 @@

   STRING_TYPE = INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
   ASCII_STRING_TYPE = ASCII_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
-  CONS_STRING_TYPE = CONS_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
+ CONS_STRING_TYPE = kTwoByteStringTag | kConsStringTag | kNotInternalizedTag,
   CONS_ASCII_STRING_TYPE =
-      CONS_ASCII_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
+      kOneByteStringTag | kConsStringTag | kNotInternalizedTag,

   SLICED_STRING_TYPE =
       kTwoByteStringTag | kSlicedStringTag | kNotInternalizedTag,
=======================================
--- /branches/bleeding_edge/src/types.cc        Tue Apr  1 11:07:09 2014 UTC
+++ /branches/bleeding_edge/src/types.cc        Tue Apr  1 11:30:31 2014 UTC
@@ -169,8 +169,6 @@
     case SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE:
     case INTERNALIZED_STRING_TYPE:
     case ASCII_INTERNALIZED_STRING_TYPE:
-    case CONS_INTERNALIZED_STRING_TYPE:
-    case CONS_ASCII_INTERNALIZED_STRING_TYPE:
     case EXTERNAL_INTERNALIZED_STRING_TYPE:
     case EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE:
     case EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE:

--
--
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.

Reply via email to