public:
template <typename AttrTy>
- iterator_range<attr_value_iterator<AttrTy>> getAsRange() {
+ iterator_range<attr_value_iterator<AttrTy>> getAsRange() const {
return llvm::make_range(attr_value_iterator<AttrTy>(begin()),
attr_value_iterator<AttrTy>(end()));
}
template <typename AttrTy,
typename UnderlyingTy = typename AttrTy::ValueType>
- auto getAsValueRange() {
+ auto getAsValueRange() const {
return llvm::map_range(getAsRange<AttrTy>(), [](AttrTy attr) {
return static_cast<UnderlyingTy>(attr.getValue());
});
/// Return the specified attribute if present and is an instance of
/// `AttrClass`, null otherwise.
- template<typename AttrClass>
- AttrClass getAs(StringRef name) {
- return get(name).dyn_cast_or_null<AttrClass>();
+ template<typename AttrClass, typename NameClass>
+ AttrClass getAs(NameClass name) const {
+ return get(name).template dyn_cast_or_null<AttrClass>();
}
private: