Changeset 51707 in webkit
- Timestamp:
- Dec 4, 2009 12:16:02 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r51706 r51707 1 2009-12-04 Anton Muhin <antonm@chromium.org> 2 3 Reviewed by Dmitry Titov. 4 5 Do not use WebCore::String::String(const UChar*, int length) to convert 6 short v8 strings. 7 8 Plus added string traits. 9 https://bugs.webkit.org/show_bug.cgi?id=31415 10 11 * bindings/v8/V8Binding.cpp: 12 (WebCore::): 13 (WebCore::v8StringToWebCoreString): 14 1 15 2009-12-04 Chris Fleizach <cfleizach@apple.com> 2 16 -
trunk/WebCore/bindings/v8/V8Binding.cpp
r50967 r51707 107 107 } 108 108 109 // Returns right string type based on a dummy parameter.110 String string(String) { return webcoreString(); }111 AtomicString string(AtomicString) { return atomicString(); }112 113 109 static WebCoreStringResource* toStringResource(v8::Handle<v8::String> v8String) 114 110 { … … 245 241 246 242 243 template <class S> struct StringTraits 244 { 245 static S fromStringResource(WebCoreStringResource* resource); 246 247 static S fromV8String(v8::Handle<v8::String> v8String, int length); 248 }; 249 250 template<> 251 struct StringTraits<String> 252 { 253 static String fromStringResource(WebCoreStringResource* resource) 254 { 255 return resource->webcoreString(); 256 } 257 258 static String fromV8String(v8::Handle<v8::String> v8String, int length) 259 { 260 ASSERT(v8String->Length() == length); 261 // NOTE: as of now, String(const UChar*, int) performs String::createUninitialized 262 // anyway, so no need to optimize like we do for AtomicString below. 263 UChar* buffer; 264 String result = String::createUninitialized(length, buffer); 265 v8String->Write(reinterpret_cast<uint16_t*>(buffer), 0, length); 266 return result; 267 } 268 }; 269 270 template<> 271 struct StringTraits<AtomicString> 272 { 273 static AtomicString fromStringResource(WebCoreStringResource* resource) 274 { 275 return resource->atomicString(); 276 } 277 278 static AtomicString fromV8String(v8::Handle<v8::String> v8String, int length) 279 { 280 ASSERT(v8String->Length() == length); 281 static const int inlineBufferSize = 16; 282 if (length <= inlineBufferSize) { 283 UChar inlineBuffer[inlineBufferSize]; 284 v8String->Write(reinterpret_cast<uint16_t*>(inlineBuffer), 0, length); 285 return AtomicString(inlineBuffer, length); 286 } 287 UChar* buffer; 288 String tmp = String::createUninitialized(length, buffer); 289 v8String->Write(reinterpret_cast<uint16_t*>(buffer), 0, length); 290 return AtomicString(tmp); 291 } 292 }; 293 247 294 template <typename StringType> 248 295 StringType v8StringToWebCoreString(v8::Handle<v8::String> v8String, ExternalMode external) … … 250 297 WebCoreStringResource* stringResource = WebCoreStringResource::toStringResource(v8String); 251 298 if (stringResource) 252 return stringResource->string(StringType());299 return StringTraits<StringType>::fromStringResource(stringResource); 253 300 254 301 int length = v8String->Length(); … … 258 305 } 259 306 260 StringType result; 261 static const int inlineBufferSize = 16; 262 if (length <= inlineBufferSize) { 263 UChar inlineBuffer[inlineBufferSize]; 264 v8String->Write(reinterpret_cast<uint16_t*>(inlineBuffer), 0, length); 265 result = StringType(inlineBuffer, length); 266 } else { 267 UChar* buffer; 268 String tmp = String::createUninitialized(length, buffer); 269 v8String->Write(reinterpret_cast<uint16_t*>(buffer), 0, length); 270 result = StringType(tmp); 271 } 307 StringType result(StringTraits<StringType>::fromV8String(v8String, length)); 272 308 273 309 if (external == Externalize && v8String->CanMakeExternal()) {
Note: See TracChangeset
for help on using the changeset viewer.