summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-10-25 12:14:46 +0800
committerJohn Hodge <tpg@mutabah.net>2016-10-25 12:14:46 +0800
commit7e55b0557b15ea6b57a564613cabb066e74b290e (patch)
tree1d5b503f148bb8bbe05b6335658e647b56ae0af1
parent537c44ed15b27180ac011dfb6eca8b9deb9bf782 (diff)
downloadmrust-7e55b0557b15ea6b57a564613cabb066e74b290e.tar.gz
Token - Fix bad deserialisation of integer literals with type _
-rw-r--r--src/ast/expr.cpp4
-rw-r--r--src/ast/types.cpp3
-rw-r--r--src/parse/token.cpp1
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;