Both the AST::Crate and AST::Module class are std::unique_ptr<AST::Item>
containers, and may require spurious insertions in these containers,
for example when expanding a procedural macro, or in our case, escaping
macros through the #[macro_use] attribute. These functions allow you
to replace *all* of the items contained in such a container.
gcc/rust/ChangeLog:
* ast/rust-ast.h: Add take_items() and set_items() method to Crate.
* ast/rust-item.h: Add take_items() and set_items() method to Module.
NodeId get_node_id () const { return node_id; }
const std::vector<Attribute> &get_inner_attrs () const { return inner_attrs; }
+
+ std::vector<std::unique_ptr<AST::Item>> take_items ()
+ {
+ return std::move (items);
+ }
+
+ void set_items (std::vector<std::unique_ptr<AST::Item>> &&new_items)
+ {
+ items = std::move (new_items);
+ }
};
// Base path expression AST node - abstract
const std::vector<std::unique_ptr<Item>> &get_items () const { return items; }
std::vector<std::unique_ptr<Item>> &get_items () { return items; }
+ std::vector<std::unique_ptr<AST::Item>> take_items ()
+ {
+ return std::move (items);
+ }
+
+ void set_items (std::vector<std::unique_ptr<AST::Item>> &&new_items)
+ {
+ items = std::move (new_items);
+ }
+
// move constructors
Module (Module &&other) = default;
Module &operator= (Module &&other) = default;