diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-19 22:08:24 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-19 22:08:24 +0800 |
commit | c805e9e03db7e7b48f04824ccf5e625a20032af9 (patch) | |
tree | bf27192754ffa315a522391abe91378801e47ca5 /src/ast/types.cpp | |
parent | 0ad915eb4919e8bdb036015f221b57c7f3de912c (diff) | |
download | mrust-c805e9e03db7e7b48f04824ccf5e625a20032af9.tar.gz |
AST - Support ! as a real type
Diffstat (limited to 'src/ast/types.cpp')
-rw-r--r-- | src/ast/types.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/ast/types.cpp b/src/ast/types.cpp index 070f02ba..ba2c12f2 100644 --- a/src/ast/types.cpp +++ b/src/ast/types.cpp @@ -111,6 +111,7 @@ TypeRef::TypeRef(const TypeRef& other) #define _CLONE(VAR, code...) case TypeData::TAG_##VAR: { auto& old = other.m_data.as_##VAR(); m_data = TypeData::make_##VAR(code); } break; _COPY(None) _COPY(Any) + _COPY(Bang) case TypeData::TAG_Macro: assert( !"Copying an unexpanded type macro" ); _COPY(Unit) _COPY(Primitive) @@ -139,6 +140,7 @@ Ordering TypeRef::ord(const TypeRef& x) const (Macro, throw CompileError::BugCheck("TypeRef::ord - unexpanded macro");), (Any, return OrdEqual;), (Unit, return OrdEqual;), + (Bang, return OrdEqual;), (Primitive, return ::ord( (unsigned)ent.core_type, (unsigned)x_ent.core_type ); ), @@ -191,11 +193,14 @@ Ordering TypeRef::ord(const TypeRef& x) const { case TypeData::TAGDEAD: throw ""; _(None, - os << "!"; + os << "!!"; ) _(Any, os << "_"; ) + _(Bang, + os << "!"; + ) _(Macro, os << ent.inv; ) @@ -307,6 +312,7 @@ SERIALISE_TYPE(TypeRef::, "TypeRef", { s.item( ent.inv ); ) _S(Any) + _S(Bang) _S(Unit) _S(Primitive, s << coretype_name(ent.core_type); @@ -353,6 +359,7 @@ SERIALISE_TYPE(TypeRef::, "TypeRef", { _D(None) _D(Any) _D(Unit) + _D(Bang) _D(Macro, m_data = TypeData::make_Macro({}); s.item( ent.inv ); |