diff options
author | Ben Smith <binji@chromium.org> | 2018-09-03 13:08:23 -0700 |
---|---|---|
committer | Ben Smith <binjimin@gmail.com> | 2018-09-04 15:13:23 -0700 |
commit | e0719fe0fe504c497d9fb7510fe68499c08179f4 (patch) | |
tree | 1e2f3d3b4ac76b239bb75a6f819d8fd1f1cc8050 /src/error-handler.h | |
parent | b4125e90c70a6b1bef4480e33f3c838ab4c7cfcb (diff) | |
download | wabt-e0719fe0fe504c497d9fb7510fe68499c08179f4.tar.gz wabt-e0719fe0fe504c497d9fb7510fe68499c08179f4.tar.bz2 wabt-e0719fe0fe504c497d9fb7510fe68499c08179f4.zip |
Replace ErrorHandler with Errors and FormatErrors*
`ErrorHandler` complicated all error handling in wabt, since it was
callback-based. Callbacks would be useful if we ever wanted to change
behavior when an error occurred, but instead all that the handler ever
did was write the errors to stdout/stderr or to a buffer.
This change adds a new class `Error`, which contains an `ErrorLevel`, a
`Location` and an error message. It also replaces ErrorHandler with
`Errors` (a typedef for `std::vector<Error>`), and adds a couple of
functions that can format a list of `Errors` for output:
`FormatErrorsTo{String,File}`.
Diffstat (limited to 'src/error-handler.h')
-rw-r--r-- | src/error-handler.h | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/src/error-handler.h b/src/error-handler.h deleted file mode 100644 index 45e212fd..00000000 --- a/src/error-handler.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2017 WebAssembly Community Group participants - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WABT_ERROR_HANDLER_H_ -#define WABT_ERROR_HANDLER_H_ - -#include <cstdarg> -#include <string> - -#include "src/color.h" -#include "src/common.h" -#include "src/lexer-source-line-finder.h" - -namespace wabt { - -class WastLexer; - -class ErrorHandler { - public: - explicit ErrorHandler(Location::Type); - ErrorHandler(Location::Type, - std::unique_ptr<LexerSourceLineFinder> line_finder); - - virtual ~ErrorHandler() {} - - // Returns true if the error was handled. - virtual bool OnError(ErrorLevel, - const Location&, - const std::string& error, - const std::string& source_line, - size_t source_line_column_offset) = 0; - - // Helper function for binary locations. - bool OnError(ErrorLevel error_level, - size_t offset, - const std::string& error) { - return OnError(error_level, Location(offset), error, std::string(), 0); - } - - // Helper function for va_lists. - bool OnError(ErrorLevel, const Location&, const char* format, va_list args); - - // OnError will be called with with source_line trimmed to this length. - virtual size_t source_line_max_length() const = 0; - - std::string DefaultErrorMessage(ErrorLevel, - const Color&, - const Location&, - const std::string& error, - const std::string& source_line, - size_t source_line_column_offset, - int indent); - - protected: - Location::Type location_type_; - // TODO(binji): remove unique_ptr - std::unique_ptr<LexerSourceLineFinder> line_finder_; -}; - -class ErrorHandlerNop : public ErrorHandler { - public: - ErrorHandlerNop(); - - bool OnError(ErrorLevel, - const Location&, - const std::string& error, - const std::string& source_line, - size_t source_line_column_offset) override { - return false; - } - - size_t source_line_max_length() const override { return 80; } -}; - -class ErrorHandlerFile : public ErrorHandler { - public: - enum class PrintHeader { - Never, - Once, - Always, - }; - - explicit ErrorHandlerFile(Location::Type, - std::unique_ptr<LexerSourceLineFinder> = {}, - FILE* file = stderr, - const std::string& header = std::string(), - PrintHeader print_header = PrintHeader::Never, - size_t source_line_max_length = 80); - - bool OnError(ErrorLevel, - const Location&, - const std::string& error, - const std::string& source_line, - size_t source_line_column_offset) override; - - size_t source_line_max_length() const override { - return source_line_max_length_; - } - - private: - void PrintErrorHeader(); - - FILE* file_; - std::string header_; - PrintHeader print_header_; - size_t source_line_max_length_; - Color color_; -}; - -class ErrorHandlerBuffer : public ErrorHandler { - public: - explicit ErrorHandlerBuffer(Location::Type, - std::unique_ptr<LexerSourceLineFinder> = {}, - size_t source_line_max_length = 80); - - bool OnError(ErrorLevel, - const Location&, - const std::string& error, - const std::string& source_line, - size_t source_line_column_offset) override; - - size_t source_line_max_length() const override { - return source_line_max_length_; - } - - const std::string& buffer() const { return buffer_; } - - private: - size_t source_line_max_length_; - std::string buffer_; - Color color_; -}; - -} // namespace wabt - -#endif // WABT_ERROR_HANDLER_H_ |