Reviewers: Michael Starzinger,
Description:
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
Please review this at https://codereview.chromium.org/218993011/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+9, -27 lines):
M src/heap.cc
M src/objects.h
M src/objects.cc
M src/types.cc
A + test/mjsunit/regress/regress-357103.js
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index
6374433bbd9e407fe6ebd11a8318b4c8ed5d905d..f06b8be1d98246d3ea9b5f3237b7a96ae211572c
100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -4964,8 +4964,6 @@ Map* Heap::InternalizedStringMapForString(String*
string) {
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();
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
92ec283350fd515c9aa7f46ecb3a41fd79b097b1..8f2b26ec8f2b4f778da644b6f4964072461e57da
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -13872,9 +13872,6 @@ class InternalizedStringKey : public HashTableKey {
}
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) {
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
98bf122a2eef33bd2aaf72214ba18a40b8d73ae5..792d84ebe9e59728d5b2132d3e1b8ceef20011c9
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -355,8 +355,6 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize
- kStubMajorKeyBits;
\
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 @@ const int kStubMinorKeyBits = kBitsPerInt -
kSmiTagSize - kStubMajorKeyBits;
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 @@ enum InstanceType {
| 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 @@ enum InstanceType {
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,
Index: src/types.cc
diff --git a/src/types.cc b/src/types.cc
index
98bb280b6a0cd364e6a33ffb0aef77a6aade37ba..5f3865cab53aea28cdb1e8a9b1a3ee43fa0de1ec
100644
--- a/src/types.cc
+++ b/src/types.cc
@@ -190,8 +190,6 @@ int TypeImpl<Config>::LubBitset(i::Map* map) {
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:
Index: test/mjsunit/regress/regress-357103.js
diff --git a/test/mjsunit/test-hidden-string.js
b/test/mjsunit/regress/regress-357103.js
similarity index 61%
copy from test/mjsunit/test-hidden-string.js
copy to test/mjsunit/regress/regress-357103.js
index
a5d32c839ea38e08abedc2d95542009accdec36c..692729ddb34bd7932e238d74db972b7c81402896
100644
--- a/test/mjsunit/test-hidden-string.js
+++ b/test/mjsunit/regress/regress-357103.js
@@ -4,8 +4,11 @@
// Flags: --allow-natives-syntax
+%SetFlags("--gc-interval=1");
+
+var key = "Huckleberry Finn" + "Tom Sawyer";
var o = {};
-%SetHiddenProperty(o, "test", 1);
-// Create non-internalized ""
-var empty = "a".substring(1, 1);
-assertEquals(undefined, o[empty]);
+function f() { o[key] = "Adventures"; }
+
+f();
+f();
--
--
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.