/// <summary> /// Execute script /// </summary> /// <param name="script">script to execute</param> /// <param name="args">script parameters</param> /// <param name="isolation">isolation</param> /// <returns>script return value</returns> public object ExecuteScript(Script script, IEnumerable <string> args, CallIsolation isolation) { string location = script.Location; if (!string.IsNullOrEmpty(script.Id)) { location += "#" + script.Id; } WriteVerbose(string.Format("Context> Executing script {0} with isolation {1} ", location, isolation)); Vars snapshot = null; if (isolation != CallIsolation.None) { snapshot = new Vars(this); } try { // Clear vars if (isolation == CallIsolation.High) { base.Clear(); } // Print usage object ret = RunOnStack(ScriptOperation.ParsingArguments, script, delegate { script.ParseArguments(args); if (script.Usage.ShouldDisplayUsage(args, this)) { Write(OutputType.Out, GetAutoUsage(script, -1)); return(script.Usage.ExitCode); } return(null); }); if (ret == null) { ret = RunOnStack(ScriptOperation.Executing, script, script.ExecuteScript); } return(ReturnValue.Unwrap(ret)); } finally { if (snapshot != null) { base.Clear(); AddRange(snapshot); } } }
public object ExecuteMember(CallIsolation isolation, string name, object[] par) { IScriptAction f = Methods.Items.Find(delegate(IScriptAction x) { return(x.Id == name); }); if (f == null) { throw new ParsingException("Cannot find method " + name); } List <CallParam> cp = new List <CallParam>(); if (par != null) { foreach (var o in par) { cp.Add(new CallParam(null, o, TransformRules.None)); } } return(Context.ExecuteAction(f, cp, isolation)); }
public object ExecuteMember(CallIsolation isolation, string name, object[] par) { IScriptAction f=Methods.Items.Find(delegate(IScriptAction x) { return x.Id == name; }); if (f == null) throw new ParsingException("Cannot find method " + name); List<CallParam> cp=new List<CallParam>(); if (par!=null) foreach (var o in par) cp.Add(new CallParam(null, o,TransformRules.None)); return Context.ExecuteAction(f, cp, isolation); }
/// <summary> /// Execute script action /// </summary> /// <param name="action">action to execute</param> /// <param name="args">list of parameters, in case the action is Call</param> /// <param name="isolation">isolation</param> /// <returns>action result</returns> public object ExecuteAction(IScriptAction action, IEnumerable <CallParam> args, CallIsolation isolation) { Vars snapshot = null; if (isolation != CallIsolation.None) { snapshot = new Vars(this); } try { // Clear vars if (isolation == CallIsolation.High) { base.Clear(); } return(RunOnStack(ScriptOperation.Executing, action, delegate { Sub sub = action as Sub; if (sub != null) { return sub.ExecuteSub(args); } return action.Execute(); })); } finally { if (snapshot != null) { base.Clear(); AddRange(snapshot); } } }