void ITraceCollector.Run(DataStack dataStack, IFormalCodeItem codeBase) { var beforeSize = dataStack.Size; var index = Steps.Count; var item = new Step(codeBase, dataStack, index, Frames.ToArray()); Steps.Add(item); AssumeStepsForCode(item.CodeBase, index); try { codeBase.Visit(dataStack); } catch(Exception exception) { item.Exception = exception; dataStack.Size = beforeSize + codeBase.Size; } item.AfterStack = dataStack; }
void SubVisit(IFormalCodeItem codeBase) { if(TraceCollector == null) codeBase.Visit(this); else TraceCollector.Run(this, codeBase); }