Merge pull request #3800 from madewokherd/mingwbuild
[mono.git] / mcs / tools / csharp / repl.cs
index edd2cb248373b33449440d88937574c0fc01518a..567c766e6cb5092bce1e1803a64f8e78e1647eb7 100644 (file)
@@ -55,7 +55,7 @@ namespace Mono {
                        var startup_files = new string [settings.SourceFiles.Count];
                        int i = 0;
                        foreach (var source in settings.SourceFiles)
-                               startup_files [i++] = source.FullPathName;
+                               startup_files [i++] = source.OriginalFullPathName;
                        settings.SourceFiles.Clear ();
 
                        TextWriter agent_stderr = null;
@@ -197,7 +197,9 @@ namespace Mono {
                        } else
                                dumb = false;
                        
-                       editor = new Mono.Terminal.LineEditor ("csharp", 300);
+                       editor = new Mono.Terminal.LineEditor ("csharp", 300) {
+                               HeuristicsMode = "csharp"
+                       };
                        InteractiveBaseShell.Editor = editor;
 
                        editor.AutoCompleteEvent += delegate (string s, int pos){
@@ -399,9 +401,45 @@ namespace Mono {
                        output.Write (s);
                }
 
-               static string EscapeString (string s)
+               static void EscapeString (TextWriter output, string s)
                {
-                       return s.Replace ("\"", "\\\"");
+                       foreach (var c in s){
+                               if (c >= 32){
+                                       output.Write (c);
+                                       continue;
+                               }
+                               switch (c){
+                               case '\"':
+                                       output.Write ("\\\""); break;
+                               case '\a':
+                                       output.Write ("\\a"); break;
+                               case '\b':
+                                       output.Write ("\\b"); break;
+                               case '\n':
+                                       output.Write ("\n");
+                                       break;
+                               
+                               case '\v':
+                                       output.Write ("\\v");
+                                       break;
+                               
+                               case '\r':
+                                       output.Write ("\\r");
+                                       break;
+                               
+                               case '\f':
+                                       output.Write ("\\f");
+                                       break;
+                               
+                               case '\t':
+                                       output.Write ("\\t");
+                                       break;
+
+                               default:
+                                       output.Write ("\\x{0:x}", (int) c);
+                                       break;
+                               }
+                       }
                }
                
                static void EscapeChar (TextWriter output, char c)
@@ -410,7 +448,7 @@ namespace Mono {
                                output.Write ("'\\''");
                                return;
                        }
-                       if (c > 32){
+                       if (c >= 32){
                                output.Write ("'{0}'", c);
                                return;
                        }
@@ -444,7 +482,7 @@ namespace Mono {
                                break;
 
                        default:
-                               output.Write ("'\\x{0:x}", (int) c);
+                               output.Write ("'\\x{0:x}'", (int) c);
                                break;
                        }
                }
@@ -491,7 +529,9 @@ namespace Mono {
                                else
                                        p (output, "false");
                        } else if (result is string){
-                               p (output, String.Format ("\"{0}\"", EscapeString ((string)result)));
+                               p (output, "\"");
+                               EscapeString (output, (string)result);
+                               p (output, "\"");
                        } else if (result is IDictionary){
                                IDictionary dict = (IDictionary) result;
                                int top = dict.Count, count = 0;