]> git.cworth.org Git - apitrace/commitdiff
Treat pointers specially.
authorJosé Fonseca <jfonseca@vmware.com>
Sat, 4 Dec 2010 10:47:15 +0000 (10:47 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 4 Dec 2010 10:49:17 +0000 (10:49 +0000)
trace_model.cpp
trace_model.hpp
trace_parser.hpp

index 2e20b243852b3a4475a967fbd9581edb7fa52000..403c78ea0382c38d08fe5fdb4caef20fcfb0cb08 100644 (file)
@@ -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 << "(";
index f57dc91b31b0c548eaa4566c681a1ff443300929..a9256e9dfbb7db1d9a58a16d7dd3685a2e245b09 100644 (file)
@@ -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) {
index 04dfd866f331b1afe5ff0bad77a63e340c174a5e..b4017414da646926737a0489ea9f987bd68d0b60 100644 (file)
@@ -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) {