Skip to content

Commit f2784ed

Browse files
committed
Add GetNumAsString for float
1 parent ddc2275 commit f2784ed

3 files changed

Lines changed: 14 additions & 10 deletions

File tree

‎cpp2rust/converter/converter.cpp‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2329,16 +2329,7 @@ bool Converter::VisitIntegerLiteral(clang::IntegerLiteral *expr) {
23292329
}
23302330

23312331
bool Converter::VisitFloatingLiteral(clang::FloatingLiteral *expr) {
2332-
auto value = expr->getValue();
2333-
if (&value.getSemantics() == &llvm::APFloat::IEEEsingle()) {
2334-
StrCat(std::format("{}_f32", value.convertToFloat()));
2335-
} else {
2336-
bool loses_info = false;
2337-
value.convert(llvm::APFloat::IEEEdouble(),
2338-
llvm::APFloat::rmNearestTiesToEven, &loses_info);
2339-
StrCat(value.isInfinity() ? std::string("f64::INFINITY")
2340-
: std::format("{}_f64", value.convertToDouble()));
2341-
}
2332+
StrCat(GetNumAsString(expr->getValue()));
23422333
computed_expr_type_ = ComputedExprType::FreshValue;
23432334
return false;
23442335
}

‎cpp2rust/converter/converter_lib.cpp‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,17 @@ bool IsCodeUnitStringLiteral(const clang::StringLiteral *expr) {
262262
expr->getKind() == clang::StringLiteralKind::UTF8;
263263
}
264264

265+
std::string GetNumAsString(llvm::APFloat value) {
266+
if (&value.getSemantics() == &llvm::APFloat::IEEEsingle()) {
267+
return std::format("{}_f32", value.convertToFloat());
268+
}
269+
bool loses_info = false;
270+
value.convert(llvm::APFloat::IEEEdouble(),
271+
llvm::APFloat::rmNearestTiesToEven, &loses_info);
272+
return value.isInfinity() ? "f64::INFINITY"
273+
: std::format("{}_f64", value.convertToDouble());
274+
}
275+
265276
bool IsUserDefinedDecl(const clang::Decl *decl) {
266277
const auto &ctx = decl->getASTContext();
267278
const auto &src_mgr = ctx.getSourceManager();

‎cpp2rust/converter/converter_lib.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ template <class T> llvm::SmallString<16> GetNumAsString(const T &num) {
191191
return small_string;
192192
}
193193

194+
std::string GetNumAsString(llvm::APFloat value);
195+
194196
clang::QualType GetReturnTypeOfFunction(const clang::CallExpr *expr);
195197

196198
const char *GetOverloadedOperator(const clang::FunctionDecl *decl);

0 commit comments

Comments
 (0)