private void addrule(string key, PPRule rule) { PPRules list; if (_rules.ContainsKey(key)) { list = _rules[key]; } else { list = new PPRules(key); _rules.Add(key, list); } list.Insert(0, rule); }
internal bool isDuplicate(PPRule rule, IList <XSharpToken> tokens) { if (_rule == rule && _tokens.Count == tokens.Count) { for (int i = 0; i < tokens.Count; i++) { var t1 = tokens[i]; var t2 = _tokens[i]; if (t1.Text != t2.Text) { return(false); } } return(true); } return(false); }
internal void Add(PPRule rule) { // find element that matches the first token and insert at the front of the list // so rules defined later override rules defined first if (rule.hasMultiKeys) { foreach (var key in rule.Keys) { addrule(key, rule); } } else { string key = rule.LookupKey; addrule(key, rule); } }
internal void Add(PPRule rule) { // find element that matches the first token and insert at the front of the list // so rules defined later override rules defined first string key = rule.LookupKey; PPRules list; if (_rules.ContainsKey(key)) { list = _rules[key]; } else { list = new PPRules(key); _rules.Add(key, list); } list.Insert(0, rule); }
/// <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); }
internal PPUsedRule(PPRule rule, IList <XSharpToken> tokens) { _rule = rule; _tokens = tokens; }