diff options
author | John Hodge <tpg@mutabah.net> | 2016-10-25 12:14:46 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-10-25 12:14:46 +0800 |
commit | 7e55b0557b15ea6b57a564613cabb066e74b290e (patch) | |
tree | 1d5b503f148bb8bbe05b6335658e647b56ae0af1 | |
parent | 537c44ed15b27180ac011dfb6eca8b9deb9bf782 (diff) | |
download | mrust-7e55b0557b15ea6b57a564613cabb066e74b290e.tar.gz |
Token - Fix bad deserialisation of integer literals with type _
-rw-r--r-- | src/ast/expr.cpp | 4 | ||||
-rw-r--r-- | src/ast/types.cpp | 3 | ||||
-rw-r--r-- | src/parse/token.cpp | 1 |
3 files changed, 5 insertions, 3 deletions
diff --git a/src/ast/expr.cpp b/src/ast/expr.cpp index 3f2abd2b..d915f449 100644 --- a/src/ast/expr.cpp +++ b/src/ast/expr.cpp @@ -214,12 +214,12 @@ NODE(ExprNode_IfLet, { }) NODE(ExprNode_Integer, { - os << m_value; + os << m_value << "_" << m_datatype; },{ return NEWNODE(ExprNode_Integer, m_value, m_datatype); }) NODE(ExprNode_Float, { - os << m_value; + os << m_value << "_" << m_datatype; },{ return NEWNODE(ExprNode_Float, m_value, m_datatype); }) diff --git a/src/ast/types.cpp b/src/ast/types.cpp index 7468dcf7..d95c172f 100644 --- a/src/ast/types.cpp +++ b/src/ast/types.cpp @@ -18,6 +18,7 @@ static const struct { enum eCoreType type; } CORETYPES[] = { // NOTE: Sorted + {"_", CORETYPE_ANY}, {"bool", CORETYPE_BOOL}, {"char", CORETYPE_CHAR}, {"f32", CORETYPE_F32}, @@ -52,7 +53,7 @@ enum eCoreType coretype_fromstring(const ::std::string& name) const char* coretype_name(const eCoreType ct ) { switch(ct) { - case CORETYPE_INVAL:return "-"; + case CORETYPE_INVAL:return "INVAL"; case CORETYPE_ANY: return "_"; case CORETYPE_CHAR: return "char"; case CORETYPE_STR: return "str"; diff --git a/src/parse/token.cpp b/src/parse/token.cpp index 670be81d..37515a2e 100644 --- a/src/parse/token.cpp +++ b/src/parse/token.cpp @@ -450,6 +450,7 @@ void operator%(::Deserialiser& s, enum eCoreType& t) { ::std::string n; s.item(n); t = coretype_fromstring(n); + ASSERT_BUG(Span(), t != CORETYPE_INVAL, "Invalid coretype '" << n << "'"); } SERIALISE_TYPE(Token::, "Token", { s % m_type; |