aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/ast/rust-ast-full-test.cc4
-rw-r--r--gcc/rust/ast/rust-item.h59
-rw-r--r--gcc/rust/ast/rust-type.h2
-rw-r--r--gcc/rust/hir/rust-ast-lower-implitem.h16
-rw-r--r--gcc/rust/hir/rust-ast-lower-stmt.h4
-rw-r--r--gcc/rust/hir/rust-ast-lower-type.h4
-rw-r--r--gcc/rust/hir/rust-ast-lower.cc18
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-test.cc4
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h14
-rw-r--r--gcc/rust/parse/rust-parse-impl.h7
-rw-r--r--gcc/rust/util/rust-common.h7
11 files changed, 44 insertions, 95 deletions
diff --git a/gcc/rust/ast/rust-ast-full-test.cc b/gcc/rust/ast/rust-ast-full-test.cc
index 8780853..91bd6a5 100644
--- a/gcc/rust/ast/rust-ast-full-test.cc
+++ b/gcc/rust/ast/rust-ast-full-test.cc
@@ -2288,10 +2288,10 @@ FunctionQualifiers::as_string () const
case NONE:
// do nothing
break;
- case CONST:
+ case CONST_FN:
str += "const ";
break;
- case ASYNC:
+ case ASYNC_FN:
str += "async ";
break;
default:
diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index ad503cf..1829358 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -21,6 +21,7 @@
#include "rust-ast.h"
#include "rust-path.h"
+#include "rust-common.h"
namespace Rust {
namespace AST {
@@ -487,12 +488,6 @@ struct FunctionQualifiers
public:
/* Whether the function is neither const nor async, const only, or async
* only. */
- enum AsyncConstStatus
- {
- NONE,
- CONST,
- ASYNC
- };
private:
AsyncConstStatus const_status;
@@ -705,34 +700,17 @@ protected:
// A method (function belonging to a type)
class Method : public InherentImplItem, public TraitImplItem
{
- // moved from impl items for consistency
std::vector<Attribute> outer_attrs;
Visibility vis;
-
FunctionQualifiers qualifiers;
Identifier method_name;
-
- // bool has_generics;
- // Generics generic_params;
- std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined
-
+ std::vector<std::unique_ptr<GenericParam>> generic_params;
SelfParam self_param;
-
- // bool has_params;
- // FunctionParams function_params;
- std::vector<FunctionParam> function_params; // inlined
-
- // bool has_return_type;
- // FunctionReturnType return_type;
- std::unique_ptr<Type> return_type; // inlined
-
- // bool has_where_clause;
+ std::vector<FunctionParam> function_params;
+ std::unique_ptr<Type> return_type;
WhereClause where_clause;
-
std::unique_ptr<BlockExpr> function_body;
-
Location locus;
-
NodeId node_id;
public:
@@ -746,7 +724,7 @@ public:
// Creates an error state method.
static Method create_error ()
{
- return Method ("", FunctionQualifiers (FunctionQualifiers::NONE, true),
+ return Method ("", FunctionQualifiers (NONE, true),
std::vector<std::unique_ptr<GenericParam>> (),
SelfParam::create_error (), std::vector<FunctionParam> (),
nullptr, WhereClause::create_empty (), nullptr,
@@ -904,6 +882,8 @@ public:
Location get_locus () const override final { return locus; }
+ FunctionQualifiers get_qualifiers () { return qualifiers; }
+
protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
@@ -1439,11 +1419,6 @@ protected:
}
};
-// Parameters used in a function - TODO inline?
-/*struct FunctionParams {
- std::vector<FunctionParam> function_params;
-};*/
-
class LetStmt;
// Rust function declaration AST node
@@ -1451,23 +1426,11 @@ class Function : public VisItem, public InherentImplItem, public TraitImplItem
{
FunctionQualifiers qualifiers;
Identifier function_name;
-
- // bool has_generics;
- // Generics generic_params;
- std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined
-
- // bool has_function_params;
- // FunctionParams function_params;
- std::vector<FunctionParam> function_params; // inlined
-
- // bool has_function_return_type;
+ std::vector<std::unique_ptr<GenericParam>> generic_params;
+ std::vector<FunctionParam> function_params;
std::unique_ptr<Type> return_type;
-
- // bool has_where_clause;
WhereClause where_clause;
-
std::unique_ptr<BlockExpr> function_body;
-
Location locus;
public:
@@ -2841,6 +2804,8 @@ public:
// TODO: is this better? Or is a "vis_block" better?
WhereClause &get_where_clause () { return where_clause; }
+
+ FunctionQualifiers get_qualifiers () { return qualifiers; }
};
// Actual trait item function declaration within traits
@@ -3067,6 +3032,8 @@ public:
SelfParam &get_self_param () { return self_param; }
const SelfParam &get_self_param () const { return self_param; }
+
+ FunctionQualifiers get_qualifiers () { return qualifiers; }
};
// Actual trait item method declaration within traits
diff --git a/gcc/rust/ast/rust-type.h b/gcc/rust/ast/rust-type.h
index 2414b60..9f7fb54 100644
--- a/gcc/rust/ast/rust-type.h
+++ b/gcc/rust/ast/rust-type.h
@@ -928,6 +928,8 @@ public:
return return_type;
}
+ FunctionQualifiers get_function_qualifiers () { return function_qualifiers; }
+
protected:
/* Use covariance to implement clone function as returning this object rather
* than base */
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h
index 3613df5..f68b3f0 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.h
+++ b/gcc/rust/hir/rust-ast-lower-implitem.h
@@ -118,8 +118,8 @@ public:
// ignore for now and leave empty
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
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
@@ -202,8 +202,8 @@ public:
// ignore for now and leave empty
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (method.get_qualifiers ());
HIR::Visibility vis = HIR::Visibility::create_public ();
// need
@@ -314,8 +314,8 @@ public:
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ());
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
if (ref.has_generics ())
@@ -392,8 +392,8 @@ public:
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ());
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
if (ref.has_generics ())
diff --git a/gcc/rust/hir/rust-ast-lower-stmt.h b/gcc/rust/hir/rust-ast-lower-stmt.h
index 27fdd22..5ce573e 100644
--- a/gcc/rust/hir/rust-ast-lower-stmt.h
+++ b/gcc/rust/hir/rust-ast-lower-stmt.h
@@ -356,8 +356,8 @@ public:
// ignore for now and leave empty
std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
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
diff --git a/gcc/rust/hir/rust-ast-lower-type.h b/gcc/rust/hir/rust-ast-lower-type.h
index 858984c..4042908 100644
--- a/gcc/rust/hir/rust-ast-lower-type.h
+++ b/gcc/rust/hir/rust-ast-lower-type.h
@@ -135,8 +135,8 @@ public:
{
bool is_variadic = false;
std::vector<HIR::LifetimeParam> lifetime_params;
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (fntype.get_function_qualifiers ());
std::vector<HIR::MaybeNamedParam> named_params;
for (auto &param : fntype.get_function_params ())
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index d6f5cf2..87fc523 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -597,20 +597,6 @@ struct_field_name_exists (std::vector<HIR::StructField> &fields,
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 ();
@@ -618,8 +604,8 @@ ASTLoweringBase::lower_qualifiers (const AST::FunctionQualifiers &qualifiers)
// 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);
+ return HIR::FunctionQualifiers (qualifiers.get_const_status (), unsafety,
+ has_extern, extern_abi);
}
} // namespace HIR
diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc
index adc8eea..50979d4 100644
--- a/gcc/rust/hir/tree/rust-hir-full-test.cc
+++ b/gcc/rust/hir/tree/rust-hir-full-test.cc
@@ -2040,10 +2040,10 @@ FunctionQualifiers::as_string () const
case NONE:
// do nothing
break;
- case CONST:
+ case CONST_FN:
str += "const ";
break;
- case ASYNC:
+ case ASYNC_FN:
str += "async ";
break;
default:
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index 09f9d38..cd8b960 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -477,16 +477,6 @@ public:
// Qualifiers for function, i.e. const, unsafe, extern etc.
struct FunctionQualifiers
{
-public:
- /* Whether the function is neither const nor async, const only, or async
- * only. */
- enum AsyncConstStatus
- {
- NONE,
- CONST,
- ASYNC
- };
-
private:
AsyncConstStatus const_status;
Unsafety unsafety;
@@ -494,8 +484,6 @@ private:
std::string extern_abi; // e.g. extern "C" fn() -> i32 {}
// TODO: maybe ensure that extern_abi only exists if extern exists?
- // should this store location info?
-
public:
FunctionQualifiers (AsyncConstStatus const_status, Unsafety unsafety,
bool has_extern = false,
@@ -514,7 +502,7 @@ public:
AsyncConstStatus get_status () const { return const_status; }
- bool is_const () const { return const_status == AsyncConstStatus::CONST; }
+ bool is_const () const { return const_status == AsyncConstStatus::CONST_FN; }
};
// A function parameter
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index aabb15c..0e39e48 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -2602,8 +2602,7 @@ template <typename ManagedTokenSource>
AST::FunctionQualifiers
Parser<ManagedTokenSource>::parse_function_qualifiers ()
{
- AST::FunctionQualifiers::AsyncConstStatus const_status
- = AST::FunctionQualifiers::NONE;
+ AsyncConstStatus const_status = NONE;
// bool has_const = false;
bool has_unsafe = false;
bool has_extern = false;
@@ -2615,11 +2614,11 @@ Parser<ManagedTokenSource>::parse_function_qualifiers ()
{
case CONST:
lexer.skip_token ();
- const_status = AST::FunctionQualifiers::CONST;
+ const_status = CONST_FN;
break;
case ASYNC:
lexer.skip_token ();
- const_status = AST::FunctionQualifiers::ASYNC;
+ const_status = ASYNC_FN;
break;
default:
// const status is still none
diff --git a/gcc/rust/util/rust-common.h b/gcc/rust/util/rust-common.h
index 6d511ba..b8a2ac3 100644
--- a/gcc/rust/util/rust-common.h
+++ b/gcc/rust/util/rust-common.h
@@ -41,6 +41,13 @@ enum Polarity
Negative
};
+enum AsyncConstStatus
+{
+ NONE,
+ CONST_FN,
+ ASYNC_FN
+};
+
} // namespace Rust
#endif // RUST_COMMON