diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/ast/rust-ast-full-test.cc | 4 | ||||
-rw-r--r-- | gcc/rust/ast/rust-item.h | 59 | ||||
-rw-r--r-- | gcc/rust/ast/rust-type.h | 2 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-implitem.h | 16 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-stmt.h | 4 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-type.h | 4 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower.cc | 18 | ||||
-rw-r--r-- | gcc/rust/hir/tree/rust-hir-full-test.cc | 4 | ||||
-rw-r--r-- | gcc/rust/hir/tree/rust-hir-item.h | 14 | ||||
-rw-r--r-- | gcc/rust/parse/rust-parse-impl.h | 7 | ||||
-rw-r--r-- | gcc/rust/util/rust-common.h | 7 |
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 ¶m : 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 |