public NameInfo Lookup(ErrorCollector collector, IEnumerable <string> names) { IEnumerator <string> enumerator = names.GetEnumerator(); if (!enumerator.MoveNext()) { throw new ArgumentOutOfRangeException("List of names cannot be empty."); } if (Children.ContainsKey(enumerator.Current)) { if (Children[enumerator.Current] == null) { collector.ReportForbiddenNameAccess(this, enumerator.Current); return(new JunkInfo()); } return(Children[enumerator.Current].Lookup(collector, enumerator)); } if (ForceBack) { Parent.Lookup(collector, names); } if (Parent != null && Parent.HasName(enumerator.Current)) { return(Lookback(enumerator.Current).Lookup(collector, enumerator)); } var info = new OpenNameInfo(this, enumerator.Current); Children[enumerator.Current] = info; return(info.Lookup(collector, enumerator)); }
public override void CreateChild(ErrorCollector collector, string name, string root, ref bool success) { if (ForceBack) { Source.CreateChild(collector, name, root, ref success); } if (Source.HasName(name)) { Children[name] = new CopyFromParentInfo(Environment, root + "." + name, Source.Lookup(collector, name, ref success), ForceBack); } else { Children[name] = new OpenNameInfo(Environment, root + "." + name); } }
public override void CreateChild(ErrorCollector collector, string name, string root, ref bool success) { Children[name] = new OpenNameInfo(Environment, root + "." + name); }
public NameInfo AddFreeName(string name) { return(Children[name] = new OpenNameInfo(this, name)); }