Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(629)

Side by Side Diff: src/objects.cc

Issue 1775913002: Flatten strings before internalization (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 17069 matching lines...) Expand 10 before | Expand all | Expand 10 after
17080 bool SeqOneByteSubStringKey::IsMatch(Object* string) { 17080 bool SeqOneByteSubStringKey::IsMatch(Object* string) {
17081 Vector<const uint8_t> chars(string_->GetChars() + from_, length_); 17081 Vector<const uint8_t> chars(string_->GetChars() + from_, length_);
17082 return String::cast(string)->IsOneByteEqualTo(chars); 17082 return String::cast(string)->IsOneByteEqualTo(chars);
17083 } 17083 }
17084 17084
17085 17085
17086 // InternalizedStringKey carries a string/internalized-string object as key. 17086 // InternalizedStringKey carries a string/internalized-string object as key.
17087 class InternalizedStringKey : public HashTableKey { 17087 class InternalizedStringKey : public HashTableKey {
17088 public: 17088 public:
17089 explicit InternalizedStringKey(Handle<String> string) 17089 explicit InternalizedStringKey(Handle<String> string)
17090 : string_(string) { } 17090 : string_(String::Flatten(string)) {}
17091 17091
17092 bool IsMatch(Object* string) override { 17092 bool IsMatch(Object* string) override {
17093 return String::cast(string)->Equals(*string_); 17093 return String::cast(string)->Equals(*string_);
17094 } 17094 }
17095 17095
17096 uint32_t Hash() override { return string_->Hash(); } 17096 uint32_t Hash() override { return string_->Hash(); }
17097 17097
17098 uint32_t HashForObject(Object* other) override { 17098 uint32_t HashForObject(Object* other) override {
17099 return String::cast(other)->Hash(); 17099 return String::cast(other)->Hash();
17100 } 17100 }
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
17942 DCHECK(StringShape(*result).IsInternalized()); 17942 DCHECK(StringShape(*result).IsInternalized());
17943 return result; 17943 return result;
17944 } 17944 }
17945 } 17945 }
17946 17946
17947 17947
17948 void StringTable::EnsureCapacityForDeserialization(Isolate* isolate, 17948 void StringTable::EnsureCapacityForDeserialization(Isolate* isolate,
17949 int expected) { 17949 int expected) {
17950 Handle<StringTable> table = isolate->factory()->string_table(); 17950 Handle<StringTable> table = isolate->factory()->string_table();
17951 // We need a key instance for the virtual hash function. 17951 // We need a key instance for the virtual hash function.
17952 InternalizedStringKey dummy_key(Handle<String>::null()); 17952 InternalizedStringKey dummy_key(isolate->factory()->empty_string());
17953 table = StringTable::EnsureCapacity(table, expected, &dummy_key); 17953 table = StringTable::EnsureCapacity(table, expected, &dummy_key);
17954 isolate->heap()->SetRootStringTable(*table); 17954 isolate->heap()->SetRootStringTable(*table);
17955 } 17955 }
17956 17956
17957 17957
17958 Handle<String> StringTable::LookupString(Isolate* isolate, 17958 Handle<String> StringTable::LookupString(Isolate* isolate,
17959 Handle<String> string) { 17959 Handle<String> string) {
17960 InternalizedStringKey key(string); 17960 InternalizedStringKey key(string);
17961 return LookupKey(isolate, &key); 17961 return LookupKey(isolate, &key);
17962 } 17962 }
(...skipping 1865 matching lines...) Expand 10 before | Expand all | Expand 10 after
19828 if (cell->value() != *new_value) { 19828 if (cell->value() != *new_value) {
19829 cell->set_value(*new_value); 19829 cell->set_value(*new_value);
19830 Isolate* isolate = cell->GetIsolate(); 19830 Isolate* isolate = cell->GetIsolate();
19831 cell->dependent_code()->DeoptimizeDependentCodeGroup( 19831 cell->dependent_code()->DeoptimizeDependentCodeGroup(
19832 isolate, DependentCode::kPropertyCellChangedGroup); 19832 isolate, DependentCode::kPropertyCellChangedGroup);
19833 } 19833 }
19834 } 19834 }
19835 19835
19836 } // namespace internal 19836 } // namespace internal
19837 } // namespace v8 19837 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698