Mono.Debugger.Backend.SingleSteppingEngine.OperationMonoTrampoline.DoProcessEvent C# (CSharp) Method

DoProcessEvent() protected method

protected DoProcessEvent ( Inferior cevent, TargetEventArgs &args ) : EventResult
cevent Inferior
args TargetEventArgs
return EventResult
            protected override EventResult DoProcessEvent(Inferior.ChildEvent cevent,
							       out TargetEventArgs args)
            {
                if ((cevent.Type == Inferior.ChildEventType.CHILD_NOTIFICATION) &&
                ((NotificationType) cevent.Argument == NotificationType.Trampoline)) {
                TargetAddress info = new TargetAddress (
                    inferior.AddressDomain, cevent.Data1);

                TargetReader reader = new TargetReader (inferior.ReadMemory (info, 3 * inferior.TargetAddressSize));
                TargetAddress trampoline = reader.ReadAddress ();
                TargetAddress method = reader.ReadAddress ();
                TargetAddress code = reader.ReadAddress ();

                if ((trampoline.IsNull) || (trampoline != CallSite.Address + CallSite.InstructionSize)) {
                    args = null;
                    sse.do_continue ();
                    return EventResult.Running;
                }

                args = null;
                compiled = true;
                TrampolineCompiled (method, code);
                return EventResult.Running;
                } else if ((cevent.Type == Inferior.ChildEventType.CHILD_NOTIFICATION) &&
                   ((NotificationType) cevent.Argument == NotificationType.OldTrampoline)) {
                TargetAddress method = new TargetAddress (
                    inferior.AddressDomain, cevent.Data1);
                TargetAddress code = new TargetAddress (
                    inferior.AddressDomain, cevent.Data2);

                args = null;
                compiled = true;
                TrampolineCompiled (method, code);
                return EventResult.Running;
                }

                args = null;
                if (!compiled) {
                sse.disable_extended_notification (NotificationType.Trampoline);
                return EventResult.Completed;
                } else
                return EventResult.ResumeOperation;
            }