示例#1
0
 public static LNodeList WithSpliced(this LNodeList list, LNode node, Symbol listName = null)
 {
     if (node.Calls(listName ?? CodeSymbols.Splice))
     {
         return(list.AddRange(node.Args));
     }
     else
     {
         return(list.Add(node));
     }
 }
示例#2
0
        static bool MatchesPatternNested(LNode candidate, LNode pattern, ref MMap <Symbol, LNode> captures, ref LNodeList trivia)
        {
            LNodeList unmatchedAttrs;

            if (!MatchesPattern(candidate, pattern, ref captures, out unmatchedAttrs))
            {
                return(false);
            }
            if (unmatchedAttrs.Any(a => !a.IsTrivia))
            {
                return(false);
            }
            trivia.AddRange(unmatchedAttrs);
            return(true);
        }
示例#3
0
        /// <summary>Gets a new list with any %trailing attributes removed. Trailing
        /// trivia inside those attributes are returned in an `out` parameter.</summary>
        public static LNodeList WithoutTrailingTrivia(this LNodeList attrs, out LNodeList trailingTrivia)
        {
            trailingTrivia = LNodeList.Empty;
            var attrs2 = attrs.SmartWhere(attr => !attr.Calls(S.TriviaTrailing));

            if (attrs2 != attrs)
            {
                foreach (var attr in attrs)
                {
                    if (attr.Calls(S.TriviaTrailing))
                    {
                        trailingTrivia.AddRange(attr.Args);
                    }
                }
            }
            return(attrs2);
        }