void InspectorBasicValue::writeJSON(StringBuilder* output) const { ASSERT(type() == TypeBoolean || type() == TypeNumber); if (type() == TypeBoolean) { if (m_boolValue) output->append(trueString, 4); else output->append(falseString, 5); } else if (type() == TypeNumber) { NumberToLStringBuffer buffer; if (!std::isfinite(m_doubleValue)) { output->append(nullString, 4); return; } DecimalNumber decimal = m_doubleValue; unsigned length = 0; if (decimal.bufferLengthForStringDecimal() > WTF::NumberToStringBufferLength) { // Not enough room for decimal. Use exponential format. if (decimal.bufferLengthForStringExponential() > WTF::NumberToStringBufferLength) { // Fallback for an abnormal case if it's too little even for exponential. output->append("NaN", 3); return; } length = decimal.toStringExponential(buffer, WTF::NumberToStringBufferLength); } else length = decimal.toStringDecimal(buffer, WTF::NumberToStringBufferLength); output->append(buffer, length); } }
void InspectorValue::writeJSON(StringBuilder& output) const { switch (m_type) { case Type::Null: output.appendLiteral("null"); break; case Type::Boolean: if (m_value.boolean) output.appendLiteral("true"); else output.appendLiteral("false"); break; case Type::String: doubleQuoteString(m_value.string, output); break; case Type::Double: case Type::Integer: { NumberToLStringBuffer buffer; if (!std::isfinite(m_value.number)) { output.appendLiteral("null"); return; } DecimalNumber decimal = m_value.number; unsigned length = 0; if (decimal.bufferLengthForStringDecimal() > WTF::NumberToStringBufferLength) { // Not enough room for decimal. Use exponential format. if (decimal.bufferLengthForStringExponential() > WTF::NumberToStringBufferLength) { // Fallback for an abnormal case if it's too little even for exponential. output.appendLiteral("NaN"); return; } length = decimal.toStringExponential(buffer, WTF::NumberToStringBufferLength); } else length = decimal.toStringDecimal(buffer, WTF::NumberToStringBufferLength); output.append(buffer, length); break; } default: ASSERT_NOT_REACHED(); } }