private static GreenNode.NodeFlags GetNodeFlags(SyntaxFactoryContext context) { var flags = SyntaxNodeCache.GetDefaultNodeFlags(); if (context.IsInAsync) { flags |= GreenNode.NodeFlags.FactoryContextIsInAsync; } if (context.IsInQuery) { flags |= GreenNode.NodeFlags.FactoryContextIsInQuery; } return(flags); }
internal static XmlNameSyntax.Green XmlName(XmlPrefixSyntax.Green prefix, XmlNameTokenSyntax.Green localName) { int hash; var cached = SyntaxNodeCache.TryGetNode(SyntaxKind.XmlName, prefix, localName, out hash); if (cached != null) { return((XmlNameSyntax.Green)cached); } var result = new XmlNameSyntax.Green(prefix, localName); if (hash >= 0) { SyntaxNodeCache.AddNode(result, hash); } return(result); }
internal static XmlPrefixSyntax.Green XmlPrefix(XmlNameTokenSyntax.Green prefixName, PunctuationSyntax.Green colon) { int hash; var cached = SyntaxNodeCache.TryGetNode(SyntaxKind.XmlPrefix, prefixName, colon, out hash); if (cached != null) { return((XmlPrefixSyntax.Green)cached); } var result = new XmlPrefixSyntax.Green(prefixName, colon); if (hash >= 0) { SyntaxNodeCache.AddNode(result, hash); } return(result); }
internal static WithTwoChildren List(GreenNode child0, GreenNode child1) { LorettaDebug.Assert(child0 != null); LorettaDebug.Assert(child1 != null); GreenNode?cached = SyntaxNodeCache.TryGetNode(ListKind, child0, child1, out var hash); if (cached != null) { return((WithTwoChildren)cached); } var result = new WithTwoChildren(child0, child1); if (hash >= 0) { SyntaxNodeCache.AddNode(result, hash); } return(result); }
public static GreenNode?TryGetNode(int kind, GreenNode child1, out int hash) => SyntaxNodeCache.TryGetNode(kind, child1, out hash);
internal static GreenNode TryGetNode(int kind, GreenNode child1, SyntaxFactoryContext context, out int hash) { return(SyntaxNodeCache.TryGetNode(kind, child1, GetNodeFlags(context), out hash)); }