示例#1
0
 internal SyntaxToken(Roslyn.Compilers.CSharp.SyntaxNode parent, Roslyn.Compilers.CSharp.InternalSyntax.SyntaxToken node, int position, int index)
 {
     this.position = position;
     this.parent   = parent;
     this.node     = node;
     this.index    = index;
 }
示例#2
0
 public Roslyn.Compilers.CSharp.SyntaxTrivia FindTrivia(int position, Func <Roslyn.Compilers.CSharp.SyntaxTrivia, bool> stepInto)
 {
     for (Roslyn.Compilers.CSharp.SyntaxNode node = this; node != null; node = node.Parent)
     {
         if (node.FullSpan.Contains(position))
         {
             return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset(node, position - node.position, stepInto));
         }
     }
     return(new Roslyn.Compilers.CSharp.SyntaxTrivia());
 }
示例#3
0
 private static void GetDirectives <TDirective>(Roslyn.Compilers.CSharp.SyntaxNode node, Func <TDirective, bool> filter, ref List <TDirective> directives) where TDirective : Roslyn.Compilers.CSharp.DirectiveSyntax
 {
     if (!node.HasDirectives)
     {
         return;
     }
     foreach (SyntaxNodeOrToken node1 in node.ChildNodesAndTokens())
     {
         if (node1.HasDirectives)
         {
             Roslyn.Compilers.CSharp.SyntaxNode.GetDirectives <TDirective>(node1, filter, ref directives);
         }
     }
 }
示例#4
0
 public bool EquivalentTo(Roslyn.Compilers.CSharp.SyntaxNode other)
 {
     if (this == other)
     {
         return(true);
     }
     if (other == null)
     {
         return(false);
     }
     else
     {
         return(this.Green.EquivalentTo(other.Green));
     }
 }
示例#5
0
 internal Roslyn.Compilers.CSharp.SyntaxNode GetRedOnly(ref Roslyn.Compilers.CSharp.SyntaxNode field, int slot)
 {
     Roslyn.Compilers.CSharp.SyntaxNode syntaxNode = field;
     if (syntaxNode == null)
     {
         Roslyn.Compilers.CSharp.InternalSyntax.SyntaxNode slot1 = this.Green.GetSlot(slot);
         if (slot1 != null && !slot1.IsToken)
         {
             int childPosition = this.GetChildPosition(slot);
             syntaxNode = slot1.ToRed(this, childPosition);
             if (Interlocked.CompareExchange <Roslyn.Compilers.CSharp.SyntaxNode>(ref field, syntaxNode, (Roslyn.Compilers.CSharp.SyntaxNode)null) != null)
             {
                 syntaxNode = field;
             }
         }
     }
     return(syntaxNode);
 }
示例#6
0
        internal virtual int GetChildPosition(int index)
        {
            int num = 0;

            while (index > 0)
            {
                --index;
                Roslyn.Compilers.CSharp.SyntaxNode cachedSlot = this.GetCachedSlot(index);
                if (cachedSlot != null)
                {
                    return(cachedSlot.End + num);
                }
                Roslyn.Compilers.CSharp.InternalSyntax.SyntaxNode slot = this.Green.GetSlot(index);
                if (slot != null)
                {
                    num += slot.FullWidth;
                }
            }
            return(this.position + num);
        }
示例#7
0
 internal AttributeSyntax(Roslyn.Compilers.CSharp.SyntaxNode parent, Roslyn.Compilers.CSharp.InternalSyntax.SyntaxNode green, int position)
     : base(parent, green, position)
 {
 }
示例#8
0
 internal static Roslyn.Compilers.CSharp.SyntaxTrivia FindTriviaByOffset(Roslyn.Compilers.CSharp.SyntaxNode node, int textOffset, Func <Roslyn.Compilers.CSharp.SyntaxTrivia, bool> stepInto = null)
 {
     if (textOffset >= 0)
     {
         foreach (SyntaxNodeOrToken syntaxNodeOrToken in node.ChildNodesAndTokens())
         {
             int fullWidth = syntaxNodeOrToken.FullWidth;
             if (textOffset < fullWidth)
             {
                 if (syntaxNodeOrToken.IsNode)
                 {
                     return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset(syntaxNodeOrToken.AsNode(), textOffset, stepInto));
                 }
                 if (syntaxNodeOrToken.IsToken)
                 {
                     Roslyn.Compilers.CSharp.SyntaxToken syntaxToken = syntaxNodeOrToken.AsToken();
                     int leadingWidth = syntaxToken.LeadingWidth;
                     if (textOffset < syntaxToken.LeadingWidth)
                     {
                         foreach (Roslyn.Compilers.CSharp.SyntaxTrivia syntaxTrivia in syntaxToken.LeadingTrivia)
                         {
                             if (textOffset < syntaxTrivia.FullWidth)
                             {
                                 if (syntaxTrivia.HasStructure && stepInto != null && stepInto(syntaxTrivia))
                                 {
                                     return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset((Roslyn.Compilers.CSharp.SyntaxNode)syntaxTrivia.GetStructure(), textOffset, stepInto));
                                 }
                                 else
                                 {
                                     return(syntaxTrivia);
                                 }
                             }
                             else
                             {
                                 textOffset -= syntaxTrivia.FullWidth;
                             }
                         }
                     }
                     else if (textOffset >= leadingWidth + syntaxToken.Width)
                     {
                         textOffset -= leadingWidth + syntaxToken.Width;
                         foreach (Roslyn.Compilers.CSharp.SyntaxTrivia syntaxTrivia in syntaxToken.TrailingTrivia)
                         {
                             if (textOffset < syntaxTrivia.FullWidth)
                             {
                                 if (syntaxTrivia.HasStructure && stepInto != null && stepInto(syntaxTrivia))
                                 {
                                     return(Roslyn.Compilers.CSharp.SyntaxNode.FindTriviaByOffset((Roslyn.Compilers.CSharp.SyntaxNode)syntaxTrivia.GetStructure(), textOffset, stepInto));
                                 }
                                 else
                                 {
                                     return(syntaxTrivia);
                                 }
                             }
                             else
                             {
                                 textOffset -= syntaxTrivia.FullWidth;
                             }
                         }
                     }
                     return(new Roslyn.Compilers.CSharp.SyntaxTrivia());
                 }
             }
             textOffset -= fullWidth;
         }
     }
     return(new Roslyn.Compilers.CSharp.SyntaxTrivia());
 }
示例#9
0
 internal SyntaxNode(Roslyn.Compilers.CSharp.SyntaxNode parent, Roslyn.Compilers.CSharp.InternalSyntax.SyntaxNode green, int position)
 {
     this.parent   = parent;
     this.Green    = green;
     this.position = position;
 }
 internal IdentifierNameSyntax(Roslyn.Compilers.CSharp.SyntaxNode parent, Roslyn.Compilers.CSharp.InternalSyntax.SyntaxNode green, int position)
     : base(parent, green, position)
 {
 }