aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-10-23 17:06:43 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:09:25 +0100
commit91732258cedf367ac0f4dbe75aef7d0e22d46b3a (patch)
tree5459d85e46579cd5540579c5316fac555e859eb6
parentd3f0867e7120f3fb43ac9a4e15eee98fce5fef78 (diff)
downloadgcc-91732258cedf367ac0f4dbe75aef7d0e22d46b3a.zip
gcc-91732258cedf367ac0f4dbe75aef7d0e22d46b3a.tar.gz
gcc-91732258cedf367ac0f4dbe75aef7d0e22d46b3a.tar.bz2
gccrs: Parse const with no value expression
Const with no value expression may exist either in trait or in disabled blocks. This means we should be able to parse those correctly. gcc/rust/ChangeLog: * ast/rust-item.h: Add a new constructor for const with no value expression. * parse/rust-parse-impl.h (Parser::parse_const_item): Allow const with no expression value. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r--gcc/rust/ast/rust-item.h7
-rw-r--r--gcc/rust/parse/rust-parse-impl.h10
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index b91e18d..eba86dc 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -2604,6 +2604,13 @@ public:
const_expr (std::move (const_expr)), locus (locus)
{}
+ ConstantItem (std::string ident, Visibility vis, std::unique_ptr<Type> type,
+ std::vector<Attribute> outer_attrs, location_t locus)
+ : VisItem (std::move (vis), std::move (outer_attrs)),
+ identifier (std::move (ident)), type (std::move (type)),
+ const_expr (nullptr), locus (locus)
+ {}
+
ConstantItem (ConstantItem const &other)
: VisItem (other), identifier (other.identifier), locus (other.locus)
{
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index 7844f72..4738393 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -4783,6 +4783,16 @@ Parser<ManagedTokenSource>::parse_const_item (AST::Visibility vis,
// parse constant type (required)
std::unique_ptr<AST::Type> type = parse_type ();
+ // A const with no given expression value
+ if (lexer.peek_token ()->get_id () == SEMICOLON)
+ {
+ lexer.skip_token ();
+ return std::unique_ptr<AST::ConstantItem> (
+ new AST::ConstantItem (std::move (ident), std::move (vis),
+ std::move (type), std::move (outer_attrs),
+ locus));
+ }
+
if (!skip_token (EQUAL))
{
skip_after_semicolon ();