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)); } }
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); }
public void AddSend(Node node, AnalysisUnit unit, IAnalysisSet sendValue, bool enqueue = true) { Sends.AddTypes(unit, sendValue, enqueue, DeclaringModule); }
public void AddReturn(Node node, AnalysisUnit unit, IAnalysisSet returnValue, bool enqueue = true) { Returns.MakeUnionStrongerIfMoreThan(ProjectState.Limits.ReturnTypes, returnValue); Returns.AddTypes(unit, returnValue, enqueue, DeclaringModule); }
public void AddYield(Node node, AnalysisUnit unit, IAnalysisSet yieldValue, bool enqueue = true) { Yields.MakeUnionStrongerIfMoreThan(ProjectState.Limits.YieldTypes, yieldValue); Yields.AddTypes(unit, yieldValue, enqueue, DeclaringModule); }
public override void SetMember(Node node, AnalysisUnit unit, string name, IAnalysisSet value) { _values.AddTypes(unit, value); }