|
2 | 2 |
|
3 | 3 | namespace ast { |
4 | 4 |
|
5 | | - class EnumDeclare : public Node |
6 | | - { |
| 5 | + class EnumMember : public Node { |
| 6 | + |
7 | 7 | private: |
8 | | - NodePtr identifier_; |
9 | | - NodePtr enumerator_list_; |
| 8 | + std::string identifier_; |
| 9 | + NodePtr value_; |
10 | 10 |
|
11 | 11 | public: |
12 | | - EnumDeclare(NodePtr identifier, NodePtr enumerator_list) : identifier_(std::move(identifier)), enumerator_list_(std::move(enumerator_list)){}; |
| 12 | + EnumMember(const std::string &identifier, NodePtr value) : identifier_(identifier), value_(std::move(value)) {} |
| 13 | + void EmitRISC(std::ostream& stream, std::shared_ptr<Context> context, std::string destReg, TypeSpecifier type) const override; |
| 14 | + void Print(std::ostream& stream) const override; |
| 15 | + std::string GetIdentifier() const { return identifier_; } |
| 16 | + TypeSpecifier GetType(std::shared_ptr<Context> ) const override { return TypeSpecifier::INT; } |
| 17 | + int IsPointer(std::shared_ptr<Context> ) const override { return value_ ? 1 : 0; } |
| 18 | + std::variant<int, float, double> GetConst() const override { return value_ ? value_->GetConst() : 0; } |
| 19 | + }; |
13 | 20 |
|
| 21 | + class EnumSpecifier : public Node { |
| 22 | + private: |
| 23 | + std::string identifier_; |
| 24 | + NodePtr members_; |
| 25 | + public: |
| 26 | + EnumSpecifier(const std::string &identifier, NodePtr members) : identifier_(identifier), members_(std::move(members)) {} |
14 | 27 | void EmitRISC(std::ostream& stream, std::shared_ptr<Context> context, std::string destReg, TypeSpecifier type) const override; |
15 | 28 | void Print(std::ostream& stream) const override; |
16 | | - std::string GetIdentifier() const { return identifier_->GetIdentifier(); } |
17 | | - TypeSpecifier GetType(std::shared_ptr<Context> context) const { return TypeSpecifier::INT; } |
| 29 | + std::string GetIdentifier() const { return identifier_; } |
| 30 | + TypeSpecifier GetType(std::shared_ptr<Context> ) const override { return TypeSpecifier::INT; } |
| 31 | + int IsPointer(std::shared_ptr<Context> ) const override { return 0; } |
18 | 32 | }; |
19 | 33 |
|
20 | 34 | }// namespace ast |
0 commit comments