提交 d8520bf7 编写于 作者: M Miguel de Icaza

[repl] Add support for -e EXPRESSION to the csharp command

上级 cd6a5848
......@@ -6,7 +6,7 @@
.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]]
......@@ -40,6 +40,11 @@ your C# source code look like this:
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
......@@ -52,6 +57,9 @@ special measures to avoid crashing the target application while using
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:
......
......@@ -42,6 +42,11 @@ namespace Mono.CSharp
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;
......@@ -748,6 +753,17 @@ namespace Mono.CSharp
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=")){
......@@ -1646,7 +1662,7 @@ namespace Mono.CSharp
{
CSharpParser.yacc_verbose_flag = 0;
Location.Reset ();
if (!full_flag)
return;
......
......@@ -148,6 +148,12 @@ namespace Mono.CSharp
}
}
public static string StartupEvalExpression {
get {
return Driver.EvalExpression;
}
}
static void Init ()
{
Init (new string [0]);
......
......@@ -173,7 +173,7 @@ namespace Mono {
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;
......@@ -195,7 +195,7 @@ namespace Mono {
// Report.Stderr = Console.Out;
SetupConsole ();
if (isatty)
if (isatty && show_banner)
Console.WriteLine ("Mono C# Shell, type \"help;\" for help\n\nEnter statements below.");
}
......@@ -265,7 +265,7 @@ namespace Mono {
public int ReadEvalPrintLoop ()
{
if (startup_files != null && startup_files.Length == 0)
InitTerminal ();
InitTerminal (startup_files.Length == 0 && Evaluator.StartupEvalExpression == null);
InitializeUsing ();
......@@ -274,9 +274,17 @@ namespace Mono {
//
// 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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册