/// <summary>
 /// Check for recursion, and add the rule to the list of rules that have been used
 /// </summary>
 /// <param name="rule"></param>
 /// <param name="tokens"></param>
 /// <returns>True when the rule with the same tokens list is found in the list</returns>
 internal bool HasRecursion(PPRule rule, IList <XSharpToken> tokens)
 {
     // check to see if this is already there
     if (_list.Count == _maxDepth)
     {
         _pp.Error(tokens[0], ErrorCode.ERR_PreProcessorRecursiveRule, rule.Name);
         return(true);
     }
     foreach (var item in _list)
     {
         if (item.isDuplicate(rule, tokens))
         {
             _pp.Error(tokens[0], ErrorCode.ERR_PreProcessorRecursiveRule, rule.Name);
             return(true);
         }
     }
     _list.Add(new PPUsedRule(rule, tokens));
     return(false);
 }