Changeset 127191 in webkit for trunk/Source/JavaScriptCore/runtime/JSONObject.cpp
- Timestamp:
- Aug 30, 2012, 2:23:51 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSONObject.cpp
r126781 r127191 37 37 #include "Lookup.h" 38 38 #include "PropertyNameArray.h" 39 #include "UStringBuilder.h"40 #include "UStringConcatenate.h"41 39 #include <wtf/MathExtras.h> 40 #include <wtf/text/StringBuilder.h> 42 41 43 42 namespace JSC { … … 95 94 JSObject* object() const { return m_object.get(); } 96 95 97 bool appendNextProperty(Stringifier&, UStringBuilder&);96 bool appendNextProperty(Stringifier&, StringBuilder&); 98 97 99 98 private: … … 108 107 friend class Holder; 109 108 110 static void appendQuotedString( UStringBuilder&, const UString&);109 static void appendQuotedString(StringBuilder&, const String&); 111 110 112 111 JSValue toJSON(JSValue, const PropertyNameForFunctionCall&); 113 112 114 113 enum StringifyResult { StringifyFailed, StringifySucceeded, StringifyFailedDueToUndefinedValue }; 115 StringifyResult appendStringifiedValue( UStringBuilder&, JSValue, JSObject* holder, const PropertyNameForFunctionCall&);114 StringifyResult appendStringifiedValue(StringBuilder&, JSValue, JSObject* holder, const PropertyNameForFunctionCall&); 116 115 117 116 bool willIndent() const; 118 117 void indent(); 119 118 void unindent(); 120 void startNewLine( UStringBuilder&) const;119 void startNewLine(StringBuilder&) const; 121 120 122 121 ExecState* const m_exec; … … 126 125 CallType m_replacerCallType; 127 126 CallData m_replacerCallData; 128 const UString m_gap;127 const String m_gap; 129 128 130 129 Vector<Holder, 16> m_holderStack; 131 UString m_repeatedGap;132 UString m_indent;130 String m_repeatedGap; 131 String m_indent; 133 132 }; 134 133 … … 149 148 } 150 149 151 static inline UString gap(ExecState* exec, JSValue space)150 static inline String gap(ExecState* exec, JSValue space) 152 151 { 153 152 const unsigned maxGapLength = 10; … … 167 166 for (int i = 0; i < count; ++i) 168 167 spaces[i] = ' '; 169 return UString(spaces, count);168 return String(spaces, count); 170 169 } 171 170 172 171 // If the space value is a string, use it as the gap string, otherwise use no gap string. 173 UString spaces = space.getString(exec);172 String spaces = space.getString(exec); 174 173 if (spaces.length() > maxGapLength) { 175 174 spaces = spaces.substringSharingImpl(0, maxGapLength); … … 246 245 object->putDirect(m_exec->globalData(), m_exec->globalData().propertyNames->emptyIdentifier, value.get()); 247 246 248 UStringBuilder result;247 StringBuilder result; 249 248 if (appendStringifiedValue(result, value.get(), object, emptyPropertyName) != StringifySucceeded) 250 249 return Local<Unknown>(m_exec->globalData(), jsUndefined()); … … 252 251 return Local<Unknown>(m_exec->globalData(), jsNull()); 253 252 254 return Local<Unknown>(m_exec->globalData(), jsString(m_exec, result.to UString()));253 return Local<Unknown>(m_exec->globalData(), jsString(m_exec, result.toString())); 255 254 } 256 255 257 256 template <typename CharType> 258 static void appendStringTo UStringBuilder(UStringBuilder& builder, const CharType* data, int length)257 static void appendStringToStringBuilder(StringBuilder& builder, const CharType* data, int length) 259 258 { 260 259 for (int i = 0; i < length; ++i) { … … 304 303 } 305 304 306 void Stringifier::appendQuotedString( UStringBuilder& builder, const UString& value)305 void Stringifier::appendQuotedString(StringBuilder& builder, const String& value) 307 306 { 308 307 int length = value.length(); … … 311 310 312 311 if (value.is8Bit()) 313 appendStringTo UStringBuilder<LChar>(builder, value.characters8(), length);312 appendStringToStringBuilder<LChar>(builder, value.characters8(), length); 314 313 else 315 appendStringTo UStringBuilder<UChar>(builder, value.characters16(), length);314 appendStringToStringBuilder<UChar>(builder, value.characters16(), length); 316 315 317 316 builder.append('"'); … … 342 341 } 343 342 344 Stringifier::StringifyResult Stringifier::appendStringifiedValue( UStringBuilder& builder, JSValue value, JSObject* holder, const PropertyNameForFunctionCall& propertyName)343 Stringifier::StringifyResult Stringifier::appendStringifiedValue(StringBuilder& builder, JSValue value, JSObject* holder, const PropertyNameForFunctionCall& propertyName) 345 344 { 346 345 // Call the toJSON function. … … 377 376 } 378 377 379 UString stringValue;378 String stringValue; 380 379 if (value.getString(m_exec, stringValue)) { 381 380 appendQuotedString(builder, stringValue); … … 388 387 builder.append("null"); 389 388 else 390 builder.append( UString::numberToStringECMAScript(number));389 builder.append(String::numberToStringECMAScript(number)); 391 390 return StringifySucceeded; 392 391 } … … 449 448 unsigned newSize = m_indent.length() + m_gap.length(); 450 449 if (newSize > m_repeatedGap.length()) 451 m_repeatedGap = make UString(m_repeatedGap, m_gap);450 m_repeatedGap = makeString(m_repeatedGap, m_gap); 452 451 ASSERT(newSize <= m_repeatedGap.length()); 453 452 m_indent = m_repeatedGap.substringSharingImpl(0, newSize); … … 460 459 } 461 460 462 inline void Stringifier::startNewLine( UStringBuilder& builder) const461 inline void Stringifier::startNewLine(StringBuilder& builder) const 463 462 { 464 463 if (m_gap.isEmpty()) … … 478 477 } 479 478 480 bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, UStringBuilder& builder)479 bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, StringBuilder& builder) 481 480 { 482 481 ASSERT(m_index <= m_size); … … 705 704 case ArrayEndVisitMember: { 706 705 JSArray* array = arrayStack.peek(); 707 JSValue filteredValue = callReviver(array, jsString(m_exec, UString::number(indexStack.last())), outValue);706 JSValue filteredValue = callReviver(array, jsString(m_exec, String::number(indexStack.last())), outValue); 708 707 if (filteredValue.isUndefined()) 709 708 array->methodTable()->deletePropertyByIndex(array, m_exec, indexStack.last()); … … 812 811 if (!exec->argumentCount()) 813 812 return throwVMError(exec, createError(exec, "JSON.parse requires at least one parameter")); 814 UString source = exec->argument(0).toString(exec)->value(exec);813 String source = exec->argument(0).toString(exec)->value(exec); 815 814 if (exec->hadException()) 816 815 return JSValue::encode(jsNull()); … … 853 852 } 854 853 855 UString JSONStringify(ExecState* exec, JSValue value, unsigned indent)854 String JSONStringify(ExecState* exec, JSValue value, unsigned indent) 856 855 { 857 856 LocalScope scope(exec->globalData()); 858 857 Local<Unknown> result = Stringifier(exec, Local<Unknown>(exec->globalData(), jsNull()), Local<Unknown>(exec->globalData(), jsNumber(indent))).stringify(Local<Unknown>(exec->globalData(), value)); 859 858 if (result.isUndefinedOrNull()) 860 return UString();859 return String(); 861 860 return result.getString(exec); 862 861 }
Note:
See TracChangeset
for help on using the changeset viewer.