From 3295609aea3cbd1d0de4d347634b12ce0762185b Mon Sep 17 00:00:00 2001 From: Itamar Date: Mon, 29 Mar 2021 16:52:35 +0300 Subject: LibCpp: Add AST::Name A Name node is basically an identifier with an optional scope, e.g Core::File. --- Userland/Libraries/LibCpp/AST.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'Userland/Libraries/LibCpp/AST.h') diff --git a/Userland/Libraries/LibCpp/AST.h b/Userland/Libraries/LibCpp/AST.h index 487c2c094a..9634d40ebc 100644 --- a/Userland/Libraries/LibCpp/AST.h +++ b/Userland/Libraries/LibCpp/AST.h @@ -43,6 +43,7 @@ class FunctionDefinition; class Type; class Parameter; class Statement; +class Name; class ASTNode : public RefCounted { public: @@ -76,6 +77,7 @@ public: virtual bool is_function_call() const { return false; } virtual bool is_type() const { return false; } virtual bool is_declaration() const { return false; } + virtual bool is_name() const {return false;} protected: ASTNode(ASTNode* parent, Optional start, Optional end, const String& filename) @@ -212,7 +214,6 @@ class Type : public ASTNode { public: virtual ~Type() override = default; virtual const char* class_name() const override { return "Type"; } - const StringView& name() const { return m_name; } virtual void dump(size_t indent) const override; virtual bool is_type() const override { return true; } virtual bool is_templatized() const { return false; } @@ -222,7 +223,7 @@ public: { } - StringView m_name; + RefPtr m_name; Vector m_qualifiers; }; @@ -341,6 +342,23 @@ public: StringView m_name; }; +class Name : public Expression { +public: + virtual ~Name() override = default; + virtual const char* class_name() const override { return "Name"; } + virtual void dump(size_t indent) const override; + virtual bool is_name() const override {return true;} + + Name(ASTNode* parent, Optional start, Optional end, const String& filename) + : Expression(parent, start, end, filename) + { + } + String full_name() const; + + RefPtr m_name; + NonnullRefPtrVector m_scope; +}; + class NumericLiteral : public Expression { public: virtual ~NumericLiteral() override = default; @@ -453,7 +471,7 @@ public: virtual void dump(size_t indent) const override; virtual bool is_function_call() const override { return true; } - StringView m_name; + RefPtr m_name; NonnullRefPtrVector m_arguments; }; @@ -577,7 +595,7 @@ public: virtual bool is_member_expression() const override { return true; } RefPtr m_object; - RefPtr m_property; + RefPtr m_property; }; class ForStatement : public Statement { -- cgit v1.2.3