Index: tools/gn/err.h |
diff --git a/tools/gn/err.h b/tools/gn/err.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3e077e9fb892303d5b7127eacbd3441b7a791c26 |
--- /dev/null |
+++ b/tools/gn/err.h |
@@ -0,0 +1,85 @@ |
+// Copyright (c) 2013 The Chromium 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 TOOLS_GN_ERR_H_ |
+#define TOOLS_GN_ERR_H_ |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "tools/gn/location.h" |
+#include "tools/gn/token.h" |
+ |
+class ParseNode; |
+class Value; |
+ |
+// Result of doing some operation. Check has_error() to see if an error |
+// occurred. |
+// |
+// An error has a location and a message. Below that, is some optional help |
+// text to go with the annotation of the location. |
+// |
+// An error can also have sub-errors which are additionally printed out |
+// below. They can provide additional context. |
+class Err { |
+ public: |
+ typedef std::vector<LocationRange> RangeList; |
+ |
+ // Indicates no error. |
+ Err(); |
+ |
+ // Error at a single point. |
+ Err(const Location& location, |
+ const std::string& msg, |
+ const std::string& help = std::string()); |
+ |
+ // Error at a given range. |
+ Err(const LocationRange& range, |
+ const std::string& msg, |
+ const std::string& help = std::string()); |
+ |
+ // Error at a given token. |
+ Err(const Token& token, |
+ const std::string& msg, |
+ const std::string& help_text = std::string()); |
+ |
+ // Error at a given node. |
+ Err(const ParseNode* node, |
+ const std::string& msg, |
+ const std::string& help_text = std::string()); |
+ |
+ // Error at a given value. |
+ Err(const Value& value, |
+ const std::string msg, |
+ const std::string& help_text = std::string()); |
+ |
+ ~Err(); |
+ |
+ bool has_error() const { return has_error_; } |
+ const Location& location() const { return location_; } |
+ const std::string& message() const { return message_; } |
+ const std::string& help_text() const { return help_text_; } |
+ |
+ void AppendRange(const LocationRange& range) { ranges_.push_back(range); } |
+ const RangeList& ranges() const { return ranges_; } |
+ |
+ void AppendSubErr(const Err& err); |
+ |
+ void PrintToStdout() const; |
+ |
+ private: |
+ void InternalPrintToStdout(bool is_sub_err) const; |
+ |
+ bool has_error_; |
+ Location location_; |
+ |
+ std::vector<LocationRange> ranges_; |
+ |
+ std::string message_; |
+ std::string help_text_; |
+ |
+ std::vector<Err> sub_errs_; |
+}; |
+ |
+#endif // TOOLS_GN_ERR_H_ |