| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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_ |
| OLD | NEW |