File tree Expand file tree Collapse file tree 7 files changed +20
-12
lines changed
src/Domain/HydraScript.Domain.IR Expand file tree Collapse file tree 7 files changed +20
-12
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,6 @@ namespace HydraScript.Domain.IR;
22
33public interface ISymbol
44{
5- public string Id { get ; }
5+ public ISymbolId Id { get ; }
66 public Type Type { get ; }
77}
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff line change 11using System . Text ;
2+ using HydraScript . Domain . IR . Impl . SymbolIds ;
23
34namespace HydraScript . Domain . IR . Impl . Symbols ;
45
56public 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
Original file line number Diff line number Diff line change 1+ using HydraScript . Domain . IR . Impl . SymbolIds ;
2+
13namespace HydraScript . Domain . IR . Impl . Symbols ;
24
35public 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}
Original file line number Diff line number Diff line change 11namespace HydraScript . Domain . IR . Impl . Symbols ;
22
33public 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 &&
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ namespace HydraScript.Domain.IR.Impl.Symbols;
33public 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 ;
You can’t perform that action at this time.
0 commit comments