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