From 8798e27075eb46a3496a09db6c19dce91836b916 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 4 Oct 2018 14:09:39 -0700 Subject: [PATCH 1/3] Make tuples with different arguments different types --- src/Analysis/Engine/Impl/Values/Protocols.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Analysis/Engine/Impl/Values/Protocols.cs b/src/Analysis/Engine/Impl/Values/Protocols.cs index 8a095c638..ba4e6ca01 100644 --- a/src/Analysis/Engine/Impl/Values/Protocols.cs +++ b/src/Analysis/Engine/Impl/Values/Protocols.cs @@ -415,7 +415,7 @@ public override IAnalysisSet GetIndex(Node node, AnalysisUnit unit, IAnalysisSet return AnalysisSet.UnionAll(constants.Select(GetItem)); } - public override string Name => "tuple"; + public override string Name => "tuple[{0}]".FormatInvariant(string.Join(", ", _values.Select(v => v.GetShortDescriptions()))); public override IEnumerable> GetRichDescription() { if (_values.Any()) { From 6d4956fefbab0786af442a0bd5c2881654e90af9 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 4 Oct 2018 14:58:31 -0700 Subject: [PATCH 2/3] Cache name --- src/Analysis/Engine/Impl/Values/Protocols.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Analysis/Engine/Impl/Values/Protocols.cs b/src/Analysis/Engine/Impl/Values/Protocols.cs index ba4e6ca01..43ca5e3e9 100644 --- a/src/Analysis/Engine/Impl/Values/Protocols.cs +++ b/src/Analysis/Engine/Impl/Values/Protocols.cs @@ -385,10 +385,11 @@ protected override Protocol UnionMergeTypes(Protocol p) { } class TupleProtocol : IterableProtocol { - internal readonly IAnalysisSet[] _values; + private readonly IAnalysisSet[] _values; public TupleProtocol(ProtocolInfo self, IEnumerable values) : base(self, AnalysisSet.UnionAll(values)) { _values = values.Select(s => s.AsUnion(1)).ToArray(); + Name = "tuple[{0}]".FormatInvariant(string.Join(", ", _values.Select(v => v.GetShortDescriptions()))); } protected override void EnsureMembers(IDictionary members) { @@ -415,7 +416,7 @@ public override IAnalysisSet GetIndex(Node node, AnalysisUnit unit, IAnalysisSet return AnalysisSet.UnionAll(constants.Select(GetItem)); } - public override string Name => "tuple[{0}]".FormatInvariant(string.Join(", ", _values.Select(v => v.GetShortDescriptions()))); + public override string Name { get; } public override IEnumerable> GetRichDescription() { if (_values.Any()) { From 565e23e1db6f2eb8376abd1494ce6b4a695eef57 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 4 Oct 2018 16:41:41 -0700 Subject: [PATCH 3/3] Use qualified names --- src/Analysis/Engine/Impl/Values/Protocols.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Analysis/Engine/Impl/Values/Protocols.cs b/src/Analysis/Engine/Impl/Values/Protocols.cs index 43ca5e3e9..def71b7d7 100644 --- a/src/Analysis/Engine/Impl/Values/Protocols.cs +++ b/src/Analysis/Engine/Impl/Values/Protocols.cs @@ -389,7 +389,9 @@ class TupleProtocol : IterableProtocol { public TupleProtocol(ProtocolInfo self, IEnumerable values) : base(self, AnalysisSet.UnionAll(values)) { _values = values.Select(s => s.AsUnion(1)).ToArray(); - Name = "tuple[{0}]".FormatInvariant(string.Join(", ", _values.Select(v => v.GetShortDescriptions()))); + + var argTypes = _values.SelectMany(e => e.Select(v => v is IHasQualifiedName qn ? qn.FullyQualifiedName : v.ShortDescription)); + Name = "tuple[{0}]".FormatInvariant(string.Join(", ", argTypes)); } protected override void EnsureMembers(IDictionary members) {