diff --git a/Convention/[Symbolization]/Internal/Namespace.cs b/Convention/[Symbolization]/Internal/Namespace.cs new file mode 100644 index 0000000..d230a9c --- /dev/null +++ b/Convention/[Symbolization]/Internal/Namespace.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Convention.Symbolization.Internal +{ + internal sealed class NamespaceModel + { + + } + + public sealed class Namespace : Variable + { + private NamespaceModel Data; + + public override object Clone() + { + Namespace result = new() + { + Data = Data + }; + return result; + } + + + } +} diff --git a/Convention/[Symbolization]/Internal/Structure.cs b/Convention/[Symbolization]/Internal/Structure.cs index 93a5f08..5885900 100644 --- a/Convention/[Symbolization]/Internal/Structure.cs +++ b/Convention/[Symbolization]/Internal/Structure.cs @@ -30,5 +30,15 @@ namespace Convention.Symbolization.Internal } return target; } + + public bool Equals(Structure other) + { + return Name.Equals(other.Name); + } + + public override int GetHashCode() + { + return Name.GetHashCode(); + } } } diff --git a/Convention/[Symbolization]/Internal/Variable.cs b/Convention/[Symbolization]/Internal/Variable.cs index d525b88..3f455ff 100644 --- a/Convention/[Symbolization]/Internal/Variable.cs +++ b/Convention/[Symbolization]/Internal/Variable.cs @@ -6,9 +6,36 @@ using System.Threading.Tasks; namespace Convention.Symbolization.Internal { - public abstract class Variable : ICloneable + public abstract class Variable : ICloneable, IEquatable { + public readonly VariableSymbol SymbolInfo; + + /// + /// for construct + /// + protected Variable(string symbolName, Type variableType) + { + SymbolInfo = new VariableSymbol(symbolName, variableType); + } + /// + /// for clone + /// + protected Variable(string symbolName, Variable variable) : this(symbolName, variable.SymbolInfo.VariableType) { } + public abstract object Clone(); + public abstract bool Equals(Variable other); + + public override bool Equals(object obj) + { + return obj is Variable variable && Equals(variable); + } + + public abstract int GetVariableHashCode(); + + public override sealed int GetHashCode() + { + return GetVariableHashCode(); + } } public readonly struct VariableSymbol diff --git a/Convention/[Symbolization]/Symbolization.cs b/Convention/[Symbolization]/Symbolization.cs index 07421d9..7fb01d4 100644 --- a/Convention/[Symbolization]/Symbolization.cs +++ b/Convention/[Symbolization]/Symbolization.cs @@ -8,24 +8,20 @@ namespace Convention.Symbolization { public class SymbolizationContext { - public Internal.VariableContext Context = new(); + } public class SymbolizationRunner { + private readonly Internal.Namespace GlobalNamespace; private readonly SymbolizationContext Context; public SymbolizationRunner(SymbolizationContext context) { + GlobalNamespace = new(); Context = context; } public SymbolizationRunner() :this(new()){ } - public void Execute(string funcName) - { - - } - - public void Execute()=>Execute("main") } }