Null constant cannot be used for ref/out variables
[mono.git] / mcs / tools / csharp / repl.cs
index c1194c131d9e1436960651164e6f27c6964aeb57..5137fcb4c4ad768a9b2ea9c3c8b468a0eb432df0 100644 (file)
@@ -28,7 +28,6 @@ using System.Net.Sockets;
 using System.Collections.Generic;
 
 using Mono.CSharp;
-using Mono.Attach;
 
 namespace Mono {
 
@@ -36,23 +35,32 @@ namespace Mono {
                
                static int Main (string [] args)
                {
+#if !ON_DOTNET
                        if (args.Length > 0 && args [0] == "--attach") {
                                new ClientCSharpShell (Int32.Parse (args [1])).Run (null);
                                return 0;
-                       } else if (args.Length > 0 && args [0].StartsWith ("--agent:")) {
+                       }
+
+                       if (args.Length > 0 && args [0].StartsWith ("--agent:")) {
                                new CSharpAgent (args [0]);
                                return 0;
-                       } else {
-                               string [] startup_files;
-                               try {
-                                       startup_files = Evaluator.InitAndGetStartupFiles (args);
-                                       Evaluator.InteractiveBaseClass = typeof (InteractiveBaseShell);
-                               } catch {
-                                       return 1;
-                               }
+                       }
+#endif
+                       return Startup(args);
+               }
 
-                               return new CSharpShell ().Run (startup_files);
+               static int Startup (string[] args)
+               {
+                       string[] startup_files;
+                       try {
+                               startup_files = Evaluator.InitAndGetStartupFiles (args);
+                               Evaluator.DescribeTypeExpressions = true;
+                               Evaluator.SetInteractiveBaseClass (typeof (InteractiveBaseShell));
+                       } catch {
+                               return 1;
                        }
+
+                       return new CSharpShell ().Run (startup_files);
                }
        }
 
@@ -87,7 +95,7 @@ namespace Mono {
        }
        
        public class CSharpShell {
-               static bool isatty = true;
+               static bool isatty = true, is_unix = false;
                string [] startup_files;
                
                Mono.Terminal.LineEditor editor;
@@ -103,8 +111,11 @@ namespace Mono {
                
                void SetupConsole ()
                {
-                       string term = Environment.GetEnvironmentVariable ("TERM");
-                       dumb = term == "dumb" || term == null || isatty == false;
+                       if (is_unix){
+                               string term = Environment.GetEnvironmentVariable ("TERM");
+                               dumb = term == "dumb" || term == null || isatty == false;
+                       } else
+                               dumb = false;
                        
                        editor = new Mono.Terminal.LineEditor ("csharp", 300);
                        InteractiveBaseShell.Editor = editor;
@@ -164,13 +175,24 @@ namespace Mono {
 
                void InitTerminal ()
                {
-                       isatty = UnixUtils.isatty (0) && UnixUtils.isatty (1);
+#if ON_DOTNET
+                       is_unix = false;
+                       isatty = true;
+#else
+                       int p = (int) Environment.OSVersion.Platform;
+                       is_unix = (p == 4) || (p == 128);
+
+                       if (is_unix)
+                               isatty = UnixUtils.isatty (0) && UnixUtils.isatty (1);
+                       else
+                               isatty = true;
+#endif
 
                        // Work around, since Console is not accounting for
                        // cursor position when writing to Stderr.  It also
                        // has the undesirable side effect of making
                        // errors plain, with no coloring.
-                       Report.Stderr = Console.Out;
+//                     Report.Stderr = Console.Out;
                        SetupConsole ();
 
                        if (isatty)
@@ -242,7 +264,7 @@ namespace Mono {
 
                public int ReadEvalPrintLoop ()
                {
-                       if (startup_files.Length == 0)
+                       if (startup_files != null && startup_files.Length == 0)
                                InitTerminal ();
 
                        InitializeUsing ();
@@ -406,6 +428,7 @@ namespace Mono {
                
        }
 
+#if !ON_DOTNET
        //
        // A shell connected to a CSharpAgent running in a remote process.
        //  - maybe add 'class_name' and 'method_name' arguments to LoadAgent.
@@ -428,7 +451,7 @@ namespace Mono {
                                                          ((IPEndPoint)listener.Server.LocalEndPoint).Port,
                                                          ((IPEndPoint)interrupt_listener.Server.LocalEndPoint).Port);
        
-                       VirtualMachine vm = new VirtualMachine (pid);
+                       var vm = new Attach.VirtualMachine (pid);
                        vm.Attach (agent_assembly, agent_arg);
        
                        /* Wait for the client to connect */
@@ -618,7 +641,7 @@ namespace Mono {
                                try {
                                        string error_string;
                                        StringWriter error_output = new StringWriter ();
-                                       Report.Stderr = error_output;
+//                                     Report.Stderr = error_output;
                                        
                                        string line = s.GetString ();
        
@@ -667,6 +690,21 @@ namespace Mono {
                        }
                }
        }
+
+       public class UnixUtils {
+               [System.Runtime.InteropServices.DllImport ("libc", EntryPoint="isatty")]
+               extern static int _isatty (int fd);
+                       
+               public static bool isatty (int fd)
+               {
+                       try {
+                               return _isatty (fd) == 1;
+                       } catch {
+                               return false;
+                       }
+               }
+       }
+#endif
 }
        
 namespace Mono.Management
@@ -676,4 +714,3 @@ namespace Mono.Management
        }
 }
 
-