Skip to content

Commit fff91c7

Browse files
committed
#61 - использование ключа символа в домене
1 parent 5db77de commit fff91c7

File tree

7 files changed

+20
-12
lines changed

7 files changed

+20
-12
lines changed

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

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

33
public interface ISymbol
44
{
5-
public string Id { get; }
5+
public ISymbolId Id { get; }
66
public Type Type { get; }
77
}

src/Domain/HydraScript.Domain.IR/ISymbolTable.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ public interface ISymbolTable
2323
/// Поиск эффективного символа
2424
/// </summary>
2525
/// <param name="id">Идентификатор символа</param>
26-
public TSymbol? FindSymbol<TSymbol>(string id)
26+
public TSymbol? FindSymbol<TSymbol>(ISymbolId id)
2727
where TSymbol : class, ISymbol;
2828

2929
/// <summary>
3030
/// Проверка наличия собственного символа
3131
/// </summary>
3232
/// <param name="id">Идентификатор символа</param>
33-
public bool ContainsSymbol(string id);
33+
public bool ContainsSymbol(ISymbolId id);
3434
}

src/Domain/HydraScript.Domain.IR/Impl/SymbolTable.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,19 @@ public IEnumerable<ISymbol> GetAvailableSymbols() =>
1414

1515
/// <inheritdoc cref="ISymbolTable.AddSymbol"/>
1616
public void AddSymbol(ISymbol symbol) =>
17-
_symbols[symbol.Id] = symbol;
17+
_symbols[symbol.Id.Value] = symbol;
1818

1919
/// <inheritdoc cref="ISymbolTable.FindSymbol{TSymbol}"/>
20-
public TSymbol? FindSymbol<TSymbol>(string id)
20+
public TSymbol? FindSymbol<TSymbol>(ISymbolId id)
2121
where TSymbol : class, ISymbol
2222
{
23-
var hasInsideTheScope = _symbols.TryGetValue(id, out var symbol);
23+
var hasInsideTheScope = _symbols.TryGetValue(id.Value, out var symbol);
2424
return !hasInsideTheScope
2525
? _openScope?.FindSymbol<TSymbol>(id)
2626
: symbol as TSymbol;
2727
}
2828

2929
/// <inheritdoc cref="ISymbolTable.ContainsSymbol"/>
30-
public bool ContainsSymbol(string id) =>
31-
_symbols.ContainsKey(id);
30+
public bool ContainsSymbol(ISymbolId id) =>
31+
_symbols.ContainsKey(id.Value);
3232
}

src/Domain/HydraScript.Domain.IR/Impl/Symbols/FunctionSymbol.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
using System.Text;
2+
using HydraScript.Domain.IR.Impl.SymbolIds;
23

34
namespace HydraScript.Domain.IR.Impl.Symbols;
45

56
public class FunctionSymbol(
67
string id,
7-
IEnumerable<ISymbol> parameters,
8+
IReadOnlyCollection<ISymbol> parameters,
89
Type type,
910
bool isEmpty) : Symbol(id, type)
1011
{
1112
private Type _returnType = type;
1213
/// <summary>Тип возврата функции</summary>
1314
public override Type Type => _returnType;
1415

16+
/// <summary>
17+
/// Перегрузка функции
18+
/// </summary>
19+
public override ISymbolId Id { get; } = new FunctionSymbolId(id, parameters.Select(x => x.Type));
20+
1521
public IReadOnlyList<ISymbol> Parameters { get; } = new List<ISymbol>(parameters);
1622
public bool IsEmpty { get; } = isEmpty;
1723

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
using HydraScript.Domain.IR.Impl.SymbolIds;
2+
13
namespace HydraScript.Domain.IR.Impl.Symbols;
24

35
public abstract class Symbol(string id, Type type) : ISymbol
46
{
5-
public virtual string Id { get; } = id;
7+
public virtual ISymbolId Id { get; } = new NamedSymbolId(id);
68
public virtual Type Type { get; } = type;
79
}

src/Domain/HydraScript.Domain.IR/Impl/Symbols/TypeSymbol.cs

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

33
public class TypeSymbol(Type type, string? id = null) :
4-
Symbol(id ?? type.ToString(), type)
4+
Symbol("type " + (id ?? type.ToString()), type)
55
{
66
public override bool Equals(object? obj) =>
77
obj is TypeSymbol typeSymbol &&

src/Domain/HydraScript.Domain.IR/Impl/Symbols/VariableSymbol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace HydraScript.Domain.IR.Impl.Symbols;
33
public class VariableSymbol(
44
string id,
55
Type type,
6-
bool readOnly = false) : Symbol(id, type)
6+
bool readOnly = false) : Symbol("var " + id, type)
77
{
88
public bool ReadOnly { get; } = readOnly;
99
public bool Initialized { get; private set; } = readOnly;

0 commit comments

Comments
 (0)