Value *Parser::parse_value(void) {
     int c;
+    Value *value;
     c = read_byte();
     switch(c) {
     case Trace::TYPE_NULL:
-        return new Null;
+        value = new Null;
+        break;
     case Trace::TYPE_FALSE:
-        return new Bool(false);
+        value = new Bool(false);
+        break;
     case Trace::TYPE_TRUE:
-        return new Bool(true);
+        value = new Bool(true);
+        break;
     case Trace::TYPE_SINT:
-        return parse_sint();
+        value = parse_sint();
+        break;
     case Trace::TYPE_UINT:
-        return parse_uint();
+        value = parse_uint();
+        break;
     case Trace::TYPE_FLOAT:
-        return parse_float();
+        value = parse_float();
+        break;
     case Trace::TYPE_DOUBLE:
-        return parse_double();
+        value = parse_double();
+        break;
     case Trace::TYPE_STRING:
-        return parse_string();
+        value = parse_string();
+        break;
     case Trace::TYPE_ENUM:
-        return parse_enum();
+        value = parse_enum();
+        break;
     case Trace::TYPE_BITMASK:
-        return parse_bitmask();
+        value = parse_bitmask();
+        break;
     case Trace::TYPE_ARRAY:
-        return parse_array();
+        value = parse_array();
+        break;
     case Trace::TYPE_STRUCT:
-        return parse_struct();
+        value = parse_struct();
+        break;
     case Trace::TYPE_BLOB:
-        return parse_blob();
+        value = parse_blob();
+        break;
     case Trace::TYPE_OPAQUE:
-        return parse_opaque();
+        value = parse_opaque();
+        break;
     default:
         std::cerr << "error: unknown type " << c << "\n";
         exit(1);
     case -1:
-        return NULL;
+        value = NULL;
+        break;
+    }
+#if TRACE_VERBOSE
+    if (value) {
+        std::cerr << "\tVALUE " << value << "\n";
     }
+#endif
+    return value;
 }