From 75bf78c70bc4de62f5a646399737289a27270111 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 2 Sep 2016 09:49:56 -0400 Subject: [PATCH] Kill diagnostic_helper & the wrapping DIAGNOSTIC macro. --- source/diagnostic.h | 26 -------------------------- source/validate.cpp | 10 ++++++---- source/validate_id.cpp | 8 +++++--- 3 files changed, 11 insertions(+), 33 deletions(-) diff --git a/source/diagnostic.h b/source/diagnostic.h index f7937cbd8..3f86267b5 100644 --- a/source/diagnostic.h +++ b/source/diagnostic.h @@ -34,33 +34,11 @@ #include "spirv-tools/libspirv.h" namespace libspirv { -class diagnostic_helper { - public: - diagnostic_helper(spv_position_t& position, spv_diagnostic* diagnostic) - : position_(&position), diagnostic_(diagnostic) {} - - diagnostic_helper(spv_position position, spv_diagnostic* diagnostic) - : position_(position), diagnostic_(diagnostic) {} - - ~diagnostic_helper() { - *diagnostic_ = spvDiagnosticCreate(position_, stream().str().c_str()); - } - - std::stringstream& stream() { return stream_; } - - private: - std::stringstream stream_; - spv_position position_; - spv_diagnostic* diagnostic_; -}; // A DiagnosticStream remembers the current position of the input and an error // code, and captures diagnostic messages via the left-shift operator. // If the error code is not SPV_FAILED_MATCH, then captured messages are // emitted during the destructor. -// TODO(awoloszyn): This is very similar to diagnostic_helper, and hides -// the data more easily. Replace diagnostic_helper elsewhere -// eventually. class DiagnosticStream { public: DiagnosticStream(spv_position_t position, spv_diagnostic* pDiagnostic, @@ -97,10 +75,6 @@ class DiagnosticStream { spv_result_t error_; }; -#define DIAGNOSTIC \ - libspirv::diagnostic_helper helper(position, pDiagnostic); \ - helper.stream() - std::string spvResultToString(spv_result_t res); } // namespace libspirv diff --git a/source/validate.cpp b/source/validate.cpp index f1be5dcc4..0c6293789 100644 --- a/source/validate.cpp +++ b/source/validate.cpp @@ -189,14 +189,16 @@ spv_result_t spvValidate(const spv_const_context context, spv_endianness_t endian; spv_position_t position = {}; if (spvBinaryEndianness(binary, &endian)) { - DIAGNOSTIC << "Invalid SPIR-V magic number."; - return SPV_ERROR_INVALID_BINARY; + return libspirv::DiagnosticStream(position, pDiagnostic, + SPV_ERROR_INVALID_BINARY) + << "Invalid SPIR-V magic number."; } spv_header_t header; if (spvBinaryHeaderGet(binary, endian, &header)) { - DIAGNOSTIC << "Invalid SPIR-V header."; - return SPV_ERROR_INVALID_BINARY; + return libspirv::DiagnosticStream(position, pDiagnostic, + SPV_ERROR_INVALID_BINARY) + << "Invalid SPIR-V header."; } // NOTE: Parse the module and perform inline validation checks. These diff --git a/source/validate_id.cpp b/source/validate_id.cpp index 5b6984b5f..25aa4c24e 100644 --- a/source/validate_id.cpp +++ b/source/validate_id.cpp @@ -97,9 +97,11 @@ class idUsage { vector entry_points_; }; -#define DIAG(INDEX) \ - position->index += INDEX; \ - DIAGNOSTIC +#define DIAG(INDEX) \ + position->index += INDEX; \ + libspirv::DiagnosticStream helper(*position, pDiagnostic, \ + SPV_ERROR_INVALID_DIAGNOSTIC); \ + helper #if 0 template <>