Shovel.Compiler.Types.ParseTree.RunOnChildren C# (CSharp) Method

RunOnChildren() public method

public RunOnChildren ( ParseTree>.Func fn ) : void
fn ParseTree>.Func
return void
        public void RunOnChildren(Func<ParseTree, ParseTree> fn)
        {
            if (Children != null)
            {
                if (Children is ParseTree[])
                {
                    var arChildren = (ParseTree[])Children;
                    for (int i = 0; i < arChildren.Length; i++)
                    {
                        arChildren[i] = fn(arChildren[i]);
                    }
                }
                else if (Children is List<ParseTree>)
                {
                    var liChildren = (List<ParseTree>)Children;
                    for (int i = 0; i < liChildren.Count; i++)
                    {
                        liChildren[i] = fn(liChildren[i]);
                    }
                }
                else
                {
                    Children = Children.Select(fn).ToArray<ParseTree>();
                }
            }
        }

Usage Example

Ejemplo n.º 1
0
 private ParseTree RunWeaveMacro(ParseTree source)
 {
     if (IsWeave(source))
     {
         var leftSide = source.Children.ElementAt(1);
         var rightSide = source.Children.ElementAt(2);
         var count = new Utils.Wrapper<Int32>(0);
         ReplacePlaceholder(rightSide, leftSide, count);
         if (count.Item == 0)
         {
             RaiseErrorAt(
                 "No replacement in postfix call (->, $).",
                 source.StartPos, source.EndPos);
         }
         return RunWeaveMacro(rightSide);
     }
     else
     {
         source.RunOnChildren(RunWeaveMacro);
         return source;
     }
 }
All Usage Examples Of Shovel.Compiler.Types.ParseTree::RunOnChildren