From c929e99807034db697158427a85f68540fa81127 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Sat, 4 Dec 2010 10:47:15 +0000 Subject: [PATCH] Treat pointers specially. --- trace_model.cpp | 7 ++++++- trace_model.hpp | 11 +++++++++++ trace_parser.hpp | 3 +-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/trace_model.cpp b/trace_model.cpp index 2e20b24..403c78e 100644 --- a/trace_model.cpp +++ b/trace_model.cpp @@ -42,6 +42,7 @@ void Bitmask::visit(Visitor &visitor) { visitor.visit(this); } void Struct::visit(Visitor &visitor) { visitor.visit(this); } void Array::visit(Visitor &visitor) { visitor.visit(this); } void Blob::visit(Visitor &visitor) { visitor.visit(this); } +void Pointer::visit(Visitor &visitor) { visitor.visit(this); } class Dumper : public Visitor { @@ -123,7 +124,7 @@ public: if (!first) { os << " | "; } - os << literal << std::hex << value << std::dec << normal; + os << literal << "0x" << std::hex << value << std::dec << normal; } } @@ -159,6 +160,10 @@ public: os << pointer << "blob(" << blob->size << ")" << normal; } + void visit(Pointer *p) { + os << pointer << "0x" << std::hex << p->value << std::dec << normal; + } + void visit(Call *call) { const char *sep = ""; os << bold << call->sig->name << normal << "("; diff --git a/trace_model.hpp b/trace_model.hpp index f57dc91..a9256e9 100644 --- a/trace_model.hpp +++ b/trace_model.hpp @@ -51,6 +51,7 @@ class UInt; class Value { public: + virtual ~Value() {} virtual void visit(Visitor &visitor) = 0; operator bool (void) const; @@ -238,6 +239,15 @@ public: }; +class Pointer : public UInt +{ +public: + Pointer(unsigned long long value) : UInt(value) {} + + void visit(Visitor &visitor); +}; + + class Visitor { public: @@ -252,6 +262,7 @@ public: virtual void visit(Struct *) {assert(0);} virtual void visit(Array *) {assert(0);} virtual void visit(Blob *) {assert(0);} + virtual void visit(Pointer *) {assert(0);} protected: inline void _visit(Value *value) { diff --git a/trace_parser.hpp b/trace_parser.hpp index 04dfd86..b401741 100644 --- a/trace_parser.hpp +++ b/trace_parser.hpp @@ -351,8 +351,7 @@ public: Value *parse_opaque() { unsigned long long addr; addr = read_uint(); - /* XXX */ - return new UInt(addr); + return new Pointer(addr); } std::string read_string(void) { -- 2.43.0