// Copyright 2017 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. #ifndef V8_TORQUE_UTILS_H_ #define V8_TORQUE_UTILS_H_ #include <string> #include <unordered_set> #include <vector> #include "src/base/functional.h" namespace v8 { namespace internal { namespace torque { typedef std::vector<std::string> NameVector; std::string StringLiteralUnquote(const std::string& s); std::string StringLiteralQuote(const std::string& s); [[noreturn]] void ReportError(const std::string& error); std::string CamelifyString(const std::string& underscore_string); std::string DashifyString(const std::string& underscore_string); void ReplaceFileContentsIfDifferent(const std::string& file_path, const std::string& contents); std::string CurrentPositionAsString(); template <class T> class Deduplicator { public: const T* Add(T x) { return &*(storage_.insert(std::move(x)).first); } private: std::unordered_set<T, base::hash<T>> storage_; }; template <class C, class T> void PrintCommaSeparatedList(std::ostream& os, const T& list, C transform) { bool first = true; for (auto& e : list) { if (first) { first = false; } else { os << ", "; } os << transform(e); } } template <class T, typename std::enable_if< std::is_pointer<typename T::value_type>::value, int>::type = 0> void PrintCommaSeparatedList(std::ostream& os, const T& list) { bool first = true; for (auto& e : list) { if (first) { first = false; } else { os << ", "; } os << *e; } } template <class T, typename std::enable_if< !std::is_pointer<typename T::value_type>::value, int>::type = 0> void PrintCommaSeparatedList(std::ostream& os, const T& list) { bool first = true; for (auto& e : list) { if (first) { first = false; } else { os << ", "; } os << e; } } } // namespace torque } // namespace internal } // namespace v8 #endif // V8_TORQUE_UTILS_H_