.SH NAME
csharp, gsharp \- Interactive C# Shell
.SH SYNOPSIS
-.B csharp [--attach PID] [file1 [file2]]
+.B csharp [--attach PID] [-e EXPRESSION] [file1 [file2]]
[options]
.P
.B gsharp [file1 [file2]]
Console.WriteLine ("Hello, World");
.fi
.SH OPTIONS
+The commands accept all of the commands that are available to the
+.I mcs
+command, so you can reference assemblies, specify paths, language
+level and so on from the command line. In addition, the following
+command line options are supported:
.TP
.I "\-\-attach"
This is an advanced option and should only be used if you have a deep
it. For example, you might have to take the proper locks before
issuing any commands that might affect the target process state, or
sending commands through a method dispatcher.
+.TP
+.I "\-e" EXPRESSION
+This will evaluate the specified C# EXPRESSION and exit
.SH OPERATION
Once you launch the csharp command, you will be greeted with the
interactive prompt:
static readonly char[] argument_value_separator = new char [] { ';', ',' };
+#if !STATIC
+ // The expression to evaluate if -e is passed to the REPL
+ public static string EvalExpression;
+#endif
+
private Driver (CompilerContext ctx)
{
this.ctx = ctx;
RootContext.LoadDefaultReferences = false;
return true;
+#if !STATIC
+ case "-e":
+ if ((i + 1) >= args.Length){
+ Report.Error (
+ 1900,
+ "-e requires an expression");
+ Environment.Exit (1);
+ }
+ EvalExpression = args [++i];
+ return true;
+#endif
default:
if (arg.StartsWith ("--fatal")){
if (arg.StartsWith ("--fatal=")){
{
CSharpParser.yacc_verbose_flag = 0;
Location.Reset ();
-
+
if (!full_flag)
return;
}
}
+ public static string StartupEvalExpression {
+ get {
+ return Driver.EvalExpression;
+ }
+ }
+
static void Init ()
{
Init (new string [0]);
Evaluate ("using System; using System.Linq; using System.Collections.Generic; using System.Collections;");
}
- void InitTerminal ()
+ void InitTerminal (bool show_banner)
{
#if ON_DOTNET
is_unix = false;
// Report.Stderr = Console.Out;
SetupConsole ();
- if (isatty)
+ if (isatty && show_banner)
Console.WriteLine ("Mono C# Shell, type \"help;\" for help\n\nEnter statements below.");
}
public int ReadEvalPrintLoop ()
{
if (startup_files != null && startup_files.Length == 0)
- InitTerminal ();
+ InitTerminal (startup_files.Length == 0 && Evaluator.StartupEvalExpression == null);
InitializeUsing ();
//
// Interactive or startup files provided?
//
+ string startup_expression = Evaluator.StartupEvalExpression;
+
if (startup_files.Length != 0)
ExecuteSources (startup_files, false);
- else
+ else if (Evaluator.StartupEvalExpression != null){
+ ReadEvalPrintLoopWith (p => {
+ var ret = startup_expression;
+ startup_expression = null;
+ return ret;
+ });
+ } else
ReadEvalPrintLoopWith (GetLine);
return 0;