From: José Fonseca Date: Wed, 24 Nov 2010 15:55:24 +0000 (+0000) Subject: Cleanup pointers. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=65e87135085bacaf4bc6e23d1369c7b07838e423;p=apitrace Cleanup pointers. --- diff --git a/log.cpp b/log.cpp index 3d5d545..5236649 100644 --- 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 --- 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); diff --git a/trace.py b/trace.py index 90f1ef6..8e2e2af 100644 --- 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();' diff --git a/trace_format.hpp b/trace_format.hpp index a67acc0..d2ea6af 100644 --- a/trace_format.hpp +++ b/trace_format.hpp @@ -51,7 +51,6 @@ enum Type { TYPE_BITMASK, TYPE_ARRAY, TYPE_STRUCT, - TYPE_POINTER, TYPE_OPAQUE, }; diff --git a/trace_model.cpp b/trace_model.cpp index 63968b7..f4e915d 100644 --- a/trace_model.cpp +++ b/trace_model.cpp @@ -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::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::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"; } diff --git a/trace_model.hpp b/trace_model.hpp index 50a5058..659b165 100644 --- a/trace_model.hpp +++ b/trace_model.hpp @@ -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); + } + } }; diff --git a/trace_parser.hpp b/trace_parser.hpp index dc7b8d6..2c55037 100644 --- a/trace_parser.hpp +++ b/trace_parser.hpp @@ -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 */