diff options
Diffstat (limited to 'src/hir/from_ast_expr.cpp')
-rw-r--r-- | src/hir/from_ast_expr.cpp | 12 |
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 ), |