private void AddNodes(IEnumerable <Definition> nodes)
        {
            var pendings = new List <Definition>(nodes);
            int current  = pendings.Count;

            while (current != 0)
            {
                int previous = current;
                var parsed   = new List <Definition>();
                foreach (Definition node in pendings)
                {
                    IDefinition parent = Find(Definition.GetParent(node));
                    if (parent == null)
                    {
                        continue;
                    }

                    node.DetermineType(parent);
                    node.ParentDefinition = parent;
                    AddToTable(node);
                    parsed.Add(node);
                }

                foreach (Definition d in parsed)
                {
                    pendings.Remove(d);
                }

                current = pendings.Count;
                if (current == previous)
                {
                    break;
                }
            }
        }