Kill diagnostic_helper & the wrapping DIAGNOSTIC macro.
authorLei Zhang <antiagainst@gmail.com>
Fri, 2 Sep 2016 13:49:56 +0000 (09:49 -0400)
committerGitHub <noreply@github.com>
Fri, 2 Sep 2016 13:49:56 +0000 (09:49 -0400)
source/diagnostic.h
source/validate.cpp
source/validate_id.cpp

index f7937cb..3f86267 100644 (file)
 #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
index f1be5dc..0c62937 100644 (file)
@@ -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
index 5b6984b..25aa4c2 100644 (file)
@@ -97,9 +97,11 @@ class idUsage {
   vector<uint32_t> 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 <>