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. R=mstarzinger@chromium.org BUG=357103 LOG=N Review URL: https://codereview.chromium.org/218993011 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20394 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
681c15eb4e
commit
10abff3498
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -169,8 +169,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:
|
||||
|
14
test/mjsunit/regress/regress-357103.js
Normal file
14
test/mjsunit/regress/regress-357103.js
Normal file
@ -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();
|
Loading…
Reference in New Issue
Block a user