Skip to content
This repository was archived by the owner on Apr 14, 2022. It is now read-only.

Commit 9d47343

Browse files
author
MikhailArkhipov
committed
Properly generate parameter types
1 parent e1f0bee commit 9d47343

4 files changed

Lines changed: 10 additions & 31 deletions

File tree

src/Analysis/Engine/Impl/OverloadResult.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,15 +144,15 @@ class AccumulatedOverloadResult {
144144
private string _name;
145145
private string _doc;
146146
private string[] _pnames;
147-
private IAnalysisSet[] _ptypes;
147+
private string[] _ptypes;
148148
private string[] _pdefaults;
149149
private readonly HashSet<string> _rtypes;
150150

151151
public AccumulatedOverloadResult(string name, string documentation, int parameters) {
152152
_name = name;
153153
_doc = documentation;
154154
_pnames = new string[parameters];
155-
_ptypes = new IAnalysisSet[parameters];
155+
_ptypes = new string[parameters];
156156
_pdefaults = new string[parameters];
157157
ParameterCount = parameters;
158158
_rtypes = new HashSet<string>();
@@ -181,15 +181,15 @@ private string ChooseBest(string x, string y) {
181181

182182
private IAnalysisSet ChooseBest(IAnalysisSet x, IAnalysisSet y) {
183183
if (x == null || x.IsObjectOrUnknown()) {
184-
return (y == null) ? AnalysisSet.Empty : y;
184+
return (y == null || y.IsObjectOrUnknown()) ? AnalysisSet.Empty : y;
185185
}
186186
if (y == null || y.IsObjectOrUnknown()) {
187187
return AnalysisSet.Empty;
188188
}
189189
return x.Union(y);
190190
}
191191

192-
public bool TryAddOverload(string name, string documentation, string[] names, IAnalysisSet[] types, string[] defaults, IEnumerable<string> returnTypes) {
192+
public bool TryAddOverload(string name, string documentation, string[] names, string[] types, string[] defaults, IEnumerable<string> returnTypes) {
193193
if (names.Length != _pnames.Length || types.Length != _ptypes.Length) {
194194
return false;
195195
}
@@ -233,7 +233,7 @@ public OverloadResult ToOverloadResult() {
233233
parameters[i] = new ParameterResult(
234234
_pnames[i],
235235
null,
236-
(_ptypes[i] == null || _ptypes[i].IsObjectOrUnknown()) ? null : string.Join(", ", _ptypes[i].GetShortDescriptions()),
236+
_ptypes[i],
237237
false,
238238
null,
239239
_pdefaults[i]

src/Analysis/Engine/Impl/Values/BuiltinInstanceInfo.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,6 @@ internal override AnalysisValue UnionMergeTypes(AnalysisValue ns, int strength)
337337
if (ns is InstanceInfo ii) {
338338
return ClassInfo.UnionMergeTypes(ii.ClassInfo, strength).GetInstanceType().Single();
339339
}
340-
if (ns is ProtocolInfo pi) {
341-
return pi.UnionMergeTypes(this, strength).GetInstanceType().Single();
342-
}
343340
} else if (this is ConstantInfo || ns is ConstantInfo) {
344341
return ClassInfo.Instance;
345342
}

src/Analysis/Engine/Impl/Values/FunctionInfo.cs

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -466,27 +466,9 @@ public override IEnumerable<OverloadResult> Overloads {
466466

467467
foreach (var unit in units) {
468468
var names = FunctionDefinition.Parameters.Select(MakeParameterName).ToArray();
469-
470-
var vars = FunctionDefinition.Parameters.Select(p => {
471-
if (unit != AnalysisUnit && unit.InterpreterScope.TryGetVariable(p.Name, out var param)) {
472-
return param.Types.Resolve(unit);
473-
} else if (_analysisUnit._scope is FunctionScope fs) {
474-
return fs.GetParameter(p.Name)?.Types.Resolve(unit) ?? AnalysisSet.Empty;
475-
}
476-
return AnalysisSet.Empty;
477-
}).ToArray();
478-
469+
var vars = FunctionDefinition.Parameters.Select(p => GetAnnotation(ProjectState, p, DeclaringModule.Tree)).ToArray();
479470
var defaults = FunctionDefinition.Parameters.Select(p => GetDefaultValue(unit.State, p, DeclaringModule.Tree)).ToArray();
480-
481-
var rtypes = (unit.Scope as FunctionScope)?.ReturnValue
482-
.Types
483-
.Resolve(unit, new ResolutionContext {
484-
Caller = this,
485-
LazyCallArgs = new Lazy<ArgumentSet>(() => new ArgumentSet(vars, null, null, null)),
486-
ResolveFully = true
487-
}, out _)
488-
.GetShortDescriptions()
489-
.ToArray();
471+
var rtypes = GetReturnValue().GetShortDescriptions().ToArray();
490472

491473
bool needNewSet = true;
492474
foreach (var set in parameterSets) {

src/Analysis/Engine/Test/TypeAnnotationTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ def scale(scalar: float, vector: Vector) -> Vector:
391391
new_vector = scale(2.0, [1.0, -4.2, 5.4])
392392
",
393393
new[] {
394-
"scale:scale(scalar:float, vector:list[float, float, float], list[float]) -> list[float]"
394+
"scale:scale(scalar:float, vector:list[float]) -> list[float]"
395395
}
396396
);
397397
}
@@ -438,7 +438,7 @@ def get_user_name(user_id: UserId) -> str:
438438
user_b = get_user_name(-1)
439439
",
440440
new[] {
441-
"get_user_name:get_user_name(user_id:int, UserId) -> str"
441+
"get_user_name:get_user_name(user_id:UserId) -> str"
442442
}
443443
);
444444
}
@@ -543,7 +543,7 @@ def zero_all_vars(vars: Iterable[LoggedVar[int]]) -> None:
543543
var.set(0)
544544
",
545545
new[] {
546-
"LoggedVar.set:set(self:LoggedVar, new:int, T) -> None",
546+
"LoggedVar.set:set(self:LoggedVar, new:T) -> None",
547547
"zero_all_vars:zero_all_vars(vars:iterable[LoggedVar]) -> None"
548548
}
549549
);

0 commit comments

Comments
 (0)