diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-11-09 19:45:08 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 19:13:14 +0100 |
commit | c1d722aa6f011a1584b1815bfbfb8d2733c1ba34 (patch) | |
tree | 00f3b4324e2c6c914cfc76387106325400f228aa | |
parent | 119e0be8b6eea63a95c89d449c38aa133e6ad5ab (diff) | |
download | gcc-c1d722aa6f011a1584b1815bfbfb8d2733c1ba34.zip gcc-c1d722aa6f011a1584b1815bfbfb8d2733c1ba34.tar.gz gcc-c1d722aa6f011a1584b1815bfbfb8d2733c1ba34.tar.bz2 |
gccrs: Add trait context to ContextualASTVisitor
Some construct are forbidden in trait context (eg. pub, async...) and
we'll need to reject those. To do so we need to identify a trait context.
gcc/rust/ChangeLog:
* ast/rust-ast-visitor.cc (ContextualASTVisitor::visit): Push the new
trait context when visiting a trait.
* ast/rust-ast-visitor.h: Add visit function prototype and TRAIT
context.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | gcc/rust/ast/rust-ast-visitor.cc | 8 | ||||
-rw-r--r-- | gcc/rust/ast/rust-ast-visitor.h | 3 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc index b9ff2f9..b4d1011 100644 --- a/gcc/rust/ast/rust-ast-visitor.cc +++ b/gcc/rust/ast/rust-ast-visitor.cc @@ -1462,5 +1462,13 @@ ContextualASTVisitor::visit (AST::TraitImpl &impl) pop_context (); } +void +ContextualASTVisitor::visit (AST::Trait &trait) +{ + push_context (Context::TRAIT); + DefaultASTVisitor::visit (trait); + pop_context (); +} + } // namespace AST } // namespace Rust diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 0f66dbe..d6340e7 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -442,6 +442,7 @@ protected: FUNCTION, INHERENT_IMPL, TRAIT_IMPL, + TRAIT, MODULE, CRATE, }; @@ -453,6 +454,8 @@ protected: virtual void visit (AST::TraitImpl &impl) override; + virtual void visit (AST::Trait &trait) override; + template <typename T> void visit (T &item) { DefaultASTVisitor::visit (item); |