Stack <Rule> CreateRuleStack() { var result = new Stack <Rule> (); if (mode == null) { return(result); } Rule rule = mode; result.Push(mode); foreach (Span span in spanStack.Reverse()) { Rule tmp = rule.GetRule(doc, span.Rule) ?? CurRule; result.Push(tmp); rule = tmp; } return(result); }