public IAstElement Process(IAstElement element, ISet<ProcessingStage> stages) { var context = new ProcessingContext(); foreach (var source in topLevelNameSources) { context.Scope.Add(source); } var steps = this.steps.Where(s => stages.Contains(s.Stage)).ToArray(); return Process(element, context, steps); }
public IAstElement Process(IAstElement element, ProcessingOptions options = null) { options = options ?? new ProcessingOptions(); var context = new ProcessingContext(options); foreach (var source in topLevelNameSources) { context.Scope.Add(source); } var steps = this.allSteps.Where(s => options.Stages.Contains(s.Stage)).ToArray(); return Process(element, context, steps); }
// ReSharper disable LoopCanBeConvertedToQuery private IAstElement Process(IAstElement element, ProcessingContext context, IProcessingStep[] steps) { foreach (var step in steps) { element = step.ProcessBeforeChildren(element, context); } context.ElementStack.Push(element); element.TransformChildren(c => Process(c, context, steps)); context.ElementStack.Pop(); foreach (var step in steps) { element = step.ProcessAfterChildren(element, context); } return element; }
public virtual IAstElement ProcessAfterChildren(TAstElement element, ProcessingContext context) { return(element); }