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).