diff options
Diffstat (limited to 'deps/v8/src/torque/ls/json.cc')
-rw-r--r-- | deps/v8/src/torque/ls/json.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/deps/v8/src/torque/ls/json.cc b/deps/v8/src/torque/ls/json.cc new file mode 100644 index 0000000000..013c0d652e --- /dev/null +++ b/deps/v8/src/torque/ls/json.cc @@ -0,0 +1,69 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/torque/ls/json.h" + +#include <iostream> +#include <sstream> +#include "src/torque/utils.h" + +namespace v8 { +namespace internal { +namespace torque { +namespace ls { + +namespace { + +void SerializeToString(std::stringstream& str, const JsonValue& value) { + switch (value.tag) { + case JsonValue::NUMBER: + str << value.ToNumber(); + break; + case JsonValue::STRING: + str << StringLiteralQuote(value.ToString()); + break; + case JsonValue::IS_NULL: + str << "null"; + break; + case JsonValue::BOOL: + str << (value.ToBool() ? "true" : "false"); + break; + case JsonValue::OBJECT: { + str << "{"; + size_t i = 0; + for (const auto& pair : value.ToObject()) { + str << "\"" << pair.first << "\":"; + SerializeToString(str, pair.second); + if (++i < value.ToObject().size()) str << ","; + } + str << "}"; + break; + } + case JsonValue::ARRAY: { + str << "["; + size_t i = 0; + for (const auto& element : value.ToArray()) { + SerializeToString(str, element); + if (++i < value.ToArray().size()) str << ","; + } + str << "]"; + break; + } + default: + break; + } +} + +} // namespace + +std::string SerializeToString(const JsonValue& value) { + std::stringstream result; + SerializeToString(result, value); + return result.str(); +} + +} // namespace ls +} // namespace torque +} // namespace internal +} // namespace v8 |