aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/torque/ls/globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/torque/ls/globals.h')
-rw-r--r--deps/v8/src/torque/ls/globals.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/deps/v8/src/torque/ls/globals.h b/deps/v8/src/torque/ls/globals.h
new file mode 100644
index 0000000000..df6589c146
--- /dev/null
+++ b/deps/v8/src/torque/ls/globals.h
@@ -0,0 +1,58 @@
+// 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.
+
+#ifndef V8_TORQUE_LS_GLOBALS_H_
+#define V8_TORQUE_LS_GLOBALS_H_
+
+#include <fstream>
+#include "src/torque/contextual.h"
+
+namespace v8 {
+namespace internal {
+namespace torque {
+
+// When the language server is run by VS code, stdout can not be seen, as it is
+// used as the communication channel. For debugging purposes a simple
+// Log class is added, that allows writing diagnostics to a file configurable
+// via command line flag.
+class Logger : public ContextualClass<Logger> {
+ public:
+ Logger() : enabled_(false) {}
+ ~Logger() {
+ if (enabled_) logfile_.close();
+ }
+
+ static void Enable(std::string path) {
+ Get().enabled_ = true;
+ Get().logfile_.open(path);
+ }
+
+ template <class... Args>
+ static void Log(Args&&... args) {
+ if (Enabled()) {
+ USE((Stream() << std::forward<Args>(args))...);
+ Flush();
+ }
+ }
+
+ private:
+ static bool Enabled() { return Get().enabled_; }
+ static std::ofstream& Stream() {
+ CHECK(Get().enabled_);
+ return Get().logfile_;
+ }
+ static void Flush() { Get().logfile_.flush(); }
+
+ private:
+ bool enabled_;
+ std::ofstream logfile_;
+};
+
+DECLARE_CONTEXTUAL_VARIABLE(TorqueFileList, std::vector<std::string>);
+
+} // namespace torque
+} // namespace internal
+} // namespace v8
+
+#endif // V8_TORQUE_LS_GLOBALS_H_