Cleanup pointers.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 24 Nov 2010 15:55:24 +0000 (15:55 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 24 Nov 2010 15:55:24 +0000 (15:55 +0000)
log.cpp
log.hpp
trace.py
trace_format.hpp
trace_model.cpp
trace_model.hpp
trace_parser.hpp

diff --git a/log.cpp b/log.cpp
index 3d5d545..5236649 100644 (file)
--- a/log.cpp
+++ b/log.cpp
@@ -178,25 +178,15 @@ void BeginArg(const char *name) {
    WriteString(name);
 }
 
-void EndArg(void) { }
-
 void BeginReturn(void) {
    WriteByte(Trace::CALL_RET);
 }
 
-void EndReturn(void) { }
-
 void BeginArray(size_t length) {
    WriteByte(Trace::TYPE_ARRAY);
    WriteUInt(length);
 }
 
-void EndArray(void) { }
-
-void BeginElement(void) { }
-
-void EndElement(void) { }
-
 void BeginStruct(const char *name) {
    WriteByte(Trace::TYPE_STRUCT);
    (void)name;
@@ -210,8 +200,6 @@ void BeginMember(const char *name) {
    WriteString(name);
 }
 
-void EndMember(void) { }
-
 void BeginBitmask(void) {
    WriteByte(Trace::TYPE_BITMASK);
 }
@@ -220,14 +208,6 @@ void EndBitmask(void) {
    WriteByte(Trace::TYPE_NULL);
 }
 
-void BeginPointer(const void *addr)
-{
-   WriteByte(Trace::TYPE_POINTER);
-   WriteUInt((size_t)addr);
-}
-
-void EndPointer(void) { }
-
 void LiteralBool(bool value) {
    WriteByte(value ? Trace::TYPE_TRUE : Trace::TYPE_FALSE);
 }
diff --git a/log.hpp b/log.hpp
index 56df8c2..fbc9846 100644 (file)
--- a/log.hpp
+++ b/log.hpp
@@ -35,29 +35,26 @@ namespace Log {
     void EndCall(void);
     
     void BeginArg(const char *name);
-    void EndArg(void);
+    inline void EndArg(void) {}
 
     void BeginReturn(void);
-    void EndReturn(void);
+    inline void EndReturn(void) {}
 
     void BeginArray(size_t length);
-    void EndArray(void);
+    inline void EndArray(void) {}
 
-    void BeginElement(void);
-    void EndElement(void);
+    inline void BeginElement(void) {}
+    inline void EndElement(void) {}
 
     void BeginStruct(const char *name);
     void EndStruct(void);
 
     void BeginMember(const char *name);
-    void EndMember(void);
+    inline void EndMember(void) {}
 
     void BeginBitmask(void);
     void EndBitmask(void);
 
-    void BeginPointer(const void *addr);
-    void EndPointer(void);
-
     void LiteralBool(bool value);
     void LiteralSInt(signed long long value);
     void LiteralUInt(unsigned long long value);
index 90f1ef6..8e2e2af 100644 (file)
--- a/trace.py
+++ b/trace.py
@@ -154,9 +154,11 @@ class DumpImplementer(base.Visitor):
 
     def visit_pointer(self, pointer, instance):
         print '    if(%s) {' % instance
-        print '        Log::BeginPointer((const void *)%s);' % (instance,)
+        print '        Log::BeginArray(1);'
+        print '        Log::BeginElement();'
         dump_instance(pointer.type, "*" + instance)
-        print '        Log::EndPointer();'
+        print '        Log::EndElement();'
+        print '        Log::EndArray();'
         print '    }'
         print '    else'
         print '        Log::LiteralNull();'
index a67acc0..d2ea6af 100644 (file)
@@ -51,7 +51,6 @@ enum Type {
    TYPE_BITMASK,
    TYPE_ARRAY,
    TYPE_STRUCT,
-   TYPE_POINTER,
    TYPE_OPAQUE,
 };
 
index 63968b7..f4e915d 100644 (file)
@@ -132,14 +132,14 @@ public:
    void visit(Array *array) {
       if (array->values.size() == 1) {
          os << "&";
-         array->values[0]->visit(*this);
+         _visit(array->values[0]);
       }
       else {
          const char *sep = "";
          os << "{";
          for (std::vector<Value *>::iterator it = array->values.begin(); it != array->values.end(); ++it) {
             os << sep;
-            (*it)->visit(*this);
+            _visit(*it);
             sep = ", ";
          }
          os << "}";
@@ -155,13 +155,13 @@ public:
       os << bold << call->name << normal << "(";
       for (std::list<Arg>::iterator it = call->args.begin(); it != call->args.end(); ++it) {
          os << sep << italic << it->first << normal << " = ";
-         it->second->visit(*this);
+         _visit(it->second);
          sep = ", ";
       }
       os << ")";
       if (call->ret) {
          os << " = ";
-         call->ret->visit(*this);
+         _visit(call->ret);
       }
       os << "\n";
    }
index 50a5058..659b165 100644 (file)
@@ -212,6 +212,13 @@ public:
    virtual void visit(Const *) {assert(0);}
    virtual void visit(Array *) {assert(0);}
    virtual void visit(Blob *) {assert(0);}
+
+protected:
+   inline void _visit(Value *value) {
+      if (value) { 
+         value->visit(*this); 
+      }
+   }
 };
 
 
index dc7b8d6..2c55037 100644 (file)
@@ -138,8 +138,6 @@ public:
          return parse_struct();
       case Trace::TYPE_BLOB:
          return parse_blob();
-      case Trace::TYPE_POINTER:
-         return parse_pointer();
       case Trace::TYPE_OPAQUE:
          return parse_opaque();
       default:
@@ -224,16 +222,6 @@ done:
       return blob;
    }
    
-   Value *parse_pointer() {
-      unsigned long long addr;
-      Value *value;
-      addr = read_uint();
-      value = parse_value();
-      if (!value)
-         value = new UInt(addr);
-      return value;
-   }
-   
    Value *parse_struct() {
       std::string name;
       /* XXX */