// behavior that we have items that can also be expressions?
bool is_item () const override { return true; }
+ virtual std::vector<Attribute> &get_outer_attrs () = 0;
+ virtual const std::vector<Attribute> &get_outer_attrs () const = 0;
+
+ virtual bool has_outer_attrs () const { return !get_outer_attrs ().empty (); }
+
protected:
// Clone function implementation as pure virtual method
virtual Item *clone_item_impl () const = 0;
public:
Location get_locus () const override final { return locus; }
- // should never be called - error if called
- void set_outer_attrs (std::vector<Attribute> /* new_attrs */) override
+ std::vector<Attribute> &get_outer_attrs () override final
{
+ // RangeExpr cannot have any outer attributes
rust_assert (false);
}
- std::vector<Attribute> &get_outer_attrs () override
+ // should never be called - error if called
+ void set_outer_attrs (std::vector<Attribute> /* new_attrs */) override
{
- // RangeExpr cannot have any outer attributes
rust_assert (false);
}
};
Visibility &get_visibility () { return visibility; }
const Visibility &get_visibility () const { return visibility; }
- std::vector<Attribute> &get_outer_attrs () { return outer_attrs; }
- const std::vector<Attribute> &get_outer_attrs () const { return outer_attrs; }
+ std::vector<Attribute> &get_outer_attrs () override { return outer_attrs; }
+ const std::vector<Attribute> &get_outer_attrs () const override
+ {
+ return outer_attrs;
+ }
};
// Rust module item - abstract base class
bool is_marked_for_strip () const override { return rule_name.empty (); }
// TODO: this mutable getter seems really dodgy. Think up better way.
- std::vector<Attribute> &get_outer_attrs () { return outer_attrs; }
- const std::vector<Attribute> &get_outer_attrs () const { return outer_attrs; }
+ std::vector<Attribute> &get_outer_attrs () override { return outer_attrs; }
+ const std::vector<Attribute> &get_outer_attrs () const override
+ {
+ return outer_attrs;
+ }
std::vector<MacroRule> &get_macro_rules () { return rules; }
const std::vector<MacroRule> &get_macro_rules () const { return rules; }
return invoc_data.is_marked_for_strip ();
}
- const std::vector<Attribute> &get_outer_attrs () const { return outer_attrs; }
+ const std::vector<Attribute> &get_outer_attrs () const override
+ {
+ return outer_attrs;
+ }
std::vector<Attribute> &get_outer_attrs () override { return outer_attrs; }
void set_outer_attrs (std::vector<Attribute> new_attrs) override