summaryrefslogtreecommitdiff
path: root/src/types.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-05-18 20:42:08 +0800
committerJohn Hodge <tpg@mutabah.net>2016-05-18 20:42:08 +0800
commit921db4d1205948cbf684bf7e1d3894bdb7c2b4d5 (patch)
treee0e1c5bf9a341dc12165d19e879362f065d2ac69 /src/types.cpp
parentc9284d392f89c0108785189ff986efbece5c9b65 (diff)
downloadmrust-921db4d1205948cbf684bf7e1d3894bdb7c2b4d5.tar.gz
Tagged union cleanup hacks
Diffstat (limited to 'src/types.cpp')
-rw-r--r--src/types.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/types.cpp b/src/types.cpp
index f3777666..ffa4db42 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -99,6 +99,7 @@ TypeRef::TypeRef(const TypeRef& other)
{
switch( other.m_data.tag() )
{
+ case TypeData::TAGDEAD: throw "";
#define _COPY(VAR) case TypeData::TAG_##VAR: m_data = TypeData::make_##VAR(other.m_data.as_##VAR()); break;
#define _CLONE(VAR, code...) case TypeData::TAG_##VAR: { auto& old = other.m_data.as_##VAR(); m_data = TypeData::make_##VAR(code); } break;
_COPY(None)
@@ -125,6 +126,7 @@ bool TypeRef::deref(bool is_implicit)
#define _(VAR, ...) case TypeData::TAG_##VAR: { auto &ent = m_data.as_##VAR(); (void)&ent; __VA_ARGS__ } break;
switch(m_data.tag())
{
+ case TypeData::TAGDEAD: throw "";
case TypeData::TAG_None: throw ::std::runtime_error("Dereferencing ! - bugcheck");
case TypeData::TAG_Macro: throw ::std::runtime_error("Dereferencing unexpanded macro - bugcheck");
case TypeData::TAG_Any: throw ::std::runtime_error("Dereferencing _");
@@ -259,6 +261,7 @@ void TypeRef::resolve_args(::std::function<TypeRef(const char*)> fcn)
#define _(VAR, ...) case TypeData::TAG_##VAR: { auto &ent = m_data.as_##VAR(); (void)&ent; __VA_ARGS__ } break;
switch(m_data.tag())
{
+ case TypeData::TAGDEAD: throw "";
_(None,
throw ::std::runtime_error("TypeRef::resolve_args on !");
)
@@ -692,6 +695,7 @@ Ordering TypeRef::ord(const TypeRef& x) const
#define _(VAR, ...) case TypeData::TAG_##VAR: { const auto &ent = tr.m_data.as_##VAR(); (void)&ent; __VA_ARGS__ } break;
switch(tr.m_data.tag())
{
+ case TypeData::TAGDEAD: throw "";
_(None,
os << "!";
)
@@ -803,6 +807,7 @@ SERIALISE_TYPE(TypeRef::, "TypeRef", {
s % m_data.tag();
switch(m_data.tag())
{
+ case TypeData::TAGDEAD: throw "";
_S(None)
_S(Macro,
s.item( ent.inv );
@@ -850,6 +855,7 @@ SERIALISE_TYPE(TypeRef::, "TypeRef", {
s % tag;
switch(tag)
{
+ case TypeData::TAGDEAD: throw "";
_D(None)
_D(Any)
_D(Unit)