/// <summary> /// /// </summary> /// <param name="program"></param> /// <param name="target"></param> /// <param name="erd"></param> /// only used this to report error, local errors which are genereaed during searching should not use this /// <param name="r"></param> /// <returns></returns> public static MemberDecl FindAndApplyTactic(Program program, MemberDecl target, ErrorReporterDelegate erd, Resolver r = null) { Contract.Requires(program != null); Contract.Requires(target != null); Stopwatch watch = new Stopwatch(); watch.Start(); _i = new Interpreter(program); _errorReporterDelegate = erd; var result = _i.EvalTacticApplication(target, r); var p = new Printer(Console.Out); p.PrintMembers(new List<MemberDecl>() { result }, 0, ""); watch.Stop(); Console.WriteLine("Time Used: " + watch.Elapsed.TotalSeconds.ToString()); _errorReporterDelegate = null; return result; }
public TacticReplaceStatus ExpandTactic(out string expandedTactic) { expandedTactic = null; if (!MemberReady) return TacticReplaceStatus.NoTactic; var status = TacticReplaceStatus.Success; var evaluatedMember = Tacny.Interpreter.FindAndApplyTactic(_program, _member, errorInfo => { status = TacticReplaceStatus.TranslatorFail; }, _unresolvedProgram); if (evaluatedMember == null || status != TacticReplaceStatus.Success) return TacticReplaceStatus.TranslatorFail; var sr = new StringWriter(); var printer = new Printer(sr); printer.PrintMembers(new List<MemberDecl> { evaluatedMember }, 0, _program.FullName); expandedTactic = Util.StripExtraContentFromExpanded(sr.ToString()); return !string.IsNullOrEmpty(expandedTactic) ? TacticReplaceStatus.Success : TacticReplaceStatus.NoTactic; }