X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_parser.cpp;h=7a8c4f96e551802cfca9d8a85ae5f597e19629d5;hb=27af35ae3464ad0cd891d301c9b821951334e71d;hp=0e4fba098db597d4e782251e7149d7c36ee80a0c;hpb=889d32c7208736694073136f62084910e375d2a8;p=apitrace diff --git a/common/trace_parser.cpp b/common/trace_parser.cpp index 0e4fba0..7a8c4f9 100644 --- a/common/trace_parser.cpp +++ b/common/trace_parser.cpp @@ -557,6 +557,9 @@ Value *Parser::parse_value(void) { case trace::TYPE_OPAQUE: value = parse_opaque(); break; + case trace::TYPE_REPR: + value = parse_repr(); + break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); @@ -613,6 +616,9 @@ void Parser::scan_value(void) { case trace::TYPE_OPAQUE: scan_opaque(); break; + case trace::TYPE_REPR: + scan_repr(); + break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); @@ -784,6 +790,19 @@ void Parser::scan_opaque() { } +Value *Parser::parse_repr() { + Value *humanValue = parse_value(); + Value *machineValue = parse_value(); + return new Repr(humanValue, machineValue); +} + + +void Parser::scan_repr() { + scan_value(); + scan_value(); +} + + const char * Parser::read_string(void) { size_t len = read_uint(); char * value = new char[len + 1]; @@ -814,7 +833,7 @@ Parser::read_sint(void) { c = read_byte(); switch (c) { case trace::TYPE_SINT: - return -read_uint(); + return -(signed long long)read_uint(); case trace::TYPE_UINT: return read_uint(); default: