From ef736aa229872419a6fa159844d3899315416aec Mon Sep 17 00:00:00 2001 From: John Hodge Date: Wed, 12 Oct 2016 10:13:01 +0800 Subject: HIR From AST - Handle float-annotated integer literals --- src/hir/from_ast_expr.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') 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(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 ), -- cgit v1.2.3