File tree Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Original file line number Diff line number Diff line change 24
24
#include " llvm/ADT/DenseMap.h"
25
25
#include " llvm/ADT/Optional.h"
26
26
#include " llvm/ADT/SetVector.h"
27
+ #include " llvm/Support/PrettyStackTrace.h"
27
28
#include < string>
28
29
#include < tuple>
29
30
#include < type_traits>
@@ -40,6 +41,21 @@ using llvm::None;
40
41
41
42
class DiagnosticEngine ;
42
43
44
+ // / Pretty stack trace handler for an arbitrary request.
45
+ template <typename Request>
46
+ class PrettyStackTraceRequest : public llvm ::PrettyStackTraceEntry {
47
+ const Request &request;
48
+
49
+ public:
50
+ PrettyStackTraceRequest (const Request &request) : request(request) { }
51
+
52
+ void print (llvm::raw_ostream &out) const {
53
+ out << " While evaluating request " ;
54
+ simple_display (out, request);
55
+ out << " \n " ;
56
+ }
57
+ };
58
+
43
59
// / Evaluation engine that evaluates and caches "requests", checking for cyclic
44
60
// / dependencies along the way.
45
61
// /
@@ -210,6 +226,7 @@ class Evaluator {
210
226
// them now anyway.
211
227
dependencies[request].clear ();
212
228
229
+ PrettyStackTraceRequest<Request> prettyStackTrace (request);
213
230
return request (*this );
214
231
}
215
232
You can’t perform that action at this time.
0 commit comments