summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-10-12 10:13:01 +0800
committerJohn Hodge <tpg@mutabah.net>2016-10-12 10:13:01 +0800
commitef736aa229872419a6fa159844d3899315416aec (patch)
treedc518028daeb20b82563cb518ba4eece1b1855eb
parent496b69d8b603e69f728320d1db8155a4575afdd0 (diff)
downloadmrust-ef736aa229872419a6fa159844d3899315416aec.tar.gz
HIR From AST - Handle float-annotated integer literals
-rw-r--r--src/hir/from_ast_expr.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp
index d0877c5f..159aed89 100644
--- a/src/hir/from_ast_expr.cpp
+++ b/src/hir/from_ast_expr.cpp
@@ -467,10 +467,20 @@ struct LowerHIR_ExprNode_Visitor:
case CORETYPE_CHAR: return ::HIR::CoreType::Char;
default:
- BUG(sp, "Unknown type for integer literal - " << ct);
+ BUG(sp, "Unknown type for integer literal - " << coretype_name(ct));
}
}
};
+ if( v.m_datatype == CORETYPE_F32 || v.m_datatype == CORETYPE_F64 ) {
+ DEBUG("Integer annotated as float, create float node");
+ m_rv.reset( new ::HIR::ExprNode_Literal( v.span(),
+ ::HIR::ExprNode_Literal::Data::make_Float({
+ (v.m_datatype == CORETYPE_F32 ? ::HIR::CoreType::F32 : ::HIR::CoreType::F64),
+ static_cast<double>(v.m_value)
+ })
+ ) );
+ return ;
+ }
m_rv.reset( new ::HIR::ExprNode_Literal( v.span(),
::HIR::ExprNode_Literal::Data::make_Integer({
H::get_type( Span(v.get_pos()), v.m_datatype ),