]> git.cworth.org Git - apitrace/blobdiff - common/trace_dump.cpp
Ensure negation argument is signed.
[apitrace] / common / trace_dump.cpp
index c55bbb1ca324e776ad67b5cef5f72cb64376ed1e..06c0079a5e2a8d9436a20ee91e3c71527fd12766 100644 (file)
@@ -129,12 +129,10 @@ public:
     }
 
     void visit(Enum *node) {
-        const EnumSig *sig = node->sig;
-        for (const EnumValue *it = sig->values; it != sig->values + sig->num_values; ++it) {
-            if (it->value == node->value) {
-                os << literal << it->name << normal;
-                return;
-            }
+        const EnumValue *it = node->lookup();
+        if (it) {
+            os << literal << it->name << normal;
+            return;
         }
         os << literal << node->value << normal;
     }
@@ -143,7 +141,8 @@ public:
         unsigned long long value = bitmask->value;
         const BitmaskSig *sig = bitmask->sig;
         bool first = true;
-        for (const BitmaskFlag *it = sig->flags; value != 0 && it != sig->flags + sig->num_flags; ++it) {
+        for (const BitmaskFlag *it = sig->flags; it != sig->flags + sig->num_flags; ++it) {
+            assert(it->value || first);
             if ((it->value && (value & it->value) == it->value) ||
                 (!it->value && value == 0)) {
                 if (!first) {
@@ -153,6 +152,9 @@ public:
                 value &= ~it->value;
                 first = false;
             }
+            if (value == 0) {
+                break;
+            }
         }
         if (value || first) {
             if (!first) {