[gcc r14-7599] gccrs: Add AST::AttrInputMacro
Arthur Cohen
cohenarthur@gcc.gnu.org
Tue Jan 16 17:44:01 GMT 2024
https://gcc.gnu.org/g:842a8307ca36858529de75ab0532749f2140f900
commit r14-7599-g842a8307ca36858529de75ab0532749f2140f900
Author: Owen Avery <powerboat9.gamer@gmail.com>
Date: Sun Apr 30 02:54:22 2023 -0400
gccrs: Add AST::AttrInputMacro
gcc/rust/ChangeLog:
* ast/rust-ast-dump.cc
(Dump::visit): Add AttrInputMacro visitor.
* ast/rust-ast-dump.h:
(Dump::visit): Likewise.
* ast/rust-ast-full-decls.h
(class AttrInputMacro): New.
* ast/rust-ast-collector.cc
(TokenCollector::visit):
Add and call out to AttrInputMacro visitor.
* ast/rust-ast-collector.h:
(TokenCollector::visit): Add AttrInputMacro visitor.
* ast/rust-ast-visitor.h:
(ASTVisitor::visit): Likewise.
* ast/rust-ast.cc
(AttrInputMacro::accept_vis): New.
(AttrInputMacro::as_string): New.
(AttrInputMacro::AttrInputMacro): New.
(AttrInputMacro::operator=): New.
* ast/rust-ast.h:
(AttrInput::AttrInputType::MACRO): New.
* ast/rust-expr.h
(class AttrInputMacro): New.
* checks/errors/rust-feature-gate.h:
(FeatureGate::visit): Add AttrInputMacro visitor.
* expand/rust-cfg-strip.cc
(CfgStrip::visit): Likewise.
* expand/rust-cfg-strip.h:
(CfgStrip::visit): Likewise.
* expand/rust-expand-visitor.cc
(ExpandVisitor::visit): Likewise.
* expand/rust-expand-visitor.h:
(ExpandVisitor::visit): Likewise.
* hir/rust-ast-lower-base.cc
(ASTLoweringBase::visit): Likewise.
* hir/rust-ast-lower-base.h:
(ASTLoweringBase::visit): Likewise.
* resolve/rust-ast-resolve-base.cc
(ResolverBase::visit): Likewise.
* resolve/rust-ast-resolve-base.h:
(ResolverBase::visit): Likewise.
* resolve/rust-early-name-resolver.cc
(EarlyNameResolver::visit): Likewise.
* resolve/rust-early-name-resolver.h:
(EarlyNameResolver::visit): Likewise.
* util/rust-attributes.cc
(AttributeChecker::visit): Likewise.
(check_doc_attribute): Handle AttrInputType::MACRO.
* util/rust-attributes.h:
(AttributeChecker::visit): Add AttrInputMacro visitor.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diff:
---
gcc/rust/ast/rust-ast-collector.cc | 11 ++++++++
gcc/rust/ast/rust-ast-collector.h | 1 +
gcc/rust/ast/rust-ast-dump.cc | 4 +++
gcc/rust/ast/rust-ast-dump.h | 1 +
gcc/rust/ast/rust-ast-full-decls.h | 1 +
gcc/rust/ast/rust-ast-visitor.h | 1 +
gcc/rust/ast/rust-ast.cc | 24 ++++++++++++++++
gcc/rust/ast/rust-ast.h | 1 +
gcc/rust/ast/rust-expr.h | 42 ++++++++++++++++++++++++++++
gcc/rust/checks/errors/rust-feature-gate.h | 1 +
gcc/rust/expand/rust-cfg-strip.cc | 5 ++++
gcc/rust/expand/rust-cfg-strip.h | 1 +
gcc/rust/expand/rust-expand-visitor.cc | 6 ++++
gcc/rust/expand/rust-expand-visitor.h | 1 +
gcc/rust/hir/rust-ast-lower-base.cc | 3 ++
gcc/rust/hir/rust-ast-lower-base.h | 1 +
gcc/rust/resolve/rust-ast-resolve-base.cc | 4 +++
gcc/rust/resolve/rust-ast-resolve-base.h | 1 +
gcc/rust/resolve/rust-early-name-resolver.cc | 4 +++
gcc/rust/resolve/rust-early-name-resolver.h | 1 +
gcc/rust/util/rust-attributes.cc | 5 ++++
gcc/rust/util/rust-attributes.h | 1 +
22 files changed, 120 insertions(+)
diff --git a/gcc/rust/ast/rust-ast-collector.cc b/gcc/rust/ast/rust-ast-collector.cc
index afc169516a1..45a76094499 100644
--- a/gcc/rust/ast/rust-ast-collector.cc
+++ b/gcc/rust/ast/rust-ast-collector.cc
@@ -170,6 +170,10 @@ TokenCollector::visit (Attribute &attrib)
visit (static_cast<AttrInputLiteral &> (attrib.get_attr_input ()));
break;
}
+ case AST::AttrInput::AttrInputType::MACRO: {
+ visit (static_cast<AttrInputMacro &> (attrib.get_attr_input ()));
+ break;
+ }
case AST::AttrInput::AttrInputType::META_ITEM: {
visit (static_cast<AttrInputMetaItemContainer &> (
attrib.get_attr_input ()));
@@ -839,6 +843,13 @@ TokenCollector::visit (AttrInputLiteral &literal)
visit (literal.get_literal ());
}
+void
+TokenCollector::visit (AttrInputMacro ¯o)
+{
+ tokens.push_back (Rust::Token::make (EQUAL, Location ()));
+ visit (macro.get_macro ());
+}
+
void
TokenCollector::visit (MetaItemLitExpr &item)
{
diff --git a/gcc/rust/ast/rust-ast-collector.h b/gcc/rust/ast/rust-ast-collector.h
index d4712c27698..e1857977a03 100644
--- a/gcc/rust/ast/rust-ast-collector.h
+++ b/gcc/rust/ast/rust-ast-collector.h
@@ -149,6 +149,7 @@ private:
// rust-expr.h
void visit (LiteralExpr &expr);
void visit (AttrInputLiteral &attr_input);
+ void visit (AttrInputMacro &attr_input);
void visit (MetaItemLitExpr &meta_item);
void visit (MetaItemPathLit &meta_item);
void visit (BorrowExpr &expr);
diff --git a/gcc/rust/ast/rust-ast-dump.cc b/gcc/rust/ast/rust-ast-dump.cc
index 8db706920c0..f44bb07c915 100644
--- a/gcc/rust/ast/rust-ast-dump.cc
+++ b/gcc/rust/ast/rust-ast-dump.cc
@@ -514,6 +514,10 @@ void
Dump::visit (AttrInputLiteral &)
{}
+void
+Dump::visit (AttrInputMacro &)
+{}
+
void
Dump::visit (MetaItemLitExpr &)
{}
diff --git a/gcc/rust/ast/rust-ast-dump.h b/gcc/rust/ast/rust-ast-dump.h
index 408ee3d6361..ed6f1707476 100644
--- a/gcc/rust/ast/rust-ast-dump.h
+++ b/gcc/rust/ast/rust-ast-dump.h
@@ -137,6 +137,7 @@ private:
// rust-expr.h
void visit (LiteralExpr &expr);
void visit (AttrInputLiteral &attr_input);
+ void visit (AttrInputMacro &attr_input);
void visit (MetaItemLitExpr &meta_item);
void visit (MetaItemPathLit &meta_item);
void visit (BorrowExpr &expr);
diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h
index b23af48ccdb..d132c072364 100644
--- a/gcc/rust/ast/rust-ast-full-decls.h
+++ b/gcc/rust/ast/rust-ast-full-decls.h
@@ -77,6 +77,7 @@ class QualifiedPathInType;
class ExprWithBlock;
class LiteralExpr;
class AttrInputLiteral;
+class AttrInputMacro;
class MetaItemLitExpr;
class MetaItemPathLit;
class OperatorExpr;
diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h
index a69db3dd3cb..abe39eb7165 100644
--- a/gcc/rust/ast/rust-ast-visitor.h
+++ b/gcc/rust/ast/rust-ast-visitor.h
@@ -66,6 +66,7 @@ public:
// rust-expr.h
virtual void visit (LiteralExpr &expr) = 0;
virtual void visit (AttrInputLiteral &attr_input) = 0;
+ virtual void visit (AttrInputMacro &attr_input) = 0;
virtual void visit (MetaItemLitExpr &meta_item) = 0;
virtual void visit (MetaItemPathLit &meta_item) = 0;
virtual void visit (BorrowExpr &expr) = 0;
diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc
index 550af84dc4a..55b21d3e840 100644
--- a/gcc/rust/ast/rust-ast.cc
+++ b/gcc/rust/ast/rust-ast.cc
@@ -3266,6 +3266,12 @@ AttrInputMetaItemContainer::as_string () const
return str + ")";
}
+std::string
+AttrInputMacro::as_string () const
+{
+ return " = " + macro->as_string ();
+}
+
/* Override that calls the function recursively on all items contained within
* the module. */
void
@@ -4220,6 +4226,18 @@ BlockExpr::strip_tail_expr ()
}
}
+// needed here because "rust-expr.h" doesn't include "rust-macro.h"
+AttrInputMacro::AttrInputMacro (const AttrInputMacro &oth)
+ : macro (oth.macro->clone_macro_invocation_impl ())
+{}
+
+void
+AttrInputMacro::operator= (const AttrInputMacro &oth)
+{
+ macro = std::unique_ptr<MacroInvocation> (
+ oth.macro->clone_macro_invocation_impl ());
+}
+
/* Visitor implementations - these are short but inlining can't happen anyway
* due to virtual functions and I didn't want to make the ast header includes
* any longer than they already are. */
@@ -4266,6 +4284,12 @@ AttrInputLiteral::accept_vis (ASTVisitor &vis)
vis.visit (*this);
}
+void
+AttrInputMacro::accept_vis (ASTVisitor &vis)
+{
+ vis.visit (*this);
+}
+
void
MetaItemLitExpr::accept_vis (ASTVisitor &vis)
{
diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h
index a551b461a6a..2945cc87883 100644
--- a/gcc/rust/ast/rust-ast.h
+++ b/gcc/rust/ast/rust-ast.h
@@ -597,6 +597,7 @@ public:
enum AttrInputType
{
LITERAL,
+ MACRO,
META_ITEM,
TOKEN_TREE,
};
diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h
index 8f30965b9f7..2b23c246723 100644
--- a/gcc/rust/ast/rust-expr.h
+++ b/gcc/rust/ast/rust-expr.h
@@ -139,6 +139,48 @@ protected:
}
};
+// Like an AttrInputLiteral, but stores a MacroInvocation
+class AttrInputMacro : public AttrInput
+{
+ std::unique_ptr<MacroInvocation> macro;
+
+public:
+ AttrInputMacro (std::unique_ptr<MacroInvocation> macro)
+ : macro (std::move (macro))
+ {}
+
+ AttrInputMacro (const AttrInputMacro &oth);
+
+ AttrInputMacro (AttrInputMacro &&oth) : macro (std::move (oth.macro)) {}
+
+ void operator= (const AttrInputMacro &oth);
+
+ void operator= (AttrInputMacro &&oth) { macro = std::move (oth.macro); }
+
+ std::string as_string () const override;
+
+ void accept_vis (ASTVisitor &vis) override;
+
+ // assuming this can't be a cfg predicate
+ bool check_cfg_predicate (const Session &) const override { return false; }
+
+ // assuming this is like AttrInputLiteral
+ bool is_meta_item () const override { return false; }
+
+ std::unique_ptr<MacroInvocation> &get_macro () { return macro; }
+
+ AttrInputType get_attr_input_type () const final override
+ {
+ return AttrInput::AttrInputType::MACRO;
+ }
+
+protected:
+ AttrInputMacro *clone_attr_input_impl () const override
+ {
+ return new AttrInputMacro (*this);
+ }
+};
+
/* literal expr only meta item inner - TODO possibly replace with inheritance of
* LiteralExpr itself? */
class MetaItemLitExpr : public MetaItemInner
diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h
index a22569433cd..fb9105f7206 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.h
+++ b/gcc/rust/checks/errors/rust-feature-gate.h
@@ -48,6 +48,7 @@ public:
void visit (AST::QualifiedPathInType &path) override {}
void visit (AST::LiteralExpr &expr) override {}
void visit (AST::AttrInputLiteral &attr_input) override {}
+ void visit (AST::AttrInputMacro &attr_input) override {}
void visit (AST::MetaItemLitExpr &meta_item) override {}
void visit (AST::MetaItemPathLit &meta_item) override {}
void visit (AST::BorrowExpr &expr) override {}
diff --git a/gcc/rust/expand/rust-cfg-strip.cc b/gcc/rust/expand/rust-cfg-strip.cc
index 3f47100888d..099a171f9ca 100644
--- a/gcc/rust/expand/rust-cfg-strip.cc
+++ b/gcc/rust/expand/rust-cfg-strip.cc
@@ -604,6 +604,11 @@ CfgStrip::visit (AST::AttrInputLiteral &)
// shouldn't require?
}
void
+CfgStrip::visit (AST::AttrInputMacro &)
+{
+ // shouldn't require?
+}
+void
CfgStrip::visit (AST::MetaItemLitExpr &)
{
// shouldn't require?
diff --git a/gcc/rust/expand/rust-cfg-strip.h b/gcc/rust/expand/rust-cfg-strip.h
index a118f919442..3357d23fd5a 100644
--- a/gcc/rust/expand/rust-cfg-strip.h
+++ b/gcc/rust/expand/rust-cfg-strip.h
@@ -81,6 +81,7 @@ public:
void visit (AST::LiteralExpr &expr) override;
void visit (AST::AttrInputLiteral &) override;
+ void visit (AST::AttrInputMacro &) override;
void visit (AST::MetaItemLitExpr &) override;
void visit (AST::MetaItemPathLit &) override;
void visit (AST::BorrowExpr &expr) override;
diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc
index a0cfd00e9a0..be1a7a4225f 100644
--- a/gcc/rust/expand/rust-expand-visitor.cc
+++ b/gcc/rust/expand/rust-expand-visitor.cc
@@ -323,6 +323,12 @@ void
ExpandVisitor::visit (AST::AttrInputLiteral &)
{}
+void
+ExpandVisitor::visit (AST::AttrInputMacro ¯o)
+{
+ rust_sorry_at (Location (), "macros in attributes not supported");
+}
+
void
ExpandVisitor::visit (AST::MetaItemLitExpr &)
{}
diff --git a/gcc/rust/expand/rust-expand-visitor.h b/gcc/rust/expand/rust-expand-visitor.h
index 7b245181995..21677ec9002 100644
--- a/gcc/rust/expand/rust-expand-visitor.h
+++ b/gcc/rust/expand/rust-expand-visitor.h
@@ -166,6 +166,7 @@ public:
void visit (AST::LiteralExpr &expr) override;
void visit (AST::AttrInputLiteral &) override;
+ void visit (AST::AttrInputMacro &) override;
void visit (AST::MetaItemLitExpr &) override;
void visit (AST::MetaItemPathLit &) override;
void visit (AST::BorrowExpr &expr) override;
diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc
index 096bc4f0862..d1bc05bbf0f 100644
--- a/gcc/rust/hir/rust-ast-lower-base.cc
+++ b/gcc/rust/hir/rust-ast-lower-base.cc
@@ -87,6 +87,9 @@ void
ASTLoweringBase::visit (AST::AttrInputLiteral &)
{}
void
+ASTLoweringBase::visit (AST::AttrInputMacro &)
+{}
+void
ASTLoweringBase::visit (AST::MetaItemLitExpr &)
{}
void
diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h
index 7e8cbf7e8dc..7ed9cefbbc9 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -94,6 +94,7 @@ public:
// rust-expr.h
virtual void visit (AST::LiteralExpr &expr);
virtual void visit (AST::AttrInputLiteral &attr_input);
+ virtual void visit (AST::AttrInputMacro &attr_input);
virtual void visit (AST::MetaItemLitExpr &meta_item);
virtual void visit (AST::MetaItemPathLit &meta_item);
virtual void visit (AST::BorrowExpr &expr);
diff --git a/gcc/rust/resolve/rust-ast-resolve-base.cc b/gcc/rust/resolve/rust-ast-resolve-base.cc
index b70d7196584..e415a906a4d 100644
--- a/gcc/rust/resolve/rust-ast-resolve-base.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-base.cc
@@ -106,6 +106,10 @@ void
ResolverBase::visit (AST::AttrInputLiteral &)
{}
+void
+ResolverBase::visit (AST::AttrInputMacro &)
+{}
+
void
ResolverBase::visit (AST::MetaItemLitExpr &)
{}
diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h
index f9aff167322..2db579d7b76 100644
--- a/gcc/rust/resolve/rust-ast-resolve-base.h
+++ b/gcc/rust/resolve/rust-ast-resolve-base.h
@@ -48,6 +48,7 @@ public:
void visit (AST::QualifiedPathInType &);
void visit (AST::LiteralExpr &);
void visit (AST::AttrInputLiteral &);
+ void visit (AST::AttrInputMacro &);
void visit (AST::MetaItemLitExpr &);
void visit (AST::MetaItemPathLit &);
void visit (AST::BorrowExpr &);
diff --git a/gcc/rust/resolve/rust-early-name-resolver.cc b/gcc/rust/resolve/rust-early-name-resolver.cc
index 2165eed267f..2514a2ac3d3 100644
--- a/gcc/rust/resolve/rust-early-name-resolver.cc
+++ b/gcc/rust/resolve/rust-early-name-resolver.cc
@@ -221,6 +221,10 @@ void
EarlyNameResolver::visit (AST::AttrInputLiteral &)
{}
+void
+EarlyNameResolver::visit (AST::AttrInputMacro &)
+{}
+
void
EarlyNameResolver::visit (AST::MetaItemLitExpr &)
{}
diff --git a/gcc/rust/resolve/rust-early-name-resolver.h b/gcc/rust/resolve/rust-early-name-resolver.h
index 4d2ef989ba6..e4b48566063 100644
--- a/gcc/rust/resolve/rust-early-name-resolver.h
+++ b/gcc/rust/resolve/rust-early-name-resolver.h
@@ -142,6 +142,7 @@ private:
virtual void visit (AST::QualifiedPathInType &path);
virtual void visit (AST::LiteralExpr &expr);
virtual void visit (AST::AttrInputLiteral &attr_input);
+ virtual void visit (AST::AttrInputMacro &attr_input);
virtual void visit (AST::MetaItemLitExpr &meta_item);
virtual void visit (AST::MetaItemPathLit &meta_item);
virtual void visit (AST::BorrowExpr &expr);
diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc
index 92f0d644d98..63bb57f3cd4 100644
--- a/gcc/rust/util/rust-attributes.cc
+++ b/gcc/rust/util/rust-attributes.cc
@@ -163,6 +163,7 @@ check_doc_attribute (const AST::Attribute &attribute)
switch (attribute.get_attr_input ().get_attr_input_type ())
{
case AST::AttrInput::LITERAL:
+ case AST::AttrInput::MACRO:
case AST::AttrInput::META_ITEM:
break;
// FIXME: Handle them as well
@@ -280,6 +281,10 @@ void
AttributeChecker::visit (AST::AttrInputLiteral &)
{}
+void
+AttributeChecker::visit (AST::AttrInputMacro &)
+{}
+
void
AttributeChecker::visit (AST::MetaItemLitExpr &)
{}
diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h
index 1be2034c914..1259d140009 100644
--- a/gcc/rust/util/rust-attributes.h
+++ b/gcc/rust/util/rust-attributes.h
@@ -113,6 +113,7 @@ private:
// rust-expr.h
void visit (AST::LiteralExpr &expr);
void visit (AST::AttrInputLiteral &attr_input);
+ void visit (AST::AttrInputMacro &attr_input);
void visit (AST::MetaItemLitExpr &meta_item);
void visit (AST::MetaItemPathLit &meta_item);
void visit (AST::BorrowExpr &expr);
More information about the Gcc-cvs
mailing list