note that `p->has_attribute(...)` does not respect that.