summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ast/ast.cpp107
-rw-r--r--src/ast/pattern.cpp123
2 files changed, 123 insertions, 107 deletions
diff --git a/src/ast/ast.cpp b/src/ast/ast.cpp
index 988762e6..11632996 100644
--- a/src/ast/ast.cpp
+++ b/src/ast/ast.cpp
@@ -38,113 +38,6 @@ SERIALISE_TYPE(MetaItem::, "AST_MetaItem", {
s.item(m_sub_items);
})
-::std::ostream& operator<<(::std::ostream& os, const Pattern& pat)
-{
- os << "Pattern(" << pat.m_binding << " @ ";
- switch(pat.m_data.tag())
- {
- case Pattern::Data::Any:
- os << "_";
- break;
- case Pattern::Data::MaybeBind:
- os << "?";
- break;
- case Pattern::Data::Ref:
- os << "&" << (pat.m_data.as_Ref().mut ? "mut " : "") << *pat.m_data.as_Ref().sub;
- break;
- case Pattern::Data::Value:
- os << *pat.m_data.as_Value().start;
- if( pat.m_data.as_Value().end.get() )
- os << " ... " << *pat.m_data.as_Value().end;
- break;
- case Pattern::Data::Tuple:
- os << "(" << pat.m_data.as_Tuple().sub_patterns << ")";
- break;
- case Pattern::Data::StructTuple:
- os << pat.m_data.as_StructTuple().path << " (" << pat.m_data.as_StructTuple().sub_patterns << ")";
- break;
- case Pattern::Data::Struct:
- os << pat.m_data.as_Struct().path << " {" << pat.m_data.as_Struct().sub_patterns << "}";
- break;
- }
- os << ")";
- return os;
-}
-void operator%(Serialiser& s, Pattern::Data::Tag c) {
- s << Pattern::Data::tag_to_str(c);
-}
-void operator%(::Deserialiser& s, Pattern::Data::Tag& c) {
- ::std::string n;
- s.item(n);
- c = Pattern::Data::tag_from_str(n);
-}
-SERIALISE_TYPE(Pattern::, "Pattern", {
- s.item(m_binding);
- s % m_data.tag();
- switch(m_data.tag())
- {
- case Pattern::Data::Any:
- break;
- case Pattern::Data::MaybeBind:
- break;
- case Pattern::Data::Ref:
- s << m_data.as_Ref().mut;
- s << m_data.as_Ref().sub;
- break;
- case Pattern::Data::Value:
- s << m_data.as_Value().start;
- s << m_data.as_Value().end;
- break;
- case Pattern::Data::Tuple:
- s << m_data.as_Tuple().sub_patterns;
- break;
- case Pattern::Data::StructTuple:
- s << m_data.as_StructTuple().path;
- s << m_data.as_StructTuple().sub_patterns;
- break;
- case Pattern::Data::Struct:
- s << m_data.as_Struct().path;
- s << m_data.as_Struct().sub_patterns;
- break;
- }
-},{
- s.item(m_binding);
- Pattern::Data::Tag tag;
- s % tag;
- switch(tag)
- {
- case Pattern::Data::Any:
- m_data = Pattern::Data::make_null_Any();
- break;
- case Pattern::Data::MaybeBind:
- m_data = Pattern::Data::make_null_MaybeBind();
- break;
- case Pattern::Data::Ref:
- m_data = Pattern::Data::make_null_Ref();
- s.item( m_data.as_Ref().mut );
- s.item( m_data.as_Ref().sub );
- break;
- case Pattern::Data::Value:
- m_data = Pattern::Data::make_null_Value();
- s.item( m_data.as_Value().start );
- s.item( m_data.as_Value().end );
- break;
- case Pattern::Data::Tuple:
- m_data = Pattern::Data::make_null_Tuple();
- s.item( m_data.as_Tuple().sub_patterns );
- break;
- case Pattern::Data::StructTuple:
- m_data = Pattern::Data::make_null_StructTuple();
- s.item( m_data.as_StructTuple().path );
- s.item( m_data.as_StructTuple().sub_patterns );
- break;
- case Pattern::Data::Struct:
- m_data = Pattern::Data::make_null_Struct();
- s.item( m_data.as_Struct().path );
- s.item( m_data.as_Struct().sub_patterns );
- break;
- }
-});
Impl Impl::make_concrete(const ::std::vector<TypeRef>& types) const
{
diff --git a/src/ast/pattern.cpp b/src/ast/pattern.cpp
new file mode 100644
index 00000000..cc5153cb
--- /dev/null
+++ b/src/ast/pattern.cpp
@@ -0,0 +1,123 @@
+/*
+ * MRustC - Rust Compiler
+ * - By John Hodge (Mutabah/thePowersGang)
+ *
+ * ast/pattern.cpp
+ * - AST::Pattern support/implementation code
+ */
+#include "../common.hpp"
+#include "ast.hpp"
+#include "pattern.hpp"
+
+namespace AST {
+
+::std::ostream& operator<<(::std::ostream& os, const Pattern& pat)
+{
+ os << "Pattern(" << pat.m_binding << " @ ";
+ switch(pat.m_data.tag())
+ {
+ case Pattern::Data::Any:
+ os << "_";
+ break;
+ case Pattern::Data::MaybeBind:
+ os << "?";
+ break;
+ case Pattern::Data::Ref:
+ os << "&" << (pat.m_data.as_Ref().mut ? "mut " : "") << *pat.m_data.as_Ref().sub;
+ break;
+ case Pattern::Data::Value:
+ os << *pat.m_data.as_Value().start;
+ if( pat.m_data.as_Value().end.get() )
+ os << " ... " << *pat.m_data.as_Value().end;
+ break;
+ case Pattern::Data::Tuple:
+ os << "(" << pat.m_data.as_Tuple().sub_patterns << ")";
+ break;
+ case Pattern::Data::StructTuple:
+ os << pat.m_data.as_StructTuple().path << " (" << pat.m_data.as_StructTuple().sub_patterns << ")";
+ break;
+ case Pattern::Data::Struct:
+ os << pat.m_data.as_Struct().path << " {" << pat.m_data.as_Struct().sub_patterns << "}";
+ break;
+ }
+ os << ")";
+ return os;
+}
+void operator%(Serialiser& s, Pattern::Data::Tag c) {
+ s << Pattern::Data::tag_to_str(c);
+}
+void operator%(::Deserialiser& s, Pattern::Data::Tag& c) {
+ ::std::string n;
+ s.item(n);
+ c = Pattern::Data::tag_from_str(n);
+}
+SERIALISE_TYPE(Pattern::, "Pattern", {
+ s.item(m_binding);
+ s % m_data.tag();
+ switch(m_data.tag())
+ {
+ case Pattern::Data::Any:
+ break;
+ case Pattern::Data::MaybeBind:
+ break;
+ case Pattern::Data::Ref:
+ s << m_data.as_Ref().mut;
+ s << m_data.as_Ref().sub;
+ break;
+ case Pattern::Data::Value:
+ s << m_data.as_Value().start;
+ s << m_data.as_Value().end;
+ break;
+ case Pattern::Data::Tuple:
+ s << m_data.as_Tuple().sub_patterns;
+ break;
+ case Pattern::Data::StructTuple:
+ s << m_data.as_StructTuple().path;
+ s << m_data.as_StructTuple().sub_patterns;
+ break;
+ case Pattern::Data::Struct:
+ s << m_data.as_Struct().path;
+ s << m_data.as_Struct().sub_patterns;
+ break;
+ }
+},{
+ s.item(m_binding);
+ Pattern::Data::Tag tag;
+ s % tag;
+ switch(tag)
+ {
+ case Pattern::Data::Any:
+ m_data = Pattern::Data::make_null_Any();
+ break;
+ case Pattern::Data::MaybeBind:
+ m_data = Pattern::Data::make_null_MaybeBind();
+ break;
+ case Pattern::Data::Ref:
+ m_data = Pattern::Data::make_null_Ref();
+ s.item( m_data.as_Ref().mut );
+ s.item( m_data.as_Ref().sub );
+ break;
+ case Pattern::Data::Value:
+ m_data = Pattern::Data::make_null_Value();
+ s.item( m_data.as_Value().start );
+ s.item( m_data.as_Value().end );
+ break;
+ case Pattern::Data::Tuple:
+ m_data = Pattern::Data::make_null_Tuple();
+ s.item( m_data.as_Tuple().sub_patterns );
+ break;
+ case Pattern::Data::StructTuple:
+ m_data = Pattern::Data::make_null_StructTuple();
+ s.item( m_data.as_StructTuple().path );
+ s.item( m_data.as_StructTuple().sub_patterns );
+ break;
+ case Pattern::Data::Struct:
+ m_data = Pattern::Data::make_null_Struct();
+ s.item( m_data.as_Struct().path );
+ s.item( m_data.as_Struct().sub_patterns );
+ break;
+ }
+});
+
+}
+