Skip to content

Commit 37b5841

Browse files
authored
#153 - обобщённый поиск символа (#157)
* #153 - ISymbolId interface * fix * #153 - symbols refactoring * #153 - SymbolTable refactoring * #153 - generic FindSymbol * #153 - use name instead of id in symbols
1 parent ca728b9 commit 37b5841

25 files changed

+76
-77
lines changed

src/Application/HydraScript.Application.StaticAnalysis/IMethodStorage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using HydraScript.Domain.IR.Impl.SymbolIds;
21
using HydraScript.Domain.IR.Impl.Symbols;
2+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
33
using HydraScript.Domain.IR.Types;
44

55
namespace HydraScript.Application.StaticAnalysis;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Declarations.AfterTypesAreLoaded;
2-
using HydraScript.Domain.IR.Impl.SymbolIds;
32
using HydraScript.Domain.IR.Impl.Symbols;
3+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
44

55
namespace HydraScript.Application.StaticAnalysis.Impl;
66

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using HydraScript.Domain.IR.Impl.SymbolIds;
21
using HydraScript.Domain.IR.Impl.Symbols;
2+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
33
using HydraScript.Domain.IR.Types;
44

55
namespace HydraScript.Application.StaticAnalysis.Impl;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Declarations;
2-
using HydraScript.Domain.IR.Impl.SymbolIds;
32
using HydraScript.Domain.IR.Impl.Symbols;
3+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
44

55
namespace HydraScript.Application.StaticAnalysis.Impl;
66

@@ -33,7 +33,7 @@ public void Resolve()
3333
var declarationToResolve = _declarationsToResolve.Dequeue();
3434

3535
var typeSymbol = symbolTables[declarationToResolve.Scope]
36-
.FindSymbol<TypeSymbol>(new TypeSymbolId(declarationToResolve.TypeId))!;
36+
.FindSymbol(new TypeSymbolId(declarationToResolve.TypeId))!;
3737

3838
var resolvingCandidates = symbolTables[declarationToResolve.Scope]
3939
.GetAvailableSymbols()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Declarations.AfterTypesAreLoaded;
55
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Expressions.ComplexLiterals;
66
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Expressions.PrimaryExpressions;
7-
using HydraScript.Domain.IR.Impl.SymbolIds;
87
using HydraScript.Domain.IR.Impl.Symbols;
8+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
99
using HydraScript.Domain.IR.Types;
1010

1111
namespace HydraScript.Application.StaticAnalysis.Visitors;

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Expressions.ComplexLiterals;
1010
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Expressions.PrimaryExpressions;
1111
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Statements;
12-
using HydraScript.Domain.IR.Impl.SymbolIds;
1312
using HydraScript.Domain.IR.Impl.Symbols;
13+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
1414
using HydraScript.Domain.IR.Types;
1515

1616
namespace HydraScript.Application.StaticAnalysis.Visitors;
@@ -138,7 +138,7 @@ public Type Visit(ExpressionStatement visitable) =>
138138

139139
public Type Visit(IdentifierReference visitable)
140140
{
141-
var symbol = _symbolTables[visitable.Scope].FindSymbol<VariableSymbol>(new VariableSymbolId(visitable.Name));
141+
var symbol = _symbolTables[visitable.Scope].FindSymbol(new VariableSymbolId(visitable.Name));
142142
if (symbol is { Initialized: false })
143143
throw new AccessBeforeInitialization(visitable);
144144
return symbol?.Type ?? throw new UnknownIdentifierReference(visitable);
@@ -277,9 +277,9 @@ public Type Visit(LexicalDeclaration visitable)
277277
for (var i = 0; i < visitable.Assignments.Count; i++)
278278
{
279279
var assignment = visitable.Assignments[i];
280-
var registeredSymbol = _symbolTables[visitable.Scope].FindSymbol<VariableSymbol>(
281-
new VariableSymbolId(assignment.Destination.Id))!;
280+
var registeredSymbol = _symbolTables[visitable.Scope].FindSymbol(new VariableSymbolId(assignment.Destination.Id))!;
282281
var sourceType = assignment.Source.Accept(This);
282+
283283
if (sourceType.Equals(undefined))
284284
throw new CannotDefineType(assignment.Source.Segment);
285285
if (sourceType.Equals(@void))
@@ -325,8 +325,7 @@ public Type Visit(AssignmentExpression visitable)
325325
}
326326

327327
var symbol =
328-
_symbolTables[visitable.Scope].FindSymbol<VariableSymbol>(
329-
new VariableSymbolId(visitable.Destination.Id)) ??
328+
_symbolTables[visitable.Scope].FindSymbol(new VariableSymbolId(visitable.Destination.Id)) ??
330329
throw new UnknownIdentifierReference(visitable.Destination.Id);
331330

332331
if (symbol.ReadOnly)
@@ -416,7 +415,7 @@ public Type Visit(CallExpression visitable)
416415
else
417416
{
418417
functionSymbol =
419-
_symbolTables[visitable.Scope].FindSymbol<FunctionSymbol>(new FunctionSymbolId(visitable.Id, parameters))
418+
_symbolTables[visitable.Scope].FindSymbol(new FunctionSymbolId(visitable.Id, parameters))
420419
?? throw new UnknownIdentifierReference(visitable.Id);
421420
}
422421

@@ -454,7 +453,7 @@ public Type Visit(CallExpression visitable)
454453
public Type Visit(FunctionDeclaration visitable)
455454
{
456455
var parameters = visitable.Arguments.Select(x => x.TypeValue.Accept(_typeBuilder)).ToList();
457-
var symbol = _symbolTables[visitable.Scope].FindSymbol<FunctionSymbol>(new FunctionSymbolId(visitable.Name, parameters))!;
456+
var symbol = _symbolTables[visitable.Scope].FindSymbol(new FunctionSymbolId(visitable.Name, parameters))!;
458457
_functionStorage.RemoveIfPresent(symbol);
459458
visitable.Statements.Accept(This);
460459

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using HydraScript.Application.StaticAnalysis.Exceptions;
22
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Declarations;
3-
using HydraScript.Domain.IR.Impl.SymbolIds;
4-
using HydraScript.Domain.IR.Impl.Symbols;
3+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
54
using HydraScript.Domain.IR.Types;
65

76
namespace HydraScript.Application.StaticAnalysis.Visitors;
@@ -18,7 +17,7 @@ public TypeBuilder(ISymbolTableStorage symbolTables) =>
1817
_symbolTables = symbolTables;
1918

2019
public Type Visit(TypeIdentValue visitable) =>
21-
_symbolTables[visitable.Scope].FindSymbol<TypeSymbol>(new TypeSymbolId(visitable.TypeId))?.Type ??
20+
_symbolTables[visitable.Scope].FindSymbol(new TypeSymbolId(visitable.TypeId))?.Type ??
2221
throw new UnknownIdentifierReference(visitable.TypeId);
2322

2423
public ArrayType Visit(ArrayTypeValue visitable)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
using HydraScript.Domain.FrontEnd.Parser;
33
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes;
44
using HydraScript.Domain.FrontEnd.Parser.Impl.Ast.Nodes.Declarations;
5-
using HydraScript.Domain.IR.Impl.SymbolIds;
65
using HydraScript.Domain.IR.Impl.Symbols;
6+
using HydraScript.Domain.IR.Impl.Symbols.Ids;
77

88
namespace HydraScript.Application.StaticAnalysis.Visitors;
99

src/Domain/HydraScript.Domain.IR/ISymbol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ namespace HydraScript.Domain.IR;
22

33
public interface ISymbol
44
{
5-
public SymbolId Id { get; }
5+
public ISymbolId<ISymbol> Id { get; }
66
public string Name { get; }
77
public Type Type { get; }
88
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace HydraScript.Domain.IR;
2+
3+
// ReSharper disable once UnusedTypeParameter
4+
public interface ISymbolId<out TSymbol> : IEquatable<ISymbolId<ISymbol>>
5+
where TSymbol : class, ISymbol;

0 commit comments

Comments
 (0)