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

Side by Side Diff: src/objects.cc

Issue 394793002: Verify that source string matches serialized code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 9314 matching lines...) Expand 10 before | Expand all | Expand 10 after
9325 if (content.IsTwoByte()) { 9325 if (content.IsTwoByte()) {
9326 return CompareChars(content.ToUC16Vector().start(), str.start(), slen) == 0; 9326 return CompareChars(content.ToUC16Vector().start(), str.start(), slen) == 0;
9327 } 9327 }
9328 for (int i = 0; i < slen; i++) { 9328 for (int i = 0; i < slen; i++) {
9329 if (Get(i) != str[i]) return false; 9329 if (Get(i) != str[i]) return false;
9330 } 9330 }
9331 return true; 9331 return true;
9332 } 9332 }
9333 9333
9334 9334
9335 class IteratingStringHasher: public StringHasher {
9336 public:
9337 static inline uint32_t Hash(String* string, uint32_t seed) {
9338 IteratingStringHasher hasher(string->length(), seed);
9339 // Nothing to do.
9340 if (hasher.has_trivial_hash()) return hasher.GetHashField();
9341 ConsString* cons_string = String::VisitFlat(&hasher, string);
9342 // The string was flat.
9343 if (cons_string == NULL) return hasher.GetHashField();
9344 // This is a ConsString, iterate across it.
9345 ConsStringIteratorOp op(cons_string);
9346 int offset;
9347 while (NULL != (string = op.Next(&offset))) {
9348 String::VisitFlat(&hasher, string, offset);
9349 }
9350 return hasher.GetHashField();
9351 }
9352 inline void VisitOneByteString(const uint8_t* chars, int length) {
9353 AddCharacters(chars, length);
9354 }
9355 inline void VisitTwoByteString(const uint16_t* chars, int length) {
9356 AddCharacters(chars, length);
9357 }
9358
9359 private:
9360 inline IteratingStringHasher(int len, uint32_t seed)
9361 : StringHasher(len, seed) {
9362 }
9363 DISALLOW_COPY_AND_ASSIGN(IteratingStringHasher);
9364 };
9365
9366
9367 uint32_t String::ComputeAndSetHash() { 9335 uint32_t String::ComputeAndSetHash() {
9368 // Should only be called if hash code has not yet been computed. 9336 // Should only be called if hash code has not yet been computed.
9369 ASSERT(!HasHashCode()); 9337 ASSERT(!HasHashCode());
9370 9338
9371 // Store the hash code in the object. 9339 // Store the hash code in the object.
9372 uint32_t field = IteratingStringHasher::Hash(this, GetHeap()->HashSeed()); 9340 uint32_t field = IteratingStringHasher::Hash(this, GetHeap()->HashSeed());
9373 set_hash_field(field); 9341 set_hash_field(field);
9374 9342
9375 // Check the hash code is there. 9343 // Check the hash code is there.
9376 ASSERT(HasHashCode()); 9344 ASSERT(HasHashCode());
(...skipping 7570 matching lines...) Expand 10 before | Expand all | Expand 10 after
16947 #define ERROR_MESSAGES_TEXTS(C, T) T, 16915 #define ERROR_MESSAGES_TEXTS(C, T) T,
16948 static const char* error_messages_[] = { 16916 static const char* error_messages_[] = {
16949 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16917 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16950 }; 16918 };
16951 #undef ERROR_MESSAGES_TEXTS 16919 #undef ERROR_MESSAGES_TEXTS
16952 return error_messages_[reason]; 16920 return error_messages_[reason];
16953 } 16921 }
16954 16922
16955 16923
16956 } } // namespace v8::internal 16924 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | test/cctest/test-serialize.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698