Merge pull request #409 from Alkarex/patch-1
[mono.git] / mcs / class / Mono.Debugger.Soft / Mono.Debugger.Soft / StepEventRequest.cs
1 using System;
2 using System.Collections.Generic;
3
4 namespace Mono.Debugger.Soft
5 {
6         public enum StepDepth {
7                 Into = 0,
8                 Over = 1,
9                 Out = 2
10         }
11
12         public enum StepSize {
13                 Min = 0,
14                 Line = 1
15         }
16
17         /*
18          * Filter which kinds of methods to skip during single stepping
19          */
20         public enum StepFilter {
21                 None = 0,
22                 StaticCtor = 1,
23                 /* Since protocol version 2.20 */
24                 /* Methods which have the [DebuggerHidden] attribute */
25                 DebuggerHidden = 2,
26         }
27
28         public sealed class StepEventRequest : EventRequest {
29
30                 ThreadMirror step_thread;
31                 StepDepth depth;
32                 StepSize size;
33                 StepFilter filter;
34                 
35                 internal StepEventRequest (VirtualMachine vm, ThreadMirror thread) : base (vm, EventType.Step) {
36                         if (thread == null)
37                                 throw new ArgumentNullException ("thread");
38                         CheckMirror (vm, thread);
39                         this.step_thread = thread;
40                         Depth = StepDepth.Into;
41                         Size = StepSize.Min;
42                 }
43
44                 public override void Enable () {
45                         var mods = new List <Modifier> ();
46                         mods.Add (new StepModifier () { Thread = step_thread.Id, Depth = (int)Depth, Size = (int)Size, Filter = (int)Filter });
47                         SendReq (mods);
48                 }
49
50                 public new ThreadMirror Thread {
51                         get {
52                                 return step_thread;
53                         }
54                 }
55
56                 public StepDepth Depth {
57                         get {
58                                 return depth;
59                         }
60                         set {
61                                 CheckDisabled ();
62                                 depth = value;
63                         }
64                 }
65
66                 public StepSize Size {
67                         get {
68                                 return size;
69                         }
70                         set {
71                                 CheckDisabled ();
72                                 size = value;
73                         }
74                 }
75
76                 public StepFilter Filter {
77                         get {
78                                 return filter;
79                         }
80                         set {
81                                 CheckDisabled ();
82                                 filter = value;
83                         }
84                 }
85         }
86 }