Call *Parser::parse_call(Mode mode) { do { Call *call; int c = read_byte(); switch (c) { case trace::EVENT_ENTER: parse_enter(mode); break; case trace::EVENT_LEAVE: call = parse_leave(mode); adjust_call_flags(call); return call; default: std::cerr << "error: unknown event " << c << "\n"; exit(1); case -1: if (!calls.empty()) { call = calls.front(); call->flags |= CALL_FLAG_INCOMPLETE; calls.pop_front(); adjust_call_flags(call); return call; } return NULL; } } while(true); }
Call *Parser::parse_call(Mode mode) { do { Call *call; int c = read_byte(); switch (c) { case trace::EVENT_ENTER: #if TRACE_VERBOSE std::cerr << "\tENTER\n"; #endif parse_enter(mode); break; case trace::EVENT_LEAVE: #if TRACE_VERBOSE std::cerr << "\tLEAVE\n"; #endif call = parse_leave(mode); if (call) { adjust_call_flags(call); return call; } break; case trace::EVENT_RESET: #if TRACE_VERBOSE std::cerr << "\tRESET\n"; #endif resetSignatures(); next_call_no = 0; break; default: std::cerr << "error: unknown event " << c << "\n"; exit(1); case -1: if (!calls.empty()) { call = calls.front(); call->flags |= CALL_FLAG_INCOMPLETE; calls.pop_front(); adjust_call_flags(call); return call; } return NULL; } } while(true); }
Call *Parser::parse_call(void) { do { int c = read_byte(); switch(c) { case Trace::EVENT_ENTER: parse_enter(); break; case Trace::EVENT_LEAVE: return parse_leave(); default: std::cerr << "error: unknown event " << c << "\n"; exit(1); case -1: for (CallList::iterator it = calls.begin(); it != calls.end(); ++it) { std::cerr << "warning: incomplete call " << (*it)->name() << "\n"; std::cerr << **it << "\n"; } return NULL; } } while(true); }