Mana
Symbol.h
Go to the documentation of this file.
1 
8 #pragma once
9 #include "../runner/common/Setup.h"
10 #include "TypeDescriptor.h"
11 
12 namespace mana
13 {
14  class SymbolFactory;
15 
16  /*
17  シンボル
18  */
19  class Symbol final
20  {
21  friend class SymbolFactory;
22 
23  public:
24  enum class ClassTypeId : uint8_t
25  {
26  NewSymbol,
27  Type,
28  Function,
38  Label,
39  };
40 
41  static const std::string_view& GetClassTypeName(const ClassTypeId id)
42  {
43  static constexpr std::string_view Names[] = {
44  std::string_view("new symbol"),
45  std::string_view("typedef"),
46  std::string_view("function"),
47  std::string_view("native function"),
48  std::string_view("member function"),
49  std::string_view("static variable"),
50  std::string_view("global variable"),
51  std::string_view("instance variable"),
52  std::string_view("local variable"),
53  std::string_view("constant integer"),
54  std::string_view("constant real"),
55  std::string_view("constant string"),
56  std::string_view("label"),
57  };
58  return Names[static_cast<size_t>(id)];
59  }
60 
61  enum class MemoryTypeId : uint8_t
62  {
63  Invalid,
64  Normal,
65  Parameter
66  };
67 
68  public:
69  ~Symbol() = default;
70 
71  [[nodiscard]] bool IsValid() const;
72  [[nodiscard]] bool IsValidVariable() const;
73 
74  [[nodiscard]] std::shared_ptr<Symbol> GetParameterList();
75  [[nodiscard]] const std::shared_ptr<Symbol> GetParameterList() const;
76 
77  [[nodiscard]] std::shared_ptr<Symbol> GetNext();
78  [[nodiscard]] const std::shared_ptr<Symbol> GetNext() const;
79 
80  [[nodiscard]] std::shared_ptr<TypeDescriptor> GetTypeDescriptor();
81  [[nodiscard]] const std::shared_ptr<TypeDescriptor> GetTypeDescriptor() const;
82 
83  [[nodiscard]] ClassTypeId GetClassTypeId() const;
84  [[nodiscard]] MemoryTypeId GetMemoryTypeId() const;
85 
86  [[nodiscard]] const std::string& GetName() const;
87  [[nodiscard]] int32_t GetAddress() const;
88  [[nodiscard]] int32_t GetEtc() const;
89  [[nodiscard]] float GetFloat() const;
90  [[nodiscard]] const std::string_view GetString() const;
91  [[nodiscard]] size_t GetBlockLevel() const;
92  [[nodiscard]] uint8_t GetNumberOfParameters() const;
93  [[nodiscard]] bool IsOverride() const;
94  [[nodiscard]] bool IsUsed() const;
95 
96  void SetTypeDescription(const std::shared_ptr<TypeDescriptor>& typeDescription);
97 
98  void SetNumberOfParameters(const size_t numberOfParameters);
99 
100  void CheckUndefineRecursive() const;
101 
102  void OnDump(std::ofstream& output, const int32_t level = 0) const;
103 
104  //private:
105  Symbol(const std::string_view name, const ClassTypeId class_type, const size_t blockLevel);
106 
107  void SetParameterList(const std::shared_ptr<Symbol>& symbol);
108  void SetNext(const std::shared_ptr<Symbol>& symbol);
109  void SetClassTypeId(const ClassTypeId classTypeId);
110  void SetMemoryTypeId(const MemoryTypeId memoryTypeId);
111  void SetName(const std::string& name);
112  void SetName(const std::string_view& name);
113  void SetAddress(const int32_t address);
114  void SetEtc(const int32_t etc);
115  void SetFloat(const float value);
116  void SetString(const std::string_view value);
117  void SetBlockLevel(const size_t blockLevel);
118  void SetOverride(const bool override_);
119  void SetUsed(const bool used);
120 
121  public:
122 #if MANA_BUILD_TARGET < MANA_BUILD_RELEASE
123  char mMagic[8];
124 #endif
125  std::shared_ptr<Symbol> mParameterList;
126  std::shared_ptr<Symbol> mNext;
127  std::shared_ptr<TypeDescriptor> mTypeDescription;
130  std::string mName;
131  int32_t mAddress = 0;
132  int32_t mEtc = 0; // TODO:使いまわしを止めてください
133  float mFloat = 0;
134  std::string mString;
135  size_t mBlockLevel = 0;
136  uint8_t mNumberOfParameters = 0;
137  bool mOverride = false;
138  bool mUsed = true;
139  };
140 }
Definition: SymbolFactory.h:33
Definition: Symbol.h:20
uint8_t GetNumberOfParameters() const
Definition: Symbol.cpp:206
int32_t GetAddress() const
Definition: Symbol.cpp:156
std::shared_ptr< Symbol > mParameterList
Definition: Symbol.h:125
int32_t mEtc
Definition: Symbol.h:132
int32_t GetEtc() const
Definition: Symbol.cpp:166
size_t mBlockLevel
Definition: Symbol.h:135
bool IsOverride() const
Definition: Symbol.cpp:211
int32_t mAddress
Definition: Symbol.h:131
std::string mName
Definition: Symbol.h:130
ClassTypeId mClassTypeId
Definition: Symbol.h:128
void SetBlockLevel(const size_t blockLevel)
Definition: Symbol.cpp:201
void SetAddress(const int32_t address)
Definition: Symbol.cpp:161
bool IsUsed() const
Definition: Symbol.cpp:221
~Symbol()=default
ClassTypeId
Definition: Symbol.h:25
bool IsValid() const
Definition: Symbol.cpp:44
std::shared_ptr< Symbol > mNext
Definition: Symbol.h:126
void SetTypeDescription(const std::shared_ptr< TypeDescriptor > &typeDescription)
Definition: Symbol.cpp:231
std::shared_ptr< TypeDescriptor > mTypeDescription
Definition: Symbol.h:127
void OnDump(std::ofstream &output, const int32_t level=0) const
Definition: Symbol.cpp:265
void SetString(const std::string_view value)
Definition: Symbol.cpp:191
void SetNumberOfParameters(const size_t numberOfParameters)
Definition: Symbol.cpp:236
ClassTypeId GetClassTypeId() const
Definition: Symbol.cpp:121
const std::string & GetName() const
Definition: Symbol.cpp:141
void SetOverride(const bool override_)
Definition: Symbol.cpp:216
std::string mString
Definition: Symbol.h:134
void SetNext(const std::shared_ptr< Symbol > &symbol)
Definition: Symbol.cpp:101
MemoryTypeId mMemoryTypeId
Definition: Symbol.h:129
MemoryTypeId
Definition: Symbol.h:62
std::shared_ptr< Symbol > GetParameterList()
Definition: Symbol.cpp:81
void CheckUndefineRecursive() const
Definition: Symbol.cpp:245
size_t GetBlockLevel() const
Definition: Symbol.cpp:196
float mFloat
Definition: Symbol.h:133
void SetUsed(const bool used)
Definition: Symbol.cpp:226
float GetFloat() const
Definition: Symbol.cpp:176
bool mUsed
Definition: Symbol.h:138
std::shared_ptr< TypeDescriptor > GetTypeDescriptor()
Definition: Symbol.cpp:111
void SetClassTypeId(const ClassTypeId classTypeId)
Definition: Symbol.cpp:126
bool IsValidVariable() const
Definition: Symbol.cpp:63
bool mOverride
Definition: Symbol.h:137
Symbol(const std::string_view name, const ClassTypeId class_type, const size_t blockLevel)
Definition: Symbol.cpp:32
void SetName(const std::string &name)
Definition: Symbol.cpp:146
static const std::string_view & GetClassTypeName(const ClassTypeId id)
Definition: Symbol.h:41
void SetEtc(const int32_t etc)
Definition: Symbol.cpp:171
uint8_t mNumberOfParameters
Definition: Symbol.h:136
void SetParameterList(const std::shared_ptr< Symbol > &symbol)
Definition: Symbol.cpp:91
void SetFloat(const float value)
Definition: Symbol.cpp:181
MemoryTypeId GetMemoryTypeId() const
Definition: Symbol.cpp:131
std::shared_ptr< Symbol > GetNext()
Definition: Symbol.cpp:96
const std::string_view GetString() const
Definition: Symbol.cpp:186
void SetMemoryTypeId(const MemoryTypeId memoryTypeId)
Definition: Symbol.cpp:136
Definition: CodeBuffer.cpp:12