diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/ast/rust-ast-full-decls.h | 2 | ||||
-rw-r--r-- | gcc/rust/ast/rust-ast-full-test.cc | 36 | ||||
-rw-r--r-- | gcc/rust/ast/rust-ast-visitor.h | 3 | ||||
-rw-r--r-- | gcc/rust/ast/rust-item.h | 349 | ||||
-rw-r--r-- | gcc/rust/expand/rust-macro-expand.cc | 26 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-base.h | 3 | ||||
-rw-r--r-- | gcc/rust/parse/rust-parse-impl.h | 16 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-base.h | 3 |
8 files changed, 200 insertions, 238 deletions
diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index ebd2b2a..7644dfe 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -182,8 +182,6 @@ struct Visibility; class Method; class VisItem; class Module; -class ModuleBodied; -class ModuleNoBody; class ExternCrate; class UseTree; class UseTreeGlob; diff --git a/gcc/rust/ast/rust-ast-full-test.cc b/gcc/rust/ast/rust-ast-full-test.cc index 5d32139..dfd9cdb 100644 --- a/gcc/rust/ast/rust-ast-full-test.cc +++ b/gcc/rust/ast/rust-ast-full-test.cc @@ -379,22 +379,20 @@ VisItem::as_string () const std::string Module::as_string () const { - std::string vis_item = VisItem::as_string (); + std::string str = VisItem::as_string () + "mod " + module_name; - return vis_item + "mod " + module_name; -} - -std::string -ModuleBodied::as_string () const -{ - // get module string for "[vis] mod [name]" - std::string str = Module::as_string (); + // Return early if we're dealing with an unloaded module as their body resides + // in a different file + if (kind == ModuleKind::UNLOADED) + return str + "\n no body (reference to external file)\n"; // inner attributes str += append_attributes (inner_attrs, INNER); // items str += "\n items: "; + + // This can still happen if the module is loaded but empty, i.e. `mod foo {}` if (items.empty ()) { str += "none"; @@ -419,16 +417,6 @@ ModuleBodied::as_string () const } std::string -ModuleNoBody::as_string () const -{ - std::string str = Module::as_string (); - - str += "\n no body (reference to external file)"; - - return str + "\n"; -} - -std::string StaticItem::as_string () const { std::string str = VisItem::as_string (); @@ -4053,7 +4041,7 @@ AttrInputMetaItemContainer::as_string () const /* Override that calls the function recursively on all items contained within * the module. */ void -ModuleBodied::add_crate_name (std::vector<std::string> &names) const +Module::add_crate_name (std::vector<std::string> &names) const { /* TODO: test whether module has been 'cfg'-ed out to determine whether to * exclude it from search */ @@ -5381,13 +5369,7 @@ Method::accept_vis (ASTVisitor &vis) } void -ModuleBodied::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -ModuleNoBody::accept_vis (ASTVisitor &vis) +Module::accept_vis (ASTVisitor &vis) { vis.visit (*this); } diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index a2b505b..e0de54d 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -143,8 +143,7 @@ public: virtual void visit (LifetimeWhereClauseItem &item) = 0; virtual void visit (TypeBoundWhereClauseItem &item) = 0; virtual void visit (Method &method) = 0; - virtual void visit (ModuleBodied &module) = 0; - virtual void visit (ModuleNoBody &module) = 0; + virtual void visit (Module &module) = 0; virtual void visit (ExternCrate &crate) = 0; // virtual void visit(UseTree& use_tree) = 0; virtual void visit (UseTreeGlob &use_tree) = 0; diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 6b0021a..32fb56f 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -57,7 +57,7 @@ class TypeParam : public GenericParam // bool has_type_param_bounds; // TypeParamBounds type_param_bounds; - std::vector<std::unique_ptr<TypeParamBound> > + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds; // inlined form // bool has_type; @@ -78,8 +78,8 @@ public: bool has_outer_attribute () const { return !outer_attr.is_empty (); } TypeParam (Identifier type_representation, Location locus = Location (), - std::vector<std::unique_ptr<TypeParamBound> > type_param_bounds - = std::vector<std::unique_ptr<TypeParamBound> > (), + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds + = std::vector<std::unique_ptr<TypeParamBound>> (), std::unique_ptr<Type> type = nullptr, Attribute outer_attr = Attribute::create_empty ()) : GenericParam (Analysis::Mappings::get ()->get_next_node_id ()), @@ -144,11 +144,11 @@ public: } // TODO: mutable getter seems kinda dodgy - std::vector<std::unique_ptr<TypeParamBound> > &get_type_param_bounds () + std::vector<std::unique_ptr<TypeParamBound>> &get_type_param_bounds () { return type_param_bounds; } - const std::vector<std::unique_ptr<TypeParamBound> > & + const std::vector<std::unique_ptr<TypeParamBound>> & get_type_param_bounds () const { return type_param_bounds; @@ -224,7 +224,7 @@ class TypeBoundWhereClauseItem : public WhereClauseItem // bool has_type_param_bounds; // TypeParamBounds type_param_bounds; - std::vector<std::unique_ptr<TypeParamBound> > + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds; // inlined form // should this store location info? @@ -238,7 +238,7 @@ public: TypeBoundWhereClauseItem ( std::vector<LifetimeParam> for_lifetimes, std::unique_ptr<Type> bound_type, - std::vector<std::unique_ptr<TypeParamBound> > type_param_bounds) + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds) : for_lifetimes (std::move (for_lifetimes)), bound_type (std::move (bound_type)), type_param_bounds (std::move (type_param_bounds)) @@ -284,11 +284,11 @@ public: } // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector<std::unique_ptr<TypeParamBound> > &get_type_param_bounds () + std::vector<std::unique_ptr<TypeParamBound>> &get_type_param_bounds () { return type_param_bounds; } - const std::vector<std::unique_ptr<TypeParamBound> > & + const std::vector<std::unique_ptr<TypeParamBound>> & get_type_param_bounds () const { return type_param_bounds; @@ -306,13 +306,12 @@ protected: struct WhereClause { private: - std::vector<std::unique_ptr<WhereClauseItem> > where_clause_items; + std::vector<std::unique_ptr<WhereClauseItem>> where_clause_items; // should this store location info? public: - WhereClause ( - std::vector<std::unique_ptr<WhereClauseItem> > where_clause_items) + WhereClause (std::vector<std::unique_ptr<WhereClauseItem>> where_clause_items) : where_clause_items (std::move (where_clause_items)) {} @@ -341,7 +340,7 @@ public: // Creates a WhereClause with no items. static WhereClause create_empty () { - return WhereClause (std::vector<std::unique_ptr<WhereClauseItem> > ()); + return WhereClause (std::vector<std::unique_ptr<WhereClauseItem>> ()); } // Returns whether the WhereClause has no items. @@ -350,11 +349,11 @@ public: std::string as_string () const; // TODO: this mutable getter seems kinda dodgy - std::vector<std::unique_ptr<WhereClauseItem> > &get_items () + std::vector<std::unique_ptr<WhereClauseItem>> &get_items () { return where_clause_items; } - const std::vector<std::unique_ptr<WhereClauseItem> > &get_items () const + const std::vector<std::unique_ptr<WhereClauseItem>> &get_items () const { return where_clause_items; } @@ -698,7 +697,7 @@ class Method : public InherentImplItem, public TraitImplItem // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined SelfParam self_param; @@ -731,7 +730,7 @@ public: static Method create_error () { return Method ("", FunctionQualifiers (FunctionQualifiers::NONE, true), - std::vector<std::unique_ptr<GenericParam> > (), + std::vector<std::unique_ptr<GenericParam>> (), SelfParam::create_error (), std::vector<FunctionParam> (), nullptr, WhereClause::create_empty (), nullptr, Visibility::create_error (), std::vector<Attribute> (), {}); @@ -754,7 +753,7 @@ public: // Mega-constructor with all possible fields Method (Identifier method_name, FunctionQualifiers qualifiers, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, SelfParam self_param, std::vector<FunctionParam> function_params, std::unique_ptr<Type> return_type, WhereClause where_clause, std::unique_ptr<BlockExpr> function_body, Visibility vis, @@ -853,11 +852,11 @@ public: return function_params; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -961,134 +960,127 @@ public: // Rust module item - abstract base class class Module : public VisItem { - Identifier module_name; - Location locus; - -protected: - // Protected constructor - Module (Identifier module_name, Visibility visibility, Location locus, - std::vector<Attribute> outer_attrs = std::vector<Attribute> ()) - : VisItem (std::move (visibility), std::move (outer_attrs)), - module_name (module_name), locus (locus) - {} - public: - std::string as_string () const override; - - Location get_locus () const { return locus; } + // Type of the current module. A module can be either loaded or unloaded, + // meaning that the items of the module can already be present or not. For + // example, the following module would be loaded: `mod foo { fn bar() {} }`. + // However, the module would be unloaded if it refers to an external file (i.e + // `mod foo;`) and then become loaded upon expansion. + enum ModuleKind + { + LOADED, + UNLOADED, + }; - // Invalid if name is empty, so base stripping on that. - void mark_for_strip () override { module_name = ""; } - bool is_marked_for_strip () const override { return module_name.empty (); } -}; +private: + Identifier module_name; + Location locus; + ModuleKind kind; -// Module with a body, defined in file -class ModuleBodied : public Module -{ // bool has_inner_attrs; std::vector<Attribute> inner_attrs; // bool has_items; - std::vector<std::unique_ptr<Item> > items; + std::vector<std::unique_ptr<Item>> items; -public: - std::string as_string () const override; + void clone_items (const std::vector<std::unique_ptr<Item>> &other_items) + { + items.reserve (other_items.size ()); + for (const auto &e : other_items) + items.push_back (e->clone_item ()); + } +public: // Returns whether the module has items in its body. bool has_items () const { return !items.empty (); } // Returns whether the module has any inner attributes. bool has_inner_attrs () const { return !inner_attrs.empty (); } - // Full constructor - ModuleBodied (Identifier name, Location locus, - std::vector<std::unique_ptr<Item> > items - = std::vector<std::unique_ptr<Item> > (), - Visibility visibility = Visibility::create_error (), - std::vector<Attribute> inner_attrs = std::vector<Attribute> (), - std::vector<Attribute> outer_attrs = std::vector<Attribute> ()) - : Module (std::move (name), std::move (visibility), locus, - std::move (outer_attrs)), + // Unloaded module constructor + Module (Identifier module_name, Visibility visibility, + std::vector<Attribute> outer_attrs, Location locus) + : VisItem (std::move (visibility), std::move (outer_attrs)), + module_name (module_name), locus (locus), kind (ModuleKind::UNLOADED), + inner_attrs (std::vector<Attribute> ()), + items (std::vector<std::unique_ptr<Item>> ()) + {} + + // Loaded module constructor, with items + Module (Identifier name, Location locus, + std::vector<std::unique_ptr<Item>> items, + Visibility visibility = Visibility::create_error (), + std::vector<Attribute> inner_attrs = std::vector<Attribute> (), + std::vector<Attribute> outer_attrs = std::vector<Attribute> ()) + : VisItem (std::move (visibility), std::move (outer_attrs)), + module_name (name), locus (locus), kind (ModuleKind::LOADED), inner_attrs (std::move (inner_attrs)), items (std::move (items)) {} // Copy constructor with vector clone - ModuleBodied (ModuleBodied const &other) - : Module (other), inner_attrs (other.inner_attrs) - { - items.reserve (other.items.size ()); - for (const auto &e : other.items) - items.push_back (e->clone_item ()); + Module (Module const &other) + : VisItem (other), module_name (other.module_name), locus (other.locus), + kind (other.kind), inner_attrs (other.inner_attrs) + { + // We need to check whether we are copying a loaded module or an unloaded + // one. In the second case, clear the `items` vector. + if (other.kind == LOADED) + clone_items (other.items); + else + items.clear (); } // Overloaded assignment operator with vector clone - ModuleBodied &operator= (ModuleBodied const &other) + Module &operator= (Module const &other) { - Module::operator= (other); + VisItem::operator= (other); + + module_name = other.module_name; + locus = other.locus; + kind = other.kind; inner_attrs = other.inner_attrs; - items.reserve (other.items.size ()); - for (const auto &e : other.items) - items.push_back (e->clone_item ()); + // Likewise, we need to clear the `items` vector in case the other module is + // unloaded + if (kind == LOADED) + clone_items (other.items); + else + items.clear (); return *this; } - // move constructors - ModuleBodied (ModuleBodied &&other) = default; - ModuleBodied &operator= (ModuleBodied &&other) = default; - void accept_vis (ASTVisitor &vis) override; /* Override that runs the function recursively on all items contained within * the module. */ void add_crate_name (std::vector<std::string> &names) const override; + // Returns the kind of the module + enum ModuleKind get_kind () const { return kind; } + // TODO: think of better way to do this - mutable getter seems dodgy const std::vector<Attribute> &get_inner_attrs () const { return inner_attrs; } std::vector<Attribute> &get_inner_attrs () { return inner_attrs; } - const std::vector<std::unique_ptr<Item> > &get_items () const - { - return items; - } - std::vector<std::unique_ptr<Item> > &get_items () { return items; } + const std::vector<std::unique_ptr<Item>> &get_items () const { return items; } + std::vector<std::unique_ptr<Item>> &get_items () { return items; } -protected: - /* Use covariance to implement clone function as returning this object - * rather than base */ - ModuleBodied *clone_item_impl () const override - { - return new ModuleBodied (*this); - } -}; + // move constructors + Module (Module &&other) = default; + Module &operator= (Module &&other) = default; -// Module without a body, loaded from external file -class ModuleNoBody : public Module -{ - /* TODO: are modules loaded from file unique? As in, can you load the same - * file into two different other files? Because this may make the difference - * between simply replacing this with the module - * "definition" (as loaded from another file) vs this having to "reference" a - * module with body. */ -public: std::string as_string () const override; - // Full constructor - ModuleNoBody (Identifier name, Visibility visibility, - std::vector<Attribute> outer_attrs, Location locus) - : Module (std::move (name), std::move (visibility), locus, - std::move (outer_attrs)) - {} + Location get_locus () const { return locus; } - void accept_vis (ASTVisitor &vis) override; + // Invalid if name is empty, so base stripping on that. + void mark_for_strip () override { module_name = ""; } + bool is_marked_for_strip () const override { return module_name.empty (); } protected: /* Use covariance to implement clone function as returning this object * rather than base */ - ModuleNoBody *clone_item_impl () const override - { - return new ModuleNoBody (*this); - } + Module *clone_item_impl () const override { return new Module (*this); } }; // Rust extern crate declaration AST node @@ -1242,11 +1234,11 @@ private: PathType path_type; SimplePath path; - std::vector<std::unique_ptr<UseTree> > trees; + std::vector<std::unique_ptr<UseTree>> trees; public: UseTreeList (PathType path_type, SimplePath path, - std::vector<std::unique_ptr<UseTree> > trees, Location locus) + std::vector<std::unique_ptr<UseTree>> trees, Location locus) : UseTree (locus), path_type (path_type), path (std::move (path)), trees (std::move (trees)) { @@ -1430,7 +1422,7 @@ class Function : public VisItem, public InherentImplItem, public TraitImplItem // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_function_params; // FunctionParams function_params; @@ -1463,7 +1455,7 @@ public: // Mega-constructor with all possible fields Function (Identifier function_name, FunctionQualifiers qualifiers, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, std::vector<FunctionParam> function_params, std::unique_ptr<Type> return_type, WhereClause where_clause, std::unique_ptr<BlockExpr> function_body, Visibility vis, @@ -1554,11 +1546,11 @@ public: return function_params; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -1615,7 +1607,7 @@ class TypeAlias : public VisItem, public TraitImplItem // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_where_clause; WhereClause where_clause; @@ -1635,7 +1627,7 @@ public: // Mega-constructor with all possible fields TypeAlias (Identifier new_type_name, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, WhereClause where_clause, std::unique_ptr<Type> existing_type, Visibility vis, std::vector<Attribute> outer_attrs, Location locus) : VisItem (std::move (vis), std::move (outer_attrs)), @@ -1697,11 +1689,11 @@ public: return existing_type == nullptr; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -1744,7 +1736,7 @@ protected: // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_where_clause; WhereClause where_clause; @@ -1769,11 +1761,11 @@ public: Identifier get_struct_name () const { return struct_name; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -1789,7 +1781,7 @@ public: protected: Struct (Identifier struct_name, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, WhereClause where_clause, Visibility vis, Location locus, std::vector<Attribute> outer_attrs = std::vector<Attribute> ()) : VisItem (std::move (vis), std::move (outer_attrs)), @@ -1941,7 +1933,7 @@ public: // Mega-constructor with all possible fields StructStruct (std::vector<StructField> fields, Identifier struct_name, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, WhereClause where_clause, bool is_unit, Visibility vis, std::vector<Attribute> outer_attrs, Location locus) : Struct (std::move (struct_name), std::move (generic_params), @@ -1952,7 +1944,7 @@ public: // Unit struct constructor StructStruct (Identifier struct_name, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, WhereClause where_clause, Visibility vis, std::vector<Attribute> outer_attrs, Location locus) : Struct (std::move (struct_name), std::move (generic_params), @@ -2092,7 +2084,7 @@ public: // Mega-constructor with all possible fields TupleStruct (std::vector<TupleField> fields, Identifier struct_name, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, WhereClause where_clause, Visibility vis, std::vector<Attribute> outer_attrs, Location locus) : Struct (std::move (struct_name), std::move (generic_params), @@ -2304,12 +2296,12 @@ class Enum : public VisItem // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_where_clause; WhereClause where_clause; - std::vector<std::unique_ptr<EnumItem> > items; + std::vector<std::unique_ptr<EnumItem>> items; Location locus; @@ -2328,8 +2320,8 @@ public: // Mega-constructor Enum (Identifier enum_name, Visibility vis, - std::vector<std::unique_ptr<GenericParam> > generic_params, - WhereClause where_clause, std::vector<std::unique_ptr<EnumItem> > items, + std::vector<std::unique_ptr<GenericParam>> generic_params, + WhereClause where_clause, std::vector<std::unique_ptr<EnumItem>> items, std::vector<Attribute> outer_attrs, Location locus) : VisItem (std::move (vis), std::move (outer_attrs)), enum_name (std::move (enum_name)), @@ -2386,17 +2378,17 @@ public: bool is_marked_for_strip () const override { return enum_name.empty (); } // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector<std::unique_ptr<EnumItem> > &get_variants () { return items; } - const std::vector<std::unique_ptr<EnumItem> > &get_variants () const + std::vector<std::unique_ptr<EnumItem>> &get_variants () { return items; } + const std::vector<std::unique_ptr<EnumItem>> &get_variants () const { return items; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -2421,7 +2413,7 @@ class Union : public VisItem // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_where_clause; WhereClause where_clause; @@ -2440,7 +2432,7 @@ public: bool has_where_clause () const { return !where_clause.is_empty (); } Union (Identifier union_name, Visibility vis, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, WhereClause where_clause, std::vector<StructField> variants, std::vector<Attribute> outer_attrs, Location locus) : VisItem (std::move (vis), std::move (outer_attrs)), @@ -2502,11 +2494,11 @@ public: } } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -2757,7 +2749,7 @@ private: // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_params; // FunctionParams function_params; @@ -2788,7 +2780,7 @@ public: // Mega-constructor TraitFunctionDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, std::vector<FunctionParam> function_params, std::unique_ptr<Type> return_type, WhereClause where_clause) @@ -2854,11 +2846,11 @@ public: return function_params; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -2979,7 +2971,7 @@ private: // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined SelfParam self_param; @@ -3012,7 +3004,7 @@ public: // Mega-constructor TraitMethodDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, SelfParam self_param, std::vector<FunctionParam> function_params, std::unique_ptr<Type> return_type, WhereClause where_clause) @@ -3081,11 +3073,11 @@ public: return function_params; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -3315,7 +3307,7 @@ class TraitItemType : public TraitItem // bool has_type_param_bounds; // TypeParamBounds type_param_bounds; - std::vector<std::unique_ptr<TypeParamBound> > + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds; // inlined form Location locus; @@ -3324,10 +3316,9 @@ public: // Returns whether trait item type has type param bounds. bool has_type_param_bounds () const { return !type_param_bounds.empty (); } - TraitItemType ( - Identifier name, - std::vector<std::unique_ptr<TypeParamBound> > type_param_bounds, - std::vector<Attribute> outer_attrs, Location locus) + TraitItemType (Identifier name, + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds, + std::vector<Attribute> outer_attrs, Location locus) : TraitItem (), outer_attrs (std::move (outer_attrs)), name (std::move (name)), type_param_bounds (std::move (type_param_bounds)), locus (locus) @@ -3378,11 +3369,11 @@ public: const std::vector<Attribute> &get_outer_attrs () const { return outer_attrs; } // TODO: mutable getter seems kinda dodgy - std::vector<std::unique_ptr<TypeParamBound> > &get_type_param_bounds () + std::vector<std::unique_ptr<TypeParamBound>> &get_type_param_bounds () { return type_param_bounds; } - const std::vector<std::unique_ptr<TypeParamBound> > & + const std::vector<std::unique_ptr<TypeParamBound>> & get_type_param_bounds () const { return type_param_bounds; @@ -3403,11 +3394,11 @@ class Trait : public VisItem { bool has_unsafe; Identifier name; - std::vector<std::unique_ptr<GenericParam> > generic_params; - std::vector<std::unique_ptr<TypeParamBound> > type_param_bounds; + std::vector<std::unique_ptr<GenericParam>> generic_params; + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds; WhereClause where_clause; std::vector<Attribute> inner_attrs; - std::vector<std::unique_ptr<TraitItem> > trait_items; + std::vector<std::unique_ptr<TraitItem>> trait_items; Location locus; public: @@ -3434,10 +3425,10 @@ public: // Mega-constructor Trait (Identifier name, bool is_unsafe, - std::vector<std::unique_ptr<GenericParam> > generic_params, - std::vector<std::unique_ptr<TypeParamBound> > type_param_bounds, + std::vector<std::unique_ptr<GenericParam>> generic_params, + std::vector<std::unique_ptr<TypeParamBound>> type_param_bounds, WhereClause where_clause, - std::vector<std::unique_ptr<TraitItem> > trait_items, Visibility vis, + std::vector<std::unique_ptr<TraitItem>> trait_items, Visibility vis, std::vector<Attribute> outer_attrs, std::vector<Attribute> inner_attrs, Location locus) : VisItem (std::move (vis), std::move (outer_attrs)), @@ -3509,29 +3500,29 @@ public: const std::vector<Attribute> &get_inner_attrs () const { return inner_attrs; } std::vector<Attribute> &get_inner_attrs () { return inner_attrs; } - const std::vector<std::unique_ptr<TraitItem> > &get_trait_items () const + const std::vector<std::unique_ptr<TraitItem>> &get_trait_items () const { return trait_items; } - std::vector<std::unique_ptr<TraitItem> > &get_trait_items () + std::vector<std::unique_ptr<TraitItem>> &get_trait_items () { return trait_items; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } - std::vector<std::unique_ptr<TypeParamBound> > &get_type_param_bounds () + std::vector<std::unique_ptr<TypeParamBound>> &get_type_param_bounds () { return type_param_bounds; } - const std::vector<std::unique_ptr<TypeParamBound> > & + const std::vector<std::unique_ptr<TypeParamBound>> & get_type_param_bounds () const { return type_param_bounds; @@ -3561,7 +3552,7 @@ class Impl : public VisItem protected: // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined std::unique_ptr<Type> trait_type; @@ -3595,11 +3586,11 @@ public: const std::vector<Attribute> &get_inner_attrs () const { return inner_attrs; } std::vector<Attribute> &get_inner_attrs () { return inner_attrs; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -3620,7 +3611,7 @@ public: protected: // Mega-constructor - Impl (std::vector<std::unique_ptr<GenericParam> > generic_params, + Impl (std::vector<std::unique_ptr<GenericParam>> generic_params, std::unique_ptr<Type> trait_type, WhereClause where_clause, Visibility vis, std::vector<Attribute> inner_attrs, std::vector<Attribute> outer_attrs, Location locus) @@ -3675,7 +3666,7 @@ protected: class InherentImpl : public Impl { // bool has_impl_items; - std::vector<std::unique_ptr<InherentImplItem> > impl_items; + std::vector<std::unique_ptr<InherentImplItem>> impl_items; public: std::string as_string () const override; @@ -3684,8 +3675,8 @@ public: bool has_impl_items () const { return !impl_items.empty (); } // Mega-constructor - InherentImpl (std::vector<std::unique_ptr<InherentImplItem> > impl_items, - std::vector<std::unique_ptr<GenericParam> > generic_params, + InherentImpl (std::vector<std::unique_ptr<InherentImplItem>> impl_items, + std::vector<std::unique_ptr<GenericParam>> generic_params, std::unique_ptr<Type> trait_type, WhereClause where_clause, Visibility vis, std::vector<Attribute> inner_attrs, std::vector<Attribute> outer_attrs, Location locus) @@ -3722,11 +3713,11 @@ public: void accept_vis (ASTVisitor &vis) override; // TODO: think of better way to do this - const std::vector<std::unique_ptr<InherentImplItem> > &get_impl_items () const + const std::vector<std::unique_ptr<InherentImplItem>> &get_impl_items () const { return impl_items; } - std::vector<std::unique_ptr<InherentImplItem> > &get_impl_items () + std::vector<std::unique_ptr<InherentImplItem>> &get_impl_items () { return impl_items; } @@ -3748,7 +3739,7 @@ class TraitImpl : public Impl TypePath trait_path; // bool has_impl_items; - std::vector<std::unique_ptr<TraitImplItem> > impl_items; + std::vector<std::unique_ptr<TraitImplItem>> impl_items; public: std::string as_string () const override; @@ -3758,8 +3749,8 @@ public: // Mega-constructor TraitImpl (TypePath trait_path, bool is_unsafe, bool has_exclam, - std::vector<std::unique_ptr<TraitImplItem> > impl_items, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<TraitImplItem>> impl_items, + std::vector<std::unique_ptr<GenericParam>> generic_params, std::unique_ptr<Type> trait_type, WhereClause where_clause, Visibility vis, std::vector<Attribute> inner_attrs, std::vector<Attribute> outer_attrs, Location locus) @@ -3805,11 +3796,11 @@ public: bool is_exclam () const { return has_exclam; } // TODO: think of better way to do this - const std::vector<std::unique_ptr<TraitImplItem> > &get_impl_items () const + const std::vector<std::unique_ptr<TraitImplItem>> &get_impl_items () const { return impl_items; } - std::vector<std::unique_ptr<TraitImplItem> > &get_impl_items () + std::vector<std::unique_ptr<TraitImplItem>> &get_impl_items () { return impl_items; } @@ -4116,7 +4107,7 @@ class ExternalFunctionItem : public ExternalItem // bool has_generics; // Generics generic_params; - std::vector<std::unique_ptr<GenericParam> > generic_params; // inlined + std::vector<std::unique_ptr<GenericParam>> generic_params; // inlined // bool has_return_type; // FunctionReturnType return_type; @@ -4158,7 +4149,7 @@ public: ExternalFunctionItem ( Identifier item_name, - std::vector<std::unique_ptr<GenericParam> > generic_params, + std::vector<std::unique_ptr<GenericParam>> generic_params, std::unique_ptr<Type> return_type, WhereClause where_clause, std::vector<NamedFunctionParam> function_params, bool has_variadics, std::vector<Attribute> variadic_outer_attrs, Visibility vis, @@ -4246,11 +4237,11 @@ public: return function_params; } - std::vector<std::unique_ptr<GenericParam> > &get_generic_params () + std::vector<std::unique_ptr<GenericParam>> &get_generic_params () { return generic_params; } - const std::vector<std::unique_ptr<GenericParam> > &get_generic_params () const + const std::vector<std::unique_ptr<GenericParam>> &get_generic_params () const { return generic_params; } @@ -4290,7 +4281,7 @@ class ExternBlock : public VisItem std::vector<Attribute> inner_attrs; // bool has_extern_items; - std::vector<std::unique_ptr<ExternalItem> > extern_items; + std::vector<std::unique_ptr<ExternalItem>> extern_items; Location locus; @@ -4312,7 +4303,7 @@ public: std::string get_abi () const { return abi; } ExternBlock (std::string abi, - std::vector<std::unique_ptr<ExternalItem> > extern_items, + std::vector<std::unique_ptr<ExternalItem>> extern_items, Visibility vis, std::vector<Attribute> inner_attrs, std::vector<Attribute> outer_attrs, Location locus) : VisItem (std::move (vis), std::move (outer_attrs)), abi (std::move (abi)), @@ -4359,11 +4350,11 @@ public: bool is_marked_for_strip () const override { return marked_for_strip; } // TODO: think of better way to do this - const std::vector<std::unique_ptr<ExternalItem> > &get_extern_items () const + const std::vector<std::unique_ptr<ExternalItem>> &get_extern_items () const { return extern_items; } - std::vector<std::unique_ptr<ExternalItem> > &get_extern_items () + std::vector<std::unique_ptr<ExternalItem>> &get_extern_items () { return extern_items; } diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc index 28d14ba..0a25471 100644 --- a/gcc/rust/expand/rust-macro-expand.cc +++ b/gcc/rust/expand/rust-macro-expand.cc @@ -2015,7 +2015,7 @@ public: "cannot strip block expression in this position - outer " "attributes not allowed"); } - void visit (AST::ModuleBodied &module) override + void visit (AST::Module &module) override { // strip test based on outer attrs expander.expand_cfg_attrs (module.get_outer_attrs ()); @@ -2025,27 +2025,21 @@ public: return; } - // strip test based on inner attrs - expander.expand_cfg_attrs (module.get_inner_attrs ()); - if (expander.fails_cfg_with_expand (module.get_inner_attrs ())) + // A loaded module might have inner attributes + if (module.get_kind () == AST::Module::ModuleKind::LOADED) { - module.mark_for_strip (); - return; + // strip test based on inner attrs + expander.expand_cfg_attrs (module.get_inner_attrs ()); + if (expander.fails_cfg_with_expand (module.get_inner_attrs ())) + { + module.mark_for_strip (); + return; + } } // strip items if required expand_pointer_allow_strip (module.get_items ()); } - void visit (AST::ModuleNoBody &module) override - { - // strip test based on outer attrs - expander.expand_cfg_attrs (module.get_outer_attrs ()); - if (expander.fails_cfg_with_expand (module.get_outer_attrs ())) - { - module.mark_for_strip (); - return; - } - } void visit (AST::ExternCrate &crate) override { // strip test based on outer attrs diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index 742cb1d..7ef5938 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -146,8 +146,7 @@ public: virtual void visit (AST::LifetimeWhereClauseItem &item) {} virtual void visit (AST::TypeBoundWhereClauseItem &item) {} virtual void visit (AST::Method &method) {} - virtual void visit (AST::ModuleBodied &module) {} - virtual void visit (AST::ModuleNoBody &module) {} + virtual void visit (AST::Module &module) {} virtual void visit (AST::ExternCrate &crate) {} // virtual void visit(UseTree& use_tree) {} virtual void visit (AST::UseTreeGlob &use_tree) {} diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index acc9d06..596a682 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -2121,10 +2121,10 @@ Parser<ManagedTokenSource>::parse_module (AST::Visibility vis, case SEMICOLON: lexer.skip_token (); - return std::unique_ptr<AST::ModuleNoBody> ( - new AST::ModuleNoBody (std::move (name), std::move (vis), - std::move (outer_attrs), - locus)); // module name? + return std::unique_ptr<AST::Module> ( + new AST::Module (std::move (name), std::move (vis), + std::move (outer_attrs), + locus)); // module name? case LEFT_CURLY: { lexer.skip_token (); @@ -2157,10 +2157,10 @@ Parser<ManagedTokenSource>::parse_module (AST::Visibility vis, return nullptr; } - return std::unique_ptr<AST::ModuleBodied> ( - new AST::ModuleBodied (std::move (name), locus, std::move (items), - std::move (vis), std::move (inner_attrs), - std::move (outer_attrs))); // module name? + return std::unique_ptr<AST::Module> ( + new AST::Module (std::move (name), locus, std::move (items), + std::move (vis), std::move (inner_attrs), + std::move (outer_attrs))); // module name? } default: add_error ( diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 16334bd..10e2b1b 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -119,8 +119,7 @@ public: void visit (AST::LifetimeWhereClauseItem &) {} void visit (AST::TypeBoundWhereClauseItem &) {} void visit (AST::Method &) {} - void visit (AST::ModuleBodied &) {} - void visit (AST::ModuleNoBody &) {} + void visit (AST::Module &) {} void visit (AST::ExternCrate &) {} void visit (AST::UseTreeGlob &) {} |