blob: 7926f00db16775454f0d322a537b681863783b5b [file] [log] [blame]
mrustc-0.9.0 fails to compile out of the box:
src/common.hpp:268:28: error: cannot increment value of type
'std::__1::__wrap_iter<const AST::Attribute *>'
This patch fixes the code so that it compiles.
diff --git a/src/ast/ast.cpp b/src/ast/ast.cpp
index 827ac2d..4cb0061 100644
--- a/src/ast/ast.cpp
+++ b/src/ast/ast.cpp
@@ -47,6 +47,13 @@ const Attribute* AttributeList::get(const char *name) const
return 0;
}
+::std::ostream& operator<<(::std::ostream& os, const AttributeList& x) {
+ for(const auto& i : x.m_items) {
+ os << "#[" << i << "]";
+ }
+ return os;
+}
+
Attribute Attribute::clone() const
{
TU_MATCHA( (m_data), (e),
diff --git a/src/ast/attrs.hpp b/src/ast/attrs.hpp
index 7a6ce86..452debb 100644
--- a/src/ast/attrs.hpp
+++ b/src/ast/attrs.hpp
@@ -12,48 +12,6 @@
//
class Attribute;
-::std::ostream& operator<<(::std::ostream& os, const Attribute& x);
-
-/// A list of attributes on an item (searchable by the attribute name)
-class AttributeList
-{
-public:
- ::std::vector<Attribute> m_items;
-
- AttributeList() {}
- AttributeList(::std::vector<Attribute> items):
- m_items( mv$(items) )
- {
- }
-
- // Move present
- AttributeList(AttributeList&&) = default;
- AttributeList& operator=(AttributeList&&) = default;
- // No copy assign, but explicit copy
- explicit AttributeList(const AttributeList&) = default;
- AttributeList& operator=(const AttributeList&) = delete;
- // Explicit clone
- AttributeList clone() const;
-
- void push_back(Attribute i);
-
- const Attribute* get(const char *name) const;
- Attribute* get(const char *name) {
- return const_cast<Attribute*>( const_cast<const AttributeList*>(this)->get(name));
- }
- bool has(const char *name) const {
- return get(name) != 0;
- }
-
- friend ::std::ostream& operator<<(::std::ostream& os, const AttributeList& x) {
- for(const auto& i : x.m_items) {
- os << "#[" << i << "]";
- }
- return os;
- }
-};
-
-
TAGGED_UNION(AttributeData, None,
(None, struct {}),
(String, struct {
@@ -153,7 +99,42 @@ public:
}
};
+::std::ostream& operator<<(::std::ostream& os, const Attribute& x);
+
+/// A list of attributes on an item (searchable by the attribute name)
+class AttributeList
+{
+public:
+ ::std::vector<Attribute> m_items;
+
+ AttributeList() {}
+ AttributeList(::std::vector<Attribute> items):
+ m_items( mv$(items) )
+ {
+ }
+
+ // Move present
+ AttributeList(AttributeList&&) = default;
+ AttributeList& operator=(AttributeList&&) = default;
+ // No copy assign, but explicit copy
+ explicit AttributeList(const AttributeList&) = default;
+ AttributeList& operator=(const AttributeList&) = delete;
+ // Explicit clone
+ AttributeList clone() const;
+
+ void push_back(Attribute i);
+
+ const Attribute* get(const char *name) const;
+ Attribute* get(const char *name) {
+ return const_cast<Attribute*>( const_cast<const AttributeList*>(this)->get(name));
+ }
+ bool has(const char *name) const {
+ return get(name) != 0;
+ }
+};
+
+::std::ostream& operator<<(::std::ostream& os, const AttributeList& x);
+
} // namespace AST
#endif
-