Exemple #1
0
        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));
        }
Exemple #2
0
        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);
        }