DebuggerScriptResultList RunFunction(string name, DebuggerScriptResultList input, List <string> args, EnvDTE.Debugger debugger) { ThreadHelper.ThrowIfNotOnUIThread(); foreach (Function function in Functions) { if (function.Name == name && function.Args.Count == args.Count) { DebuggerScriptRunner functionRunner = new DebuggerScriptRunner(); functionRunner.AddFunctions(Functions); functionRunner.AddResult("$this", input); for (int i = 0; i < args.Count; ++i) { if (args[i].StartsWith("$")) { functionRunner.AddResult(function.Args[i], SavedResults[args[i]]); } else { DebuggerScriptResultList argResult = new DebuggerScriptResultList(); argResult.AddLiteral(args[i], args[i]); functionRunner.AddResult(function.Args[i], argResult); } } return(functionRunner.Execute(function.Script, debugger)); } } throw new Exception("No matching function: " + name); }