public override IAnalysisSet GetIndex(Node node, AnalysisUnit unit, IAnalysisSet index) { double?constIndex = GetConstantIndex(index); if (constIndex != null && constIndex.Value < IndexTypes.Length) { // TODO: Warn if outside known index and no appends? IndexTypes[(int)constIndex.Value].AddDependency(unit); return(IndexTypes[(int)constIndex.Value].GetTypes(unit, ProjectEntry)); } _unionType.AddDependency(unit); return(_unionType.GetTypes(unit, ProjectEntry)); }
internal override IPropertyDescriptor GetProperty(Node node, AnalysisUnit unit, string name) { EnsureDescriptors(); PropertyDescriptorValue desc; if (!_descriptors.TryGetValue(name, out desc)) { _descriptors[name] = desc = new PropertyDescriptorValue(ProjectEntry); _descriptorDependencies.EnqueueDependents(); } if (IsMutable(name)) { if (desc.Values == null) { desc.Values = new EphemeralVariableDef(); } desc.Values.AddDependency(unit); } if (_linkedValues != null) { foreach (var link in _linkedValues.GetTypes(unit, DeclaringModule)) { ExpandoValue expando = link.Value as ExpandoValue; if (expando._descriptors != null && expando._descriptors.ContainsKey(name)) { return(new MergedPropertyDescriptor( this, desc, name )); } } } return(desc); }