/////////////////////////////////////////////////////////////////////// #region IExecute Members public override ReturnCode Execute( Interpreter interpreter, IClientData clientData, ArgumentList arguments, ref Result result ) { if (interpreter == null) { result = "invalid interpreter"; return(ReturnCode.Error); } if (arguments == null) { result = "invalid argument list"; return(ReturnCode.Error); } if (arguments.Count < 2) { result = String.Format( "wrong # args: should be \"{0} option ?arg ...?\"", this.Name); return(ReturnCode.Error); } string subCommand = arguments[1]; if (!String.Equals( subCommand, this.Name, StringOps.SystemStringComparisonType)) { result = ScriptOps.BadSubCommand( interpreter, null, null, subCommand, this, null, null); return(ReturnCode.Error); } // // NOTE: Evaluate the configured script command, maybe // adding all the local arguments, and return the // results verbatim. // string name = StringList.MakeList(this.Name); ICallFrame frame = interpreter.NewTrackingCallFrame(name, CallFrameFlags.Evaluate | CallFrameFlags.SubCommand); interpreter.PushAutomaticCallFrame(frame); ReturnCode code = interpreter.EvaluateScript( ScriptOps.GetArgumentsForExecute(this, scriptCommand, GetArgumentsForExecute(arguments), 0), 0, ref result); if (code == ReturnCode.Error) { Engine.AddErrorInformation(interpreter, result, String.Format("{0} (\"{1}\" body line {2})", Environment.NewLine, ScriptOps.GetNameForExecute( arguments[0], this), Interpreter.GetErrorLine( interpreter))); } // // NOTE: Pop the original call frame that we pushed above and // any intervening scope call frames that may be leftover // (i.e. they were not explicitly closed). // /* IGNORED */ interpreter.PopScopeCallFramesAndOneMore(); return(code); }