Skip to content

Commit 8328591

Browse files
committed
#167 - ещё один фикс про порядок
1 parent f7a122d commit 8328591

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

src/Application/HydraScript.Application.StaticAnalysis/IAmbiguousInvocationStorage.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ public interface IAmbiguousInvocationStorage
77
void WriteCandidate(FunctionSymbolId invocation, FunctionSymbolId candidate);
88

99
void CheckCandidatesAndThrow(string segment, FunctionSymbolId invocation);
10+
11+
void Clear(FunctionSymbolId invocation);
1012
}

src/Application/HydraScript.Application.StaticAnalysis/Impl/AmbiguousInvocationStorage.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ public void CheckCandidatesAndThrow(string segment, FunctionSymbolId invocation)
2020
if (candidates.Count > 0)
2121
throw new AmbiguousInvocation(segment, candidates);
2222
}
23+
24+
public void Clear(FunctionSymbolId invocation) => _invocations.Remove(invocation);
2325
}

src/Application/HydraScript.Application.StaticAnalysis/Visitors/DeclarationVisitor.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,13 @@ public VisitUnit Visit(FunctionDeclaration visitable)
7474
var indexOfFirstDefaultArgument = visitable.Arguments
7575
.Select((x, i) => new { Argument = x, Index = i })
7676
.FirstOrDefault(pair => pair.Argument is DefaultValueArgument)?.Index ?? -1;
77-
for (var i = indexOfFirstDefaultArgument; i < visitable.Arguments.Count; i++)
78-
{
79-
if (i is -1) break;
80-
if (visitable.Arguments[i] is not DefaultValueArgument)
81-
throw new NamedArgumentAfterDefaultValueArgument(
82-
visitable.Segment,
83-
function: visitable.Name,
84-
visitable.Arguments[i]);
85-
}
8677

8778
var parameters = visitable.Arguments.Select(x =>
8879
new VariableSymbol(
8980
x.Name,
9081
x.TypeValue.Accept(_typeBuilder))).ToList();
9182
var functionSymbolId = new FunctionSymbolId(visitable.Name, parameters.Select(x => x.Type));
83+
_ambiguousInvocations.Clear(functionSymbolId);
9284
visitable.ComputedFunctionAddress = functionSymbolId.ToString();
9385
var functionSymbol = new FunctionSymbol(
9486
visitable.Name,
@@ -127,6 +119,12 @@ public VisitUnit Visit(FunctionDeclaration visitable)
127119
for (var i = indexOfFirstDefaultArgument; i < visitable.Arguments.Count; i++)
128120
{
129121
if (i is -1) break;
122+
if (visitable.Arguments[i] is not DefaultValueArgument)
123+
throw new NamedArgumentAfterDefaultValueArgument(
124+
visitable.Segment,
125+
function: visitable.Name,
126+
visitable.Arguments[i]);
127+
130128
var overload = new FunctionSymbolId(visitable.Name, parameters[..i].Select(x => x.Type));
131129
var existing = parentTable.FindSymbol(overload);
132130
parentTable.AddSymbol(functionSymbol, overload);

0 commit comments

Comments
 (0)