Skip to content

Commit 2608d84

Browse files
committed
#155 - specify overloads
1 parent 248052c commit 2608d84

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public void Save(FunctionSymbol symbol, FunctionDeclaration declaration)
1616
public FunctionDeclaration Get(FunctionSymbol symbol)
1717
{
1818
if (!_declarations.Remove(symbol.Id, out var declaration))
19-
throw new InvalidOperationException(message: "Cannot get function that has not been saved");
19+
throw new InvalidOperationException(message: $"Cannot get {symbol} that has not been saved");
2020

2121
return declaration;
2222
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public VisitUnit Visit(FunctionDeclaration visitable)
7474
var functionSymbolId = new FunctionSymbolId(visitable.Name, parameters.Select(x => x.Type));
7575
visitable.ComputedFunctionAddress = functionSymbolId.ToString();
7676
if (_symbolTables[visitable.Parent.Scope].ContainsSymbol(functionSymbolId))
77-
throw new DeclarationAlreadyExists(visitable.Name);
77+
throw new OverloadAlreadyExists(visitable.Name, functionSymbolId);
7878

7979
for (var i = 0; i < parameters.Count; i++)
8080
{

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,13 +410,17 @@ public Type Visit(CallExpression visitable)
410410
{
411411
var objectType = (ObjectType)visitable.Member.Accept(This);
412412
var availableMethods = _methodStorage.GetAvailableMethods(objectType);
413-
functionSymbol = availableMethods[new FunctionSymbolId(objectType.LastAccessedMethodName, [objectType, ..parameters])];
413+
var methodKey = new FunctionSymbolId(objectType.LastAccessedMethodName, [objectType, ..parameters]);
414+
functionSymbol =
415+
availableMethods.GetValueOrDefault(methodKey)
416+
?? throw new UnknownFunctionOverload(visitable.Id, methodKey);
414417
}
415418
else
416419
{
420+
var functionKey = new FunctionSymbolId(visitable.Id, parameters);
417421
functionSymbol =
418-
_symbolTables[visitable.Scope].FindSymbol(new FunctionSymbolId(visitable.Id, parameters))
419-
?? throw new UnknownIdentifierReference(visitable.Id);
422+
_symbolTables[visitable.Scope].FindSymbol(functionKey)
423+
?? throw new UnknownFunctionOverload(visitable.Id, functionKey);
420424
}
421425

422426
visitable.ComputedFunctionAddress = functionSymbol.Id.ToString();

0 commit comments

Comments
 (0)