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); }