예제 #1
0
 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);
 }
예제 #2
0
        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);
        }
예제 #3
0
        // 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;
        }
예제 #4
0
 public virtual IAstElement ProcessAfterChildren(TAstElement element, ProcessingContext context)
 {
     return(element);
 }