X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_dump.cpp;h=d9dcf1197737a7d1a2033fc463d0b20edfc27842;hb=41a6d89aa0156103f5217521fe582941782aad8e;hp=6b2fdc30aa96e53affe20aabbe67e7f62583362c;hpb=e84e3b872e4516d978dfb398b55b91d9de3b15e8;p=apitrace diff --git a/common/trace_dump.cpp b/common/trace_dump.cpp index 6b2fdc3..d9dcf11 100644 --- a/common/trace_dump.cpp +++ b/common/trace_dump.cpp @@ -73,7 +73,7 @@ public: } void visit(Null *) { - os << "NULL"; + os << literal << "NULL" << normal; } void visit(Bool *node) { @@ -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) { @@ -198,8 +200,16 @@ public: os << pointer << "0x" << std::hex << p->value << std::dec << normal; } + void visit(Repr *r) { + _visit(r->humanValue); + } + void visit(Call *call) { CallFlags callFlags = call->flags; + + if (!(dumpFlags & DUMP_FLAG_NO_CALL_NO)) { + os << call->no << " "; + } if (callFlags & CALL_FLAG_NON_REPRODUCIBLE) { os << strike; @@ -217,8 +227,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 << "?"; } @@ -252,7 +262,6 @@ void dump(Value *value, std::ostream &os, DumpFlags flags) { void dump(Call &call, std::ostream &os, DumpFlags flags) { Dumper d(os, flags); - os << call.no << " "; d.visit(&call); }