Revert "Merge branch 'master' of https://github.com/mono/mono"
[mono.git] / mcs / class / Mono.Debugger.Soft / Mono.Debugger.Soft / Connection.cs
index 712953b29d530ee0e03a3c4b15f6c3dba644dc53..7b69efb22b8ff5e5564f87e1932dad310f1903ee 100644 (file)
@@ -93,6 +93,7 @@ namespace Mono.Debugger.Soft
                public long catch_type_id;
        }
 
+       [Flags]
        enum ExceptionClauseFlags {
                None = 0x0,
                Filter = 0x1,
@@ -149,6 +150,7 @@ namespace Mono.Debugger.Soft
                VALUE_TYPE_ID_TYPE = 0xf1
        }
 
+       [Flags]
        enum InvokeFlags {
                NONE = 0x0,
                DISABLE_BREAKPOINTS = 0x1,
@@ -212,6 +214,12 @@ namespace Mono.Debugger.Soft
                public long Assembly;
        }               
 
+       class FieldMirrorInfo {
+               public string Name;
+               public long Parent, TypeId;
+               public int Attrs;
+       }
+
        enum TokenType {
                STRING = 0,
                TYPE = 1,
@@ -220,6 +228,7 @@ namespace Mono.Debugger.Soft
                UNKNOWN = 4
        }
 
+       [Flags]
        enum StackFrameFlags {
                NONE = 0,
                DEBUGGER_INVOKE = 1,
@@ -345,6 +354,10 @@ namespace Mono.Debugger.Soft
                        get; set;
                }
 
+               public int ExitCode {
+                       get; set;
+               }
+
                public EventInfo (EventType type, int req_id) {
                        EventType = type;
                        ReqId = req_id;
@@ -398,7 +411,7 @@ namespace Mono.Debugger.Soft
                 * with newer runtimes, and vice versa.
                 */
                internal const int MAJOR_VERSION = 2;
-               internal const int MINOR_VERSION = 26;
+               internal const int MINOR_VERSION = 29;
 
                enum WPSuspendPolicy {
                        NONE = 0,
@@ -419,6 +432,7 @@ namespace Mono.Debugger.Soft
                        METHOD = 22,
                        TYPE = 23,
                        MODULE = 24,
+                       FIELD = 25,
                        EVENT = 64
                }
 
@@ -481,7 +495,8 @@ namespace Mono.Debugger.Soft
                        /* FIXME: Merge into GET_INFO when the major protocol version is increased */
                        GET_ID = 5,
                        /* Ditto */
-                       GET_TID = 6
+                       GET_TID = 6,
+                       SET_IP = 7
                }
 
                enum CmdEventRequest {
@@ -549,6 +564,11 @@ namespace Mono.Debugger.Soft
                        IS_INITIALIZED = 18
                }
 
+               enum CmdField {
+                       GET_INFO = 1
+               }
+
+               [Flags]
                enum BindingFlagsExtensions {
                        BINDING_FLAGS_IGNORE_CASE = 0x70000000,
                }
@@ -1221,82 +1241,71 @@ namespace Mono.Debugger.Soft
 
                                                        EventType etype = (EventType)kind;
 
+                                                       long thread_id = r.ReadId ();
                                                        if (kind == EventKind.VM_START) {
-                                                               long thread_id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id };
                                                                //EventHandler.VMStart (req_id, thread_id, null);
                                                        } else if (kind == EventKind.VM_DEATH) {
+                                                               int exit_code = 0;
+                                                               if (Version.AtLeast (2, 27))
+                                                                       exit_code = r.ReadInt ();
                                                                //EventHandler.VMDeath (req_id, 0, null);
-                                                               events [i] = new EventInfo (etype, req_id) { };
+                                                               events [i] = new EventInfo (etype, req_id) { ExitCode = exit_code };
                                                        } else if (kind == EventKind.THREAD_START) {
-                                                               long thread_id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = thread_id };
                                                                //EventHandler.ThreadStart (req_id, thread_id, thread_id);
                                                        } else if (kind == EventKind.THREAD_DEATH) {
-                                                               long thread_id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = thread_id };
                                                                //EventHandler.ThreadDeath (req_id, thread_id, thread_id);
                                                        } else if (kind == EventKind.ASSEMBLY_LOAD) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.AssemblyLoad (req_id, thread_id, id);
                                                        } else if (kind == EventKind.ASSEMBLY_UNLOAD) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.AssemblyUnload (req_id, thread_id, id);
                                                        } else if (kind == EventKind.TYPE_LOAD) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.TypeLoad (req_id, thread_id, id);
                                                        } else if (kind == EventKind.METHOD_ENTRY) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.MethodEntry (req_id, thread_id, id);
                                                        } else if (kind == EventKind.METHOD_EXIT) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.MethodExit (req_id, thread_id, id);
                                                        } else if (kind == EventKind.BREAKPOINT) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                long loc = r.ReadLong ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc };
                                                                //EventHandler.Breakpoint (req_id, thread_id, id, loc);
                                                        } else if (kind == EventKind.STEP) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                long loc = r.ReadLong ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc };
                                                                //EventHandler.Step (req_id, thread_id, id, loc);
                                                        } else if (kind == EventKind.EXCEPTION) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                long loc = 0; // FIXME
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc };
                                                                //EventHandler.Exception (req_id, thread_id, id, loc);
                                                        } else if (kind == EventKind.APPDOMAIN_CREATE) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.AppDomainCreate (req_id, thread_id, id);
                                                        } else if (kind == EventKind.APPDOMAIN_UNLOAD) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = r.ReadId ();
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id };
                                                                //EventHandler.AppDomainUnload (req_id, thread_id, id);
                                                        } else if (kind == EventKind.USER_BREAK) {
-                                                               long thread_id = r.ReadId ();
                                                                long id = 0;
                                                                long loc = 0;
                                                                events [i] = new EventInfo (etype, req_id) { ThreadId = thread_id, Id = id, Location = loc };
                                                                //EventHandler.Exception (req_id, thread_id, id, loc);
                                                        } else if (kind == EventKind.USER_LOG) {
-                                                               long thread_id = r.ReadId ();
                                                                int level = r.ReadInt ();
                                                                string category = r.ReadString ();
                                                                string message = r.ReadString ();
@@ -1360,6 +1369,9 @@ namespace Mono.Debugger.Soft
                        case CommandSet.MODULE:
                                cmd = ((CmdModule)command).ToString ();
                                break;
+                       case CommandSet.FIELD:
+                               cmd = ((CmdField)command).ToString ();
+                               break;
                        case CommandSet.EVENT:
                                cmd = ((CmdEvent)command).ToString ();
                                break;
@@ -1929,6 +1941,10 @@ namespace Mono.Debugger.Soft
                        return SendReceive (CommandSet.THREAD, (int)CmdThread.GET_TID, new PacketWriter ().WriteId (id)).ReadLong ();
                }
 
+               internal void Thread_SetIP (long id, long method_id, long il_offset) {
+                       SendReceive (CommandSet.THREAD, (int)CmdThread.SET_IP, new PacketWriter ().WriteId (id).WriteId (method_id).WriteLong (il_offset));
+               }
+
                /*
                 * MODULE
                 */
@@ -2138,6 +2154,16 @@ namespace Mono.Debugger.Soft
                        return r.ReadInt () == 1;
                }
 
+               /*
+                * FIELD
+                */
+
+               internal FieldMirrorInfo Field_GetInfo (long id) {
+                       PacketReader r = SendReceive (CommandSet.FIELD, (int)CmdField.GET_INFO, new PacketWriter ().WriteId (id));
+                       FieldMirrorInfo info = new FieldMirrorInfo { Name = r.ReadString (), Parent = r.ReadId (), TypeId = r.ReadId (), Attrs = r.ReadInt () };
+                       return info;
+               }
+
                /*
                 * EVENTS
                 */