public virtual EventResult ProcessEvent(Inferior.ChildEvent cevent,
out TargetEventArgs args)
{
if (cevent.Type == Inferior.ChildEventType.CHILD_INTERRUPTED) {
args = null;
if (ResumeOperation ())
return EventResult.Running;
}
if ((cevent.Type == Inferior.ChildEventType.CHILD_STOPPED) && (cevent.Argument != 0)) {
sse.frame_changed (inferior.CurrentFrame, null);
args = new TargetEventArgs (TargetEventType.TargetStopped, (int) cevent.Argument, sse.current_frame);
return EventResult.Completed;
}
EventResult result;
if (child != null) {
Report.Debug (DebugFlags.EventLoop, "{0} child event: {1} {2}", sse, this, cevent);
result = child.ProcessEvent (cevent, out args);
Report.Debug (DebugFlags.EventLoop, "{0} child event done: {1} {2} {3} {4}", sse, this, cevent, result, args);
if (result == EventResult.ParentResumed) {
child = null;
return EventResult.Running;
}
if ((result != EventResult.AskParent) &&
(result != EventResult.ResumeOperation))
return result;
Operation old_child = child;
child = null;
if ((result == EventResult.ResumeOperation) && ResumeOperation ()) {
args = null;
return EventResult.Running;
}
Report.Debug (DebugFlags.EventLoop,
"{0} resending event {1} from {2} to {3}",
sse, cevent, old_child, this);
}
result = DoProcessEvent (cevent, out args);
return result;
}