Example #1
0
        internal override SequenceInfo MakeFromIndexes(Node node, ProjectEntry entry)
        {
            if (_tupleTypes != null)
            {
                return(new SequenceInfo(_tupleTypes.Select(t => {
                    var v = new VariableDef();
                    v.AddTypes(entry, t);
                    return v;
                }).ToArray(), this, node, entry));
            }

            if (_indexTypes.Length > 0)
            {
                var vals = _indexTypes.Zip(VariableDef.Generator, (t, v) => { v.AddTypes(entry, t, false, entry); return(v); }).ToArray();
                return(new SequenceInfo(vals, this, node, entry));
            }
            else
            {
                return(new SequenceInfo(VariableDef.EmptyArray, this, node, entry));
            }
        }
Example #2
0
 internal bool AddTypes(Node node, AnalysisUnit unit, IAnalysisSet key, IAnalysisSet value, bool enqueue = true)
 {
     if (_keysAndValues.AddTypes(unit, key, value, enqueue))
     {
         if (_keysVariable != null)
         {
             _keysVariable.MakeUnionStrongerIfMoreThan(ProjectState.Limits.DictKeyTypes, value);
             if (_keysVariable.AddTypes(unit, key, enqueue, DeclaringModule))
             {
                 if (_keysList != null)
                 {
                     _keysList.UnionType = null;
                 }
             }
         }
         if (_valuesVariable != null)
         {
             _valuesVariable.MakeUnionStrongerIfMoreThan(ProjectState.Limits.DictValueTypes, value);
             if (_valuesVariable.AddTypes(unit, value, enqueue, DeclaringModule))
             {
                 if (_valuesList != null)
                 {
                     _valuesList.UnionType = null;
                 }
             }
         }
         if (_keyValueTuple != null)
         {
             _keyValueTuple.IndexTypes[0].MakeUnionStrongerIfMoreThan(ProjectState.Limits.DictKeyTypes, key);
             _keyValueTuple.IndexTypes[1].MakeUnionStrongerIfMoreThan(ProjectState.Limits.DictValueTypes, value);
             _keyValueTuple.IndexTypes[0].AddTypes(unit, key, enqueue, DeclaringModule);
             _keyValueTuple.IndexTypes[1].AddTypes(unit, value, enqueue, DeclaringModule);
         }
         return(true);
     }
     return(false);
 }
Example #3
0
 public void AddSend(Node node, AnalysisUnit unit, IAnalysisSet sendValue, bool enqueue = true)
 {
     Sends.AddTypes(unit, sendValue, enqueue, DeclaringModule);
 }
Example #4
0
 public void AddReturn(Node node, AnalysisUnit unit, IAnalysisSet returnValue, bool enqueue = true)
 {
     Returns.MakeUnionStrongerIfMoreThan(ProjectState.Limits.ReturnTypes, returnValue);
     Returns.AddTypes(unit, returnValue, enqueue, DeclaringModule);
 }
Example #5
0
 public void AddYield(Node node, AnalysisUnit unit, IAnalysisSet yieldValue, bool enqueue = true)
 {
     Yields.MakeUnionStrongerIfMoreThan(ProjectState.Limits.YieldTypes, yieldValue);
     Yields.AddTypes(unit, yieldValue, enqueue, DeclaringModule);
 }
Example #6
0
 public override void SetMember(Node node, AnalysisUnit unit, string name, IAnalysisSet value)
 {
     _values.AddTypes(unit, value);
 }