/src/spirv-tools/source/diagnostic.h
Line | Count | Source |
1 | | // Copyright (c) 2015-2016 The Khronos Group Inc. |
2 | | // |
3 | | // Licensed under the Apache License, Version 2.0 (the "License"); |
4 | | // you may not use this file except in compliance with the License. |
5 | | // You may obtain a copy of the License at |
6 | | // |
7 | | // http://www.apache.org/licenses/LICENSE-2.0 |
8 | | // |
9 | | // Unless required by applicable law or agreed to in writing, software |
10 | | // distributed under the License is distributed on an "AS IS" BASIS, |
11 | | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 | | // See the License for the specific language governing permissions and |
13 | | // limitations under the License. |
14 | | |
15 | | #ifndef SOURCE_DIAGNOSTIC_H_ |
16 | | #define SOURCE_DIAGNOSTIC_H_ |
17 | | |
18 | | #include <sstream> |
19 | | #include <string> |
20 | | |
21 | | #include "spirv-tools/libspirv.hpp" |
22 | | |
23 | | namespace spvtools { |
24 | | |
25 | | // A DiagnosticStream remembers the current position of the input and an error |
26 | | // code, and captures diagnostic messages via the left-shift operator. |
27 | | // If the error code is not SPV_FAILED_MATCH, then captured messages are |
28 | | // emitted during the destructor. |
29 | | class DiagnosticStream { |
30 | | public: |
31 | | DiagnosticStream(spv_position_t position, const MessageConsumer& consumer, |
32 | | const std::string& disassembled_instruction, |
33 | | spv_result_t error) |
34 | | : position_(position), |
35 | | consumer_(consumer), |
36 | | disassembled_instruction_(disassembled_instruction), |
37 | 444k | error_(error) {} |
38 | | |
39 | | // Creates a DiagnosticStream from an expiring DiagnosticStream. |
40 | | // The new object takes the contents of the other, and prevents the |
41 | | // other from emitting anything during destruction. |
42 | | DiagnosticStream(DiagnosticStream&& other); |
43 | | |
44 | | // Destroys a DiagnosticStream. |
45 | | // If its status code is something other than SPV_FAILED_MATCH |
46 | | // then emit the accumulated message to the consumer. |
47 | | ~DiagnosticStream(); |
48 | | |
49 | | // Adds the given value to the diagnostic message to be written. |
50 | | template <typename T> |
51 | 777k | DiagnosticStream& operator<<(const T& val) { |
52 | 777k | stream_ << val; |
53 | 777k | return *this; |
54 | 777k | } Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [16]>(char const (&) [16]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [36]>(char const (&) [36]) Line | Count | Source | 51 | 2.50k | DiagnosticStream& operator<<(const T& val) { | 52 | 2.50k | stream_ << val; | 53 | 2.50k | return *this; | 54 | 2.50k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <unsigned long>(unsigned long const&) Line | Count | Source | 51 | 6 | DiagnosticStream& operator<<(const T& val) { | 52 | 6 | stream_ << val; | 53 | 6 | return *this; | 54 | 6 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [19]>(char const (&) [19]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <unsigned int>(unsigned int const&) Line | Count | Source | 51 | 90 | DiagnosticStream& operator<<(const T& val) { | 52 | 90 | stream_ << val; | 53 | 90 | return *this; | 54 | 90 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [30]>(char const (&) [30]) Line | Count | Source | 51 | 118 | DiagnosticStream& operator<<(const T& val) { | 52 | 118 | stream_ << val; | 53 | 118 | return *this; | 54 | 118 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <std::__1::ios_base& (std::__1::ios_base&)>(std::__1::ios_base& ( const&)(std::__1::ios_base&)) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [3]>(char const (&) [3]) Line | Count | Source | 51 | 162k | DiagnosticStream& operator<<(const T& val) { | 52 | 162k | stream_ << val; | 53 | 162k | return *this; | 54 | 162k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [47]>(char const (&) [47]) Line | Count | Source | 51 | 212 | DiagnosticStream& operator<<(const T& val) { | 52 | 212 | stream_ << val; | 53 | 212 | return *this; | 54 | 212 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [33]>(char const (&) [33]) Line | Count | Source | 51 | 12 | DiagnosticStream& operator<<(const T& val) { | 52 | 12 | stream_ << val; | 53 | 12 | return *this; | 54 | 12 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <unsigned short>(unsigned short const&) Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [17]>(char const (&) [17]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [23]>(char const (&) [23]) Line | Count | Source | 51 | 30 | DiagnosticStream& operator<<(const T& val) { | 52 | 30 | stream_ << val; | 53 | 30 | return *this; | 54 | 30 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char const*>(char const* const&) Line | Count | Source | 51 | 165k | DiagnosticStream& operator<<(const T& val) { | 52 | 165k | stream_ << val; | 53 | 165k | return *this; | 54 | 165k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [35]>(char const (&) [35]) Line | Count | Source | 51 | 42 | DiagnosticStream& operator<<(const T& val) { | 52 | 42 | stream_ << val; | 53 | 42 | return *this; | 54 | 42 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [34]>(char const (&) [34]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [2]>(char const (&) [2]) Line | Count | Source | 51 | 1.65k | DiagnosticStream& operator<<(const T& val) { | 52 | 1.65k | stream_ << val; | 53 | 1.65k | return *this; | 54 | 1.65k | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [20]>(char const (&) [20]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [22]>(char const (&) [22]) Line | Count | Source | 51 | 624 | DiagnosticStream& operator<<(const T& val) { | 52 | 624 | stream_ << val; | 53 | 624 | return *this; | 54 | 624 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [4]>(char const (&) [4]) Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [27]>(char const (&) [27]) Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [18]>(char const (&) [18]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [49]>(char const (&) [49]) Line | Count | Source | 51 | 60 | DiagnosticStream& operator<<(const T& val) { | 52 | 60 | stream_ << val; | 53 | 60 | return *this; | 54 | 60 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [6]>(char const (&) [6]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [38]>(char const (&) [38]) Line | Count | Source | 51 | 1.26k | DiagnosticStream& operator<<(const T& val) { | 52 | 1.26k | stream_ << val; | 53 | 1.26k | return *this; | 54 | 1.26k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [9]>(char const (&) [9]) Line | Count | Source | 51 | 590 | DiagnosticStream& operator<<(const T& val) { | 52 | 590 | stream_ << val; | 53 | 590 | return *this; | 54 | 590 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [40]>(char const (&) [40]) Line | Count | Source | 51 | 34 | DiagnosticStream& operator<<(const T& val) { | 52 | 34 | stream_ << val; | 53 | 34 | return *this; | 54 | 34 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [31]>(char const (&) [31]) Line | Count | Source | 51 | 16 | DiagnosticStream& operator<<(const T& val) { | 52 | 16 | stream_ << val; | 53 | 16 | return *this; | 54 | 16 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [13]>(char const (&) [13]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [24]>(char const (&) [24]) Line | Count | Source | 51 | 18 | DiagnosticStream& operator<<(const T& val) { | 52 | 18 | stream_ << val; | 53 | 18 | return *this; | 54 | 18 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [15]>(char const (&) [15]) Line | Count | Source | 51 | 16 | DiagnosticStream& operator<<(const T& val) { | 52 | 16 | stream_ << val; | 53 | 16 | return *this; | 54 | 16 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [25]>(char const (&) [25]) Line | Count | Source | 51 | 160k | DiagnosticStream& operator<<(const T& val) { | 52 | 160k | stream_ << val; | 53 | 160k | return *this; | 54 | 160k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [12]>(char const (&) [12]) Line | Count | Source | 51 | 324 | DiagnosticStream& operator<<(const T& val) { | 52 | 324 | stream_ << val; | 53 | 324 | return *this; | 54 | 324 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Line | Count | Source | 51 | 206k | DiagnosticStream& operator<<(const T& val) { | 52 | 206k | stream_ << val; | 53 | 206k | return *this; | 54 | 206k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [11]>(char const (&) [11]) Line | Count | Source | 51 | 100 | DiagnosticStream& operator<<(const T& val) { | 52 | 100 | stream_ << val; | 53 | 100 | return *this; | 54 | 100 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [29]>(char const (&) [29]) Line | Count | Source | 51 | 1.73k | DiagnosticStream& operator<<(const T& val) { | 52 | 1.73k | stream_ << val; | 53 | 1.73k | return *this; | 54 | 1.73k | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [41]>(char const (&) [41]) Line | Count | Source | 51 | 35 | DiagnosticStream& operator<<(const T& val) { | 52 | 35 | stream_ << val; | 53 | 35 | return *this; | 54 | 35 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <spv_operand_type_t>(spv_operand_type_t const&) Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [39]>(char const (&) [39]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [32]>(char const (&) [32]) Line | Count | Source | 51 | 22 | DiagnosticStream& operator<<(const T& val) { | 52 | 22 | stream_ << val; | 53 | 22 | return *this; | 54 | 22 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [8]>(char const (&) [8]) Line | Count | Source | 51 | 12 | DiagnosticStream& operator<<(const T& val) { | 52 | 12 | stream_ << val; | 53 | 12 | return *this; | 54 | 12 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [14]>(char const (&) [14]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [77]>(char const (&) [77]) Line | Count | Source | 51 | 348 | DiagnosticStream& operator<<(const T& val) { | 52 | 348 | stream_ << val; | 53 | 348 | return *this; | 54 | 348 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [65]>(char const (&) [65]) Line | Count | Source | 51 | 42 | DiagnosticStream& operator<<(const T& val) { | 52 | 42 | stream_ << val; | 53 | 42 | return *this; | 54 | 42 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [54]>(char const (&) [54]) Line | Count | Source | 51 | 14 | DiagnosticStream& operator<<(const T& val) { | 52 | 14 | stream_ << val; | 53 | 14 | return *this; | 54 | 14 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [26]>(char const (&) [26]) Line | Count | Source | 51 | 6 | DiagnosticStream& operator<<(const T& val) { | 52 | 6 | stream_ << val; | 53 | 6 | return *this; | 54 | 6 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <int>(int const&) Line | Count | Source | 51 | 18 | DiagnosticStream& operator<<(const T& val) { | 52 | 18 | stream_ << val; | 53 | 18 | return *this; | 54 | 18 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [55]>(char const (&) [55]) Line | Count | Source | 51 | 16 | DiagnosticStream& operator<<(const T& val) { | 52 | 16 | stream_ << val; | 53 | 16 | return *this; | 54 | 16 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [10]>(char const (&) [10]) Line | Count | Source | 51 | 76 | DiagnosticStream& operator<<(const T& val) { | 52 | 76 | stream_ << val; | 53 | 76 | return *this; | 54 | 76 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [104]>(char const (&) [104]) Line | Count | Source | 51 | 344 | DiagnosticStream& operator<<(const T& val) { | 52 | 344 | stream_ << val; | 53 | 344 | return *this; | 54 | 344 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [48]>(char const (&) [48]) Line | Count | Source | 51 | 550 | DiagnosticStream& operator<<(const T& val) { | 52 | 550 | stream_ << val; | 53 | 550 | return *this; | 54 | 550 | } |
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [51]>(char const (&) [51]) spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [7]>(char const (&) [7]) Line | Count | Source | 51 | 56 | DiagnosticStream& operator<<(const T& val) { | 52 | 56 | stream_ << val; | 53 | 56 | return *this; | 54 | 56 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [42]>(char const (&) [42]) Line | Count | Source | 51 | 56 | DiagnosticStream& operator<<(const T& val) { | 52 | 56 | stream_ << val; | 53 | 56 | return *this; | 54 | 56 | } |
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [37]>(char const (&) [37]) Line | Count | Source | 51 | 70.8k | DiagnosticStream& operator<<(const T& val) { | 52 | 70.8k | stream_ << val; | 53 | 70.8k | return *this; | 54 | 70.8k | } |
|
55 | | |
56 | | // Conversion operator to spv_result, returning the error code. |
57 | 444k | operator spv_result_t() { return error_; } |
58 | | |
59 | | private: |
60 | | std::ostringstream stream_; |
61 | | spv_position_t position_; |
62 | | MessageConsumer consumer_; // Message consumer callback. |
63 | | std::string disassembled_instruction_; |
64 | | spv_result_t error_; |
65 | | }; |
66 | | |
67 | | // Changes the MessageConsumer in |context| to one that updates |diagnostic| |
68 | | // with the last message received. |
69 | | // |
70 | | // This function expects that |diagnostic| is not nullptr and its content is a |
71 | | // nullptr. |
72 | | void UseDiagnosticAsMessageConsumer(spv_context context, |
73 | | spv_diagnostic* diagnostic); |
74 | | |
75 | | std::string spvResultToString(spv_result_t res); |
76 | | |
77 | | } // namespace spvtools |
78 | | |
79 | | #endif // SOURCE_DIAGNOSTIC_H_ |