Changeset 37257 in webkit for trunk/JavaScriptCore/kjs/JSString.h
- Timestamp:
- Oct 3, 2008, 2:39:16 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/JSString.h
r36755 r37257 34 34 class JSString; 35 35 36 JSString* jsEmptyString(JSGlobalData*); 36 37 JSString* jsEmptyString(ExecState*); 38 JSString* jsString(JSGlobalData*, const UString&); // returns empty string if passed null string 37 39 JSString* jsString(ExecState*, const UString&); // returns empty string if passed null string 38 40 41 JSString* jsSingleCharacterString(JSGlobalData*, UChar); 39 42 JSString* jsSingleCharacterString(ExecState*, UChar); 43 JSString* jsSingleCharacterSubstring(JSGlobalData*, const UString&, unsigned offset); 40 44 JSString* jsSingleCharacterSubstring(ExecState*, const UString&, unsigned offset); 45 JSString* jsSubstring(JSGlobalData*, const UString&, unsigned offset, unsigned length); 41 46 JSString* jsSubstring(ExecState*, const UString&, unsigned offset, unsigned length); 42 47 43 48 // Non-trivial strings are two or more characters long. 44 49 // These functions are faster than just calling jsString. 50 JSString* jsNontrivialString(JSGlobalData*, const UString&); 45 51 JSString* jsNontrivialString(ExecState*, const UString&); 52 JSString* jsNontrivialString(JSGlobalData*, const char*); 46 53 JSString* jsNontrivialString(ExecState*, const char*); 47 54 … … 49 56 // likely outlive the JSValue this makes, such as the parse tree or a 50 57 // DOM object that contains a UString 58 JSString* jsOwnedString(JSGlobalData*, const UString&); 51 59 JSString* jsOwnedString(ExecState*, const UString&); 52 60 … … 56 64 57 65 public: 58 JSString( ExecState* exec, const UString& value)59 : JSCell( exec->globalData().stringStructureID.get())66 JSString(JSGlobalData* globalData, const UString& value) 67 : JSCell(globalData->stringStructureID.get()) 60 68 , m_value(value) 61 69 { … … 64 72 65 73 enum HasOtherOwnerType { HasOtherOwner }; 66 JSString( ExecState* exec, const UString& value, HasOtherOwnerType)67 : JSCell( exec->globalData().stringStructureID.get())74 JSString(JSGlobalData* globalData, const UString& value, HasOtherOwnerType) 75 : JSCell(globalData->stringStructureID.get()) 68 76 , m_value(value) 69 77 { 70 78 } 71 JSString( ExecState* exec, PassRefPtr<UString::Rep> value, HasOtherOwnerType)72 : JSCell( exec->globalData().stringStructureID.get())79 JSString(JSGlobalData* globalData, PassRefPtr<UString::Rep> value, HasOtherOwnerType) 80 : JSCell(globalData->stringStructureID.get()) 73 81 , m_value(value) 74 82 { … … 81 89 82 90 bool canGetIndex(unsigned i) { return i < static_cast<unsigned>(m_value.size()); } 83 JSString* getIndex( ExecState*, unsigned);91 JSString* getIndex(JSGlobalData*, unsigned); 84 92 85 93 static PassRefPtr<StructureID> createStructureID(JSValue* proto) { return StructureID::create(proto, TypeInfo(StringType)); } … … 110 118 }; 111 119 112 inline JSString* jsEmptyString( ExecState* exec)113 { 114 return exec->globalData().smallStrings.emptyString(exec);115 } 116 117 inline JSString* jsSingleCharacterString( ExecState* exec, UChar c)120 inline JSString* jsEmptyString(JSGlobalData* globalData) 121 { 122 return globalData->smallStrings.emptyString(globalData); 123 } 124 125 inline JSString* jsSingleCharacterString(JSGlobalData* globalData, UChar c) 118 126 { 119 127 if (c <= 0xFF) 120 return exec->globalData().smallStrings.singleCharacterString(exec, c);121 return new ( exec) JSString(exec, UString(&c, 1));122 } 123 124 inline JSString* jsSingleCharacterSubstring( ExecState* exec, const UString& s, unsigned offset)128 return globalData->smallStrings.singleCharacterString(globalData, c); 129 return new (globalData) JSString(globalData, UString(&c, 1)); 130 } 131 132 inline JSString* jsSingleCharacterSubstring(JSGlobalData* globalData, const UString& s, unsigned offset) 125 133 { 126 134 ASSERT(offset < static_cast<unsigned>(s.size())); 127 135 UChar c = s.data()[offset]; 128 136 if (c <= 0xFF) 129 return exec->globalData().smallStrings.singleCharacterString(exec, c);130 return new ( exec) JSString(exec, UString::Rep::create(s.rep(), offset, 1));131 } 132 133 inline JSString* jsNontrivialString( ExecState* exec, const char* s)137 return globalData->smallStrings.singleCharacterString(globalData, c); 138 return new (globalData) JSString(globalData, UString::Rep::create(s.rep(), offset, 1)); 139 } 140 141 inline JSString* jsNontrivialString(JSGlobalData* globalData, const char* s) 134 142 { 135 143 ASSERT(s); 136 144 ASSERT(s[0]); 137 145 ASSERT(s[1]); 138 return new ( exec) JSString(exec, s);139 } 140 141 inline JSString* jsNontrivialString( ExecState* exec, const UString& s)146 return new (globalData) JSString(globalData, s); 147 } 148 149 inline JSString* jsNontrivialString(JSGlobalData* globalData, const UString& s) 142 150 { 143 151 ASSERT(s.size() > 1); 144 return new ( exec) JSString(exec, s);145 } 146 147 inline JSString* JSString::getIndex( ExecState* exec, unsigned i)152 return new (globalData) JSString(globalData, s); 153 } 154 155 inline JSString* JSString::getIndex(JSGlobalData* globalData, unsigned i) 148 156 { 149 157 ASSERT(canGetIndex(i)); 150 return jsSingleCharacterSubstring(exec, m_value, i); 151 } 158 return jsSingleCharacterSubstring(globalData, m_value, i); 159 } 160 161 inline JSString* jsEmptyString(ExecState* exec) { return jsEmptyString(&exec->globalData()); } 162 inline JSString* jsString(ExecState* exec, const UString& s) { return jsString(&exec->globalData(), s); } 163 inline JSString* jsSingleCharacterString(ExecState* exec, UChar c) { return jsSingleCharacterString(&exec->globalData(), c); } 164 inline JSString* jsSingleCharacterSubstring(ExecState* exec, const UString& s, unsigned offset) { return jsSingleCharacterSubstring(&exec->globalData(), s, offset); } 165 inline JSString* jsSubstring(ExecState* exec, const UString& s, unsigned offset, unsigned length) { return jsSubstring(&exec->globalData(), s, offset, length); } 166 inline JSString* jsNontrivialString(ExecState* exec, const UString& s) { return jsNontrivialString(&exec->globalData(), s); } 167 inline JSString* jsNontrivialString(ExecState* exec, const char* s) { return jsNontrivialString(&exec->globalData(), s); } 168 inline JSString* jsOwnedString(ExecState* exec, const UString& s) { return jsOwnedString(&exec->globalData(), s); } 152 169 153 170 ALWAYS_INLINE bool JSString::getStringPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
Note:
See TracChangeset
for help on using the changeset viewer.