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

Side by Side Diff: src/objects.h

Issue 21117: Allow the morphing of strings to external strings to avoid having to... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 10 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
« no previous file with comments | « src/mark-compact.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 private: 938 private:
939 // HeapObject calls the private constructor and directly reads the value. 939 // HeapObject calls the private constructor and directly reads the value.
940 friend class HeapObject; 940 friend class HeapObject;
941 941
942 explicit MapWord(uintptr_t value) : value_(value) {} 942 explicit MapWord(uintptr_t value) : value_(value) {}
943 943
944 uintptr_t value_; 944 uintptr_t value_;
945 945
946 // Bits used by the marking phase of the garbage collector. 946 // Bits used by the marking phase of the garbage collector.
947 // 947 //
948 // The first word of a heap object is normall a map pointer. The last two 948 // The first word of a heap object is normally a map pointer. The last two
949 // bits are tagged as '01' (kHeapObjectTag). We reuse the last two bits to 949 // bits are tagged as '01' (kHeapObjectTag). We reuse the last two bits to
950 // mark an object as live and/or overflowed: 950 // mark an object as live and/or overflowed:
951 // last bit = 0, marked as alive 951 // last bit = 0, marked as alive
952 // second bit = 1, overflowed 952 // second bit = 1, overflowed
953 // An object is only marked as overflowed when it is marked as live while 953 // An object is only marked as overflowed when it is marked as live while
954 // the marking stack is overflowed. 954 // the marking stack is overflowed.
955 static const int kMarkingBit = 0; // marking bit 955 static const int kMarkingBit = 0; // marking bit
956 static const int kMarkingMask = (1 << kMarkingBit); // marking mask 956 static const int kMarkingMask = (1 << kMarkingBit); // marking mask
957 static const int kOverflowBit = 1; // overflow bit 957 static const int kOverflowBit = 1; // overflow bit
958 static const int kOverflowMask = (1 << kOverflowBit); // overflow mask 958 static const int kOverflowMask = (1 << kOverflowBit); // overflow mask
(...skipping 2239 matching lines...) Expand 10 before | Expand all | Expand 10 after
3198 // Returns a hash value used for the property table 3198 // Returns a hash value used for the property table
3199 inline uint32_t Hash(); 3199 inline uint32_t Hash();
3200 3200
3201 static uint32_t ComputeLengthAndHashField(unibrow::CharacterStream* buffer, 3201 static uint32_t ComputeLengthAndHashField(unibrow::CharacterStream* buffer,
3202 int length); 3202 int length);
3203 3203
3204 static bool ComputeArrayIndex(unibrow::CharacterStream* buffer, 3204 static bool ComputeArrayIndex(unibrow::CharacterStream* buffer,
3205 uint32_t* index, 3205 uint32_t* index,
3206 int length); 3206 int length);
3207 3207
3208 // Externalization.
3209 bool MakeExternal(v8::String::ExternalStringResource* resource);
3210 bool MakeExternal(v8::String::ExternalAsciiStringResource* resource);
3211
3208 // Conversion. 3212 // Conversion.
3209 inline bool AsArrayIndex(uint32_t* index); 3213 inline bool AsArrayIndex(uint32_t* index);
3210 3214
3211 // Casting. 3215 // Casting.
3212 static inline String* cast(Object* obj); 3216 static inline String* cast(Object* obj);
3213 3217
3214 void PrintOn(FILE* out); 3218 void PrintOn(FILE* out);
3215 3219
3216 // For use during stack traces. Performs rudimentary sanity check. 3220 // For use during stack traces. Performs rudimentary sanity check.
3217 bool LooksValid(); 3221 bool LooksValid();
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
3577 static inline ExternalAsciiString* cast(Object* obj); 3581 static inline ExternalAsciiString* cast(Object* obj);
3578 3582
3579 // Support for StringInputBuffer. 3583 // Support for StringInputBuffer.
3580 const unibrow::byte* ExternalAsciiStringReadBlock(unsigned* remaining, 3584 const unibrow::byte* ExternalAsciiStringReadBlock(unsigned* remaining,
3581 unsigned* offset, 3585 unsigned* offset,
3582 unsigned chars); 3586 unsigned chars);
3583 inline void ExternalAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, 3587 inline void ExternalAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
3584 unsigned* offset, 3588 unsigned* offset,
3585 unsigned chars); 3589 unsigned chars);
3586 3590
3591 // Identify the map for the external string/symbol with a particular length.
3592 static inline Map* StringMap(int length);
3593 static inline Map* SymbolMap(int length);
3587 private: 3594 private:
3588 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); 3595 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString);
3589 }; 3596 };
3590 3597
3591 3598
3592 // The ExternalTwoByteString class is an external string backed by a UTF-16 3599 // The ExternalTwoByteString class is an external string backed by a UTF-16
3593 // encoded string. 3600 // encoded string.
3594 class ExternalTwoByteString: public ExternalString { 3601 class ExternalTwoByteString: public ExternalString {
3595 public: 3602 public:
3596 typedef v8::String::ExternalStringResource Resource; 3603 typedef v8::String::ExternalStringResource Resource;
3597 3604
3598 // The underlying string resource. 3605 // The underlying string resource.
3599 inline Resource* resource(); 3606 inline Resource* resource();
3600 inline void set_resource(Resource* buffer); 3607 inline void set_resource(Resource* buffer);
3601 3608
3602 // Dispatched behavior. 3609 // Dispatched behavior.
3603 uint16_t ExternalTwoByteStringGet(int index); 3610 uint16_t ExternalTwoByteStringGet(int index);
3604 3611
3605 // For regexp code. 3612 // For regexp code.
3606 const uint16_t* ExternalTwoByteStringGetData(unsigned start); 3613 const uint16_t* ExternalTwoByteStringGetData(unsigned start);
3607 3614
3608 // Casting. 3615 // Casting.
3609 static inline ExternalTwoByteString* cast(Object* obj); 3616 static inline ExternalTwoByteString* cast(Object* obj);
3610 3617
3611 // Support for StringInputBuffer. 3618 // Support for StringInputBuffer.
3612 void ExternalTwoByteStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, 3619 void ExternalTwoByteStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
3613 unsigned* offset_ptr, 3620 unsigned* offset_ptr,
3614 unsigned chars); 3621 unsigned chars);
3615 3622
3623 // Identify the map for the external string/symbol with a particular length.
3624 static inline Map* StringMap(int length);
3625 static inline Map* SymbolMap(int length);
3616 private: 3626 private:
3617 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalTwoByteString); 3627 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalTwoByteString);
3618 }; 3628 };
3619 3629
3620 3630
3621 // A flat string reader provides random access to the contents of a 3631 // A flat string reader provides random access to the contents of a
3622 // string independent of the character width of the string. The handle 3632 // string independent of the character width of the string. The handle
3623 // must be valid as long as the reader is being used. 3633 // must be valid as long as the reader is being used.
3624 class FlatStringReader BASE_EMBEDDED { 3634 class FlatStringReader BASE_EMBEDDED {
3625 public: 3635 public:
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
4227 } else { 4237 } else {
4228 value &= ~(1 << bit_position); 4238 value &= ~(1 << bit_position);
4229 } 4239 }
4230 return value; 4240 return value;
4231 } 4241 }
4232 }; 4242 };
4233 4243
4234 } } // namespace v8::internal 4244 } } // namespace v8::internal
4235 4245
4236 #endif // V8_OBJECTS_H_ 4246 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mark-compact.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698