public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] Add HIR lowering for FunctionQualifiers
@ 2022-06-08 11:59 Thomas Schwinge
0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2022-06-08 11:59 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:06c2a74f557ec98896c9f71ba666bd969c4735d2
commit 06c2a74f557ec98896c9f71ba666bd969c4735d2
Author: Philip Herron <philip.herron@embecosm.com>
Date: Thu Jan 13 21:29:06 2022 +0000
Add HIR lowering for FunctionQualifiers
Diff:
---
gcc/rust/ast/rust-item.h | 7 ++++++-
gcc/rust/hir/rust-ast-lower-base.h | 3 +++
gcc/rust/hir/rust-ast-lower-item.h | 5 ++---
gcc/rust/hir/rust-ast-lower.cc | 28 ++++++++++++++++++++++++++++
gcc/rust/hir/tree/rust-hir-item.h | 6 +++++-
5 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index a18a8e6e42a..ad503cfce23 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -518,6 +518,11 @@ public:
}
std::string as_string () const;
+
+ AsyncConstStatus get_const_status () const { return const_status; }
+ bool is_unsafe () const { return has_unsafe; }
+ bool is_extern () const { return has_extern; }
+ std::string get_extern_abi () const { return extern_abi; }
};
// A function parameter
@@ -1587,7 +1592,7 @@ public:
return function_body;
}
- FunctionQualifiers get_qualifiers () const { return qualifiers; }
+ const FunctionQualifiers &get_qualifiers () const { return qualifiers; }
Identifier get_function_name () const { return function_name; }
diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h
index 457ca1d114f..047d531c25f 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -278,6 +278,9 @@ protected:
HIR::QualifiedPathType
lower_qual_path_type (AST::QualifiedPathType &qual_path_type);
+
+ HIR::FunctionQualifiers
+ lower_qualifiers (const AST::FunctionQualifiers &qualifiers);
};
} // namespace HIR
diff --git a/gcc/rust/hir/rust-ast-lower-item.h b/gcc/rust/hir/rust-ast-lower-item.h
index 60315dba0e3..af9e1299946 100644
--- a/gcc/rust/hir/rust-ast-lower-item.h
+++ b/gcc/rust/hir/rust-ast-lower-item.h
@@ -429,8 +429,8 @@ public:
}
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (function.get_qualifiers ());
HIR::Visibility vis = HIR::Visibility::create_public ();
// need
@@ -439,7 +439,6 @@ public:
{
generic_params = lower_generic_params (function.get_generic_params ());
}
-
Identifier function_name = function.get_function_name ();
Location locus = function.get_locus ();
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index d8d53eb0cc6..326412b4663 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -593,5 +593,33 @@ struct_field_name_exists (std::vector<HIR::StructField> &fields,
return false;
}
+HIR::FunctionQualifiers
+ASTLoweringBase::lower_qualifiers (const AST::FunctionQualifiers &qualifiers)
+{
+ HIR::FunctionQualifiers::AsyncConstStatus const_status;
+ switch (qualifiers.get_const_status ())
+ {
+ case AST::FunctionQualifiers::AsyncConstStatus::NONE:
+ const_status = HIR::FunctionQualifiers::AsyncConstStatus::NONE;
+ break;
+ case AST::FunctionQualifiers::AsyncConstStatus::CONST:
+ const_status = HIR::FunctionQualifiers::AsyncConstStatus::CONST;
+ break;
+ case AST::FunctionQualifiers::AsyncConstStatus::ASYNC:
+ const_status = HIR::FunctionQualifiers::AsyncConstStatus::ASYNC;
+ break;
+ }
+
+ Unsafety unsafety
+ = qualifiers.is_unsafe () ? Unsafety::Unsafe : Unsafety::Normal;
+ bool has_extern = qualifiers.is_extern ();
+
+ // FIXME turn this into the Rust::ABI enum
+ std::string extern_abi = qualifiers.get_extern_abi ();
+
+ return HIR::FunctionQualifiers (const_status, unsafety, has_extern,
+ extern_abi);
+}
+
} // namespace HIR
} // namespace Rust
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index fb45bfa6de4..09f9d381ef5 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -511,6 +511,10 @@ public:
}
std::string as_string () const;
+
+ AsyncConstStatus get_status () const { return const_status; }
+
+ bool is_const () const { return const_status == AsyncConstStatus::CONST; }
};
// A function parameter
@@ -1216,7 +1220,7 @@ public:
return function_body;
}
- FunctionQualifiers get_qualifiers () const { return qualifiers; }
+ const FunctionQualifiers &get_qualifiers () const { return qualifiers; }
Identifier get_function_name () const { return function_name; }
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-06-08 11:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-08 11:59 [gcc/devel/rust/master] Add HIR lowering for FunctionQualifiers Thomas Schwinge
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).