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

Side by Side Diff: src/objects.h

Issue 8513010: Add pointer cache field to external string for access in generated code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: . Created 9 years, 1 month 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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 6740 matching lines...) Expand 10 before | Expand all | Expand 10 after
6751 // 6751 //
6752 // The API expects that all ExternalStrings are created through the 6752 // The API expects that all ExternalStrings are created through the
6753 // API. Therefore, ExternalStrings should not be used internally. 6753 // API. Therefore, ExternalStrings should not be used internally.
6754 class ExternalString: public String { 6754 class ExternalString: public String {
6755 public: 6755 public:
6756 // Casting 6756 // Casting
6757 static inline ExternalString* cast(Object* obj); 6757 static inline ExternalString* cast(Object* obj);
6758 6758
6759 // Layout description. 6759 // Layout description.
6760 static const int kResourceOffset = POINTER_SIZE_ALIGN(String::kSize); 6760 static const int kResourceOffset = POINTER_SIZE_ALIGN(String::kSize);
6761 static const int kSize = kResourceOffset + kPointerSize; 6761 static const int kResourceDataOffset = kResourceOffset + kPointerSize;
6762 static const int kSize = kResourceDataOffset + kPointerSize;
6763
6764 // Clear the cached pointer to the character array provided by the resource.
6765 // This cache is updated the first time the character array is accessed.
6766 inline void clear_data_cache();
6762 6767
6763 STATIC_CHECK(kResourceOffset == Internals::kStringResourceOffset); 6768 STATIC_CHECK(kResourceOffset == Internals::kStringResourceOffset);
6764 6769
6765 private: 6770 private:
6766 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalString); 6771 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalString);
6767 }; 6772 };
6768 6773
6769 6774
6770 // The ExternalAsciiString class is an external string backed by an 6775 // The ExternalAsciiString class is an external string backed by an
6771 // ASCII string. 6776 // ASCII string.
6772 class ExternalAsciiString: public ExternalString { 6777 class ExternalAsciiString: public ExternalString {
6773 public: 6778 public:
6774 static const bool kHasAsciiEncoding = true; 6779 static const bool kHasAsciiEncoding = true;
6775 6780
6776 typedef v8::String::ExternalAsciiStringResource Resource; 6781 typedef v8::String::ExternalAsciiStringResource Resource;
6777 6782
6778 // The underlying resource. 6783 // The underlying resource.
6779 inline const Resource* resource(); 6784 inline const Resource* resource();
6780 inline void set_resource(const Resource* buffer); 6785 inline void set_resource(const Resource* buffer);
6781 6786
6787 inline const char* GetChars();
6788
6782 // Dispatched behavior. 6789 // Dispatched behavior.
6783 uint16_t ExternalAsciiStringGet(int index); 6790 uint16_t ExternalAsciiStringGet(int index);
6784 6791
6785 // Casting. 6792 // Casting.
6786 static inline ExternalAsciiString* cast(Object* obj); 6793 static inline ExternalAsciiString* cast(Object* obj);
6787 6794
6788 // Garbage collection support. 6795 // Garbage collection support.
6789 inline void ExternalAsciiStringIterateBody(ObjectVisitor* v); 6796 inline void ExternalAsciiStringIterateBody(ObjectVisitor* v);
6790 6797
6791 template<typename StaticVisitor> 6798 template<typename StaticVisitor>
(...skipping 17 matching lines...) Expand all
6809 class ExternalTwoByteString: public ExternalString { 6816 class ExternalTwoByteString: public ExternalString {
6810 public: 6817 public:
6811 static const bool kHasAsciiEncoding = false; 6818 static const bool kHasAsciiEncoding = false;
6812 6819
6813 typedef v8::String::ExternalStringResource Resource; 6820 typedef v8::String::ExternalStringResource Resource;
6814 6821
6815 // The underlying string resource. 6822 // The underlying string resource.
6816 inline const Resource* resource(); 6823 inline const Resource* resource();
6817 inline void set_resource(const Resource* buffer); 6824 inline void set_resource(const Resource* buffer);
6818 6825
6826 inline const uint16_t* GetChars();
6827
6819 // Dispatched behavior. 6828 // Dispatched behavior.
6820 uint16_t ExternalTwoByteStringGet(int index); 6829 uint16_t ExternalTwoByteStringGet(int index);
6821 6830
6822 // For regexp code. 6831 // For regexp code.
6823 const uint16_t* ExternalTwoByteStringGetData(unsigned start); 6832 const uint16_t* ExternalTwoByteStringGetData(unsigned start);
6824 6833
6825 // Casting. 6834 // Casting.
6826 static inline ExternalTwoByteString* cast(Object* obj); 6835 static inline ExternalTwoByteString* cast(Object* obj);
6827 6836
6828 // Garbage collection support. 6837 // Garbage collection support.
(...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after
7878 } else { 7887 } else {
7879 value &= ~(1 << bit_position); 7888 value &= ~(1 << bit_position);
7880 } 7889 }
7881 return value; 7890 return value;
7882 } 7891 }
7883 }; 7892 };
7884 7893
7885 } } // namespace v8::internal 7894 } } // namespace v8::internal
7886 7895
7887 #endif // V8_OBJECTS_H_ 7896 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698