]> git.cworth.org Git - apitrace/commitdiff
Correctly copy "out" arguments to the "leave" portion of the trace
authorCarl Worth <cworth@cworth.org>
Thu, 17 Nov 2011 01:22:40 +0000 (17:22 -0800)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 27 Jan 2012 22:15:13 +0000 (22:15 +0000)
To do this, we take advantage of the new Arg struct to save, for each
arg, whether it was parsed after an ENTER event or after a LEAVE
event.

cli/cli_pickle.cpp
common/trace_dump.cpp
common/trace_model.cpp
common/trace_model.hpp
common/trace_parser.cpp
common/trace_writer_model.cpp
gui/apitracecall.cpp
gui/saverthread.cpp

index f435e2072316b8e459e94cba948cb4fe6bba6c7a..8535b18d1ff5aba3a92108f8a737ffba595d3c26 100644 (file)
@@ -127,8 +127,8 @@ public:
 
         writer.beginList();
         for (unsigned i = 0; i < call->args.size(); ++i) {
-            if (call->args[i]) {
-                _visit(call->args[i]);
+            if (call->args[i].value) {
+                _visit(call->args[i].value);
             } else {
                 writer.writeNone();
             }
index 6b2fdc30aa96e53affe20aabbe67e7f62583362c..fd1d16a98c8d86cb50fc8b575329adf164974f48 100644 (file)
@@ -217,8 +217,8 @@ public:
             if (!(dumpFlags & DUMP_FLAG_NO_ARG_NAMES)) {
                 os << italic << call->sig->arg_names[i] << normal << " = ";
             }
-            if (call->args[i]) {
-                _visit(call->args[i]);
+            if (call->args[i].value) {
+                _visit(call->args[i].value);
             } else {
                os << "?";
             }
index e05ca276cf59dedc2f1496a329f8b2ce01501117..7e926ba46db70e65c5e8ee1a732f7ce9dcde784e 100644 (file)
@@ -32,7 +32,7 @@ namespace trace {
 
 Call::~Call() {
     for (unsigned i = 0; i < args.size(); ++i) {
-        delete args[i];
+        delete args[i].value;
     }
 
     if (ret) {
index 076ff098d61f9fa25edf72a80aef7c4796663d9f..7973026cd9b07884af719feefd3b7ed72ed1a2cc 100644 (file)
@@ -406,6 +406,11 @@ enum {
 };
 
 
+struct Arg
+{
+    Value *value;
+};
+
 
 class Call
 {
@@ -413,7 +418,7 @@ public:
     unsigned thread_id;
     unsigned no;
     const FunctionSig *sig;
-    std::vector<Value *> args;
+    std::vector<Arg> args;
     Value *ret;
 
     CallFlags flags;
@@ -434,7 +439,7 @@ public:
 
     inline Value & arg(unsigned index) {
         assert(index < args.size());
-        return *(args[index]);
+        return *(args[index].value);
     }
 };
 
index 88afa98521fc46342081e5b7d4a4f4d375001bf7..dc9634f0d36f823b635d26c7efd7bc1a1082625f 100644 (file)
@@ -480,7 +480,7 @@ void Parser::parse_arg(Call *call, Mode mode) {
         if (index >= call->args.size()) {
             call->args.resize(index + 1);
         }
-        call->args[index] = value;
+        call->args[index].value = value;
     }
 }
 
index cc3af284d3f9db7c18c042a51d1cce2a3bfc45cf..96544d1502f6eb24c74343866764722f05ec70b2 100644 (file)
@@ -103,9 +103,9 @@ public:
     void visit(Call *call) {
         unsigned call_no = writer.beginEnter(call->sig, call->thread_id);
         for (unsigned i = 0; i < call->args.size(); ++i) {
-            if (call->args[i]) {
+            if (call->args[i].value) {
                 writer.beginArg(i);
-                _visit(call->args[i]);
+                _visit(call->args[i].value);
                 writer.endArg();
             }
         }
index 57d2d86eb23c48bc37f75bdbbc69c9ab7a5dc197..267dc0980edeaaa7ea02c26de9e981d25e96b6fa 100644 (file)
@@ -678,9 +678,9 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame,
     }
     m_argValues.reserve(call->args.size());
     for (int i = 0; i < call->args.size(); ++i) {
-        if (call->args[i]) {
+        if (call->args[i].value) {
             VariantVisitor argVisitor(loader);
-            call->args[i]->visit(argVisitor);
+            call->args[i].value->visit(argVisitor);
             m_argValues.append(argVisitor.variant());
             if (m_argValues[i].type() == QVariant::ByteArray) {
                 m_hasBinaryData = true;
index 7e7c471d3067cdb07512af7fb7201ee8386f8d83..54ef5d24a82840b85d2d4bbf42e5e0f5df8304b1 100644 (file)
@@ -314,12 +314,12 @@ static void
 overwriteValue(trace::Call *call, const QVariant &val, int index)
 {
     EditVisitor visitor(val);
-    trace::Value *origValue = call->args[index];
+    trace::Value *origValue = call->args[index].value;
     origValue->visit(visitor);
 
     if (visitor.value() && origValue != visitor.value()) {
         delete origValue;
-        call->args[index] = visitor.value();
+        call->args[index].value = visitor.value();
     }
 }