public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-7819] gccrs: ast: Add manual dispatch for meta item downcasting
@ 2024-01-16 18:01 Arthur Cohen
0 siblings, 0 replies; only message in thread
From: Arthur Cohen @ 2024-01-16 18:01 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:5920e4b7579c664c17a07d126c7fb09f4d786849
commit r14-7819-g5920e4b7579c664c17a07d126c7fb09f4d786849
Author: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Date: Tue Jun 20 13:26:45 2023 +0200
gccrs: ast: Add manual dispatch for meta item downcasting
Several meta items shall be downcasted in various places, this commit
introduces values to dispatch on.
gcc/rust/ChangeLog:
* ast/rust-ast.h (class MetaItem): Add MetaItem dispatch values.
* ast/rust-expr.h: Add LitExpr and PathLit dispatch.
* ast/rust-macro.h: Add remaining dispatch getters.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diff:
---
gcc/rust/ast/rust-ast.h | 26 ++++++++++++++++++++++++++
gcc/rust/ast/rust-expr.h | 10 ++++++++++
gcc/rust/ast/rust-macro.h | 30 ++++++++++++++++++++++++++++++
3 files changed, 66 insertions(+)
diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h
index 7989bbe13c1..faf14fe722b 100644
--- a/gcc/rust/ast/rust-ast.h
+++ b/gcc/rust/ast/rust-ast.h
@@ -681,12 +681,20 @@ protected:
virtual MetaItemInner *clone_meta_item_inner_impl () const = 0;
public:
+ enum class Kind
+ {
+ LitExpr,
+ MetaItem,
+ };
+
// Unique pointer custom clone function
std::unique_ptr<MetaItemInner> clone_meta_item_inner () const
{
return std::unique_ptr<MetaItemInner> (clone_meta_item_inner_impl ());
}
+ virtual Kind get_kind () = 0;
+
virtual ~MetaItemInner ();
virtual location_t get_locus () const = 0;
@@ -897,6 +905,24 @@ class AttrInputLiteral;
// abstract base meta item class
class MetaItem : public MetaItemInner
{
+public:
+ enum class ItemKind
+ {
+ Path,
+ Word,
+ NameValueStr,
+ PathLit,
+ Seq,
+ ListPaths,
+ ListNameValueStr,
+ };
+
+ MetaItemInner::Kind get_kind () override
+ {
+ return MetaItemInner::Kind::MetaItem;
+ }
+
+ virtual ItemKind get_item_kind () const = 0;
};
// Forward decl - defined in rust-expr.h
diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h
index 63c7d107961..b3aa41726c4 100644
--- a/gcc/rust/ast/rust-expr.h
+++ b/gcc/rust/ast/rust-expr.h
@@ -200,6 +200,11 @@ public:
bool check_cfg_predicate (const Session &session) const override;
+ MetaItemInner::Kind get_kind () override
+ {
+ return MetaItemInner::Kind::LitExpr;
+ }
+
protected:
// Use covariance to implement clone function as returning this type
MetaItemLitExpr *clone_meta_item_inner_impl () const override
@@ -228,6 +233,11 @@ public:
return path.as_string () + " = " + lit.as_string ();
}
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::PathLit;
+ }
+
// There are two Locations in MetaItemPathLit (path and lit_expr),
// we have no idea use which of them, just simply return UNKNOWN_LOCATION
// now.
diff --git a/gcc/rust/ast/rust-macro.h b/gcc/rust/ast/rust-macro.h
index c63b480de61..db8cf1ef5d4 100644
--- a/gcc/rust/ast/rust-macro.h
+++ b/gcc/rust/ast/rust-macro.h
@@ -844,6 +844,11 @@ public:
Attribute to_attribute () const override;
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::Path;
+ }
+
protected:
// Use covariance to implement clone function as returning this type
MetaItemPath *clone_meta_item_inner_impl () const override
@@ -902,6 +907,11 @@ public:
Attribute to_attribute () const override;
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::Seq;
+ }
+
protected:
// Use covariance to implement clone function as returning this type
MetaItemSeq *clone_meta_item_inner_impl () const override
@@ -933,6 +943,11 @@ public:
Attribute to_attribute () const override;
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::Word;
+ }
+
protected:
// Use covariance to implement clone function as returning this type
MetaWord *clone_meta_item_inner_impl () const override
@@ -984,6 +999,11 @@ public:
bool is_key_value_pair () const override { return true; }
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::NameValueStr;
+ }
+
protected:
// Use covariance to implement clone function as returning this type
MetaNameValueStr *clone_meta_item_inner_impl () const override
@@ -1021,6 +1041,11 @@ public:
Attribute to_attribute () const override;
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::ListPaths;
+ }
+
private:
bool check_path_exists_in_cfg (const Session &session,
const SimplePath &path) const;
@@ -1061,6 +1086,11 @@ public:
Attribute to_attribute () const override;
+ MetaItem::ItemKind get_item_kind () const override
+ {
+ return MetaItem::ItemKind::ListNameValueStr;
+ }
+
protected:
// Use covariance to implement clone function as returning this type
MetaListNameValueStr *clone_meta_item_inner_impl () const override
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-16 18:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-16 18:01 [gcc r14-7819] gccrs: ast: Add manual dispatch for meta item downcasting Arthur Cohen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).