@@ -175,6 +175,18 @@ class OriginManager {
175
175
return NewID;
176
176
}
177
177
178
+ void dump (OriginID OID, llvm::raw_ostream &OS) const {
179
+ OS << OID << " (" ;
180
+ Origin O = getOrigin (OID);
181
+ if (const ValueDecl *VD = O.getDecl ())
182
+ OS << " Decl: " << VD->getNameAsString ();
183
+ else if (const Expr *E = O.getExpr ())
184
+ OS << " Expr: " << E->getStmtClassName ();
185
+ else
186
+ OS << " Unknown" ;
187
+ OS << " )" ;
188
+ }
189
+
178
190
private:
179
191
OriginID getNextOriginID () { return NextOriginID++; }
180
192
@@ -222,7 +234,7 @@ class Fact {
222
234
return nullptr ;
223
235
}
224
236
225
- virtual void dump (llvm::raw_ostream &OS) const {
237
+ virtual void dump (llvm::raw_ostream &OS, const OriginManager & ) const {
226
238
OS << " Fact (Kind: " << static_cast <int >(K) << " )\n " ;
227
239
}
228
240
};
@@ -237,9 +249,10 @@ class IssueFact : public Fact {
237
249
IssueFact (LoanID LID, OriginID OID) : Fact(Kind::Issue), LID(LID), OID(OID) {}
238
250
LoanID getLoanID () const { return LID; }
239
251
OriginID getOriginID () const { return OID; }
240
- void dump (llvm::raw_ostream &OS) const override {
241
- OS << " Issue (LoanID: " << getLoanID () << " , OriginID: " << getOriginID ()
242
- << " )\n " ;
252
+ void dump (llvm::raw_ostream &OS, const OriginManager &OM) const override {
253
+ OS << " Issue (LoanID: " << getLoanID () << " , ToOrigin: " ;
254
+ OM.dump (getOriginID (), OS);
255
+ OS << " )\n " ;
243
256
}
244
257
};
245
258
@@ -256,7 +269,7 @@ class ExpireFact : public Fact {
256
269
LoanID getLoanID () const { return LID; }
257
270
SourceLocation getExpiryLoc () const { return ExpiryLoc; }
258
271
259
- void dump (llvm::raw_ostream &OS) const override {
272
+ void dump (llvm::raw_ostream &OS, const OriginManager &OM ) const override {
260
273
OS << " Expire (LoanID: " << getLoanID () << " )\n " ;
261
274
}
262
275
};
@@ -274,9 +287,12 @@ class AssignOriginFact : public Fact {
274
287
: Fact(Kind::AssignOrigin), OIDDest(OIDDest), OIDSrc(OIDSrc) {}
275
288
OriginID getDestOriginID () const { return OIDDest; }
276
289
OriginID getSrcOriginID () const { return OIDSrc; }
277
- void dump (llvm::raw_ostream &OS) const override {
278
- OS << " AssignOrigin (DestID: " << getDestOriginID ()
279
- << " , SrcID: " << getSrcOriginID () << " )\n " ;
290
+ void dump (llvm::raw_ostream &OS, const OriginManager &OM) const override {
291
+ OS << " AssignOrigin (Dest: " ;
292
+ OM.dump (getDestOriginID (), OS);
293
+ OS << " , Src: " ;
294
+ OM.dump (getSrcOriginID (), OS);
295
+ OS << " )\n " ;
280
296
}
281
297
};
282
298
@@ -290,8 +306,10 @@ class ReturnOfOriginFact : public Fact {
290
306
291
307
ReturnOfOriginFact (OriginID OID) : Fact(Kind::ReturnOfOrigin), OID(OID) {}
292
308
OriginID getReturnedOriginID () const { return OID; }
293
- void dump (llvm::raw_ostream &OS) const override {
294
- OS << " ReturnOfOrigin (OriginID: " << getReturnedOriginID () << " )\n " ;
309
+ void dump (llvm::raw_ostream &OS, const OriginManager &OM) const override {
310
+ OS << " ReturnOfOrigin (" ;
311
+ OM.dump (getReturnedOriginID (), OS);
312
+ OS << " )\n " ;
295
313
}
296
314
};
297
315
@@ -308,8 +326,10 @@ class UseFact : public Fact {
308
326
OriginID getUsedOrigin () const { return UsedOrigin; }
309
327
const Expr *getUseExpr () const { return UseExpr; }
310
328
311
- void dump (llvm::raw_ostream &OS) const override {
312
- OS << " Use (OriginID: " << UsedOrigin << " )\n " ;
329
+ void dump (llvm::raw_ostream &OS, const OriginManager &OM) const override {
330
+ OS << " Use (" ;
331
+ OM.dump (getUsedOrigin (), OS);
332
+ OS << " )\n " ;
313
333
}
314
334
};
315
335
@@ -326,7 +346,7 @@ class TestPointFact : public Fact {
326
346
327
347
StringRef getAnnotation () const { return Annotation; }
328
348
329
- void dump (llvm::raw_ostream &OS) const override {
349
+ void dump (llvm::raw_ostream &OS, const OriginManager & ) const override {
330
350
OS << " TestPoint (Annotation: \" " << getAnnotation () << " \" )\n " ;
331
351
}
332
352
};
@@ -365,7 +385,7 @@ class FactManager {
365
385
if (It != BlockToFactsMap.end ()) {
366
386
for (const Fact *F : It->second ) {
367
387
llvm::dbgs () << " " ;
368
- F->dump (llvm::dbgs ());
388
+ F->dump (llvm::dbgs (), OriginMgr );
369
389
}
370
390
}
371
391
llvm::dbgs () << " End of Block\n " ;
0 commit comments