primitive_format_float, return empty string on bad locale instead of C++ exception

db4
Jon Harper 2015-07-05 21:52:41 +02:00 committed by John Benediktsson
parent 19fadb6c96
commit 13ba081ac8
1 changed files with 9 additions and 1 deletions

View File

@ -1,6 +1,7 @@
#include "master.hpp"
#include <sstream>
#include <iomanip>
#include <stdexcept>
namespace factor {
@ -220,7 +221,14 @@ void factor_vm::primitive_format_float() {
char* fill = alien_offset(ctx->pop());
double value = untag_float_check(ctx->peek());
std::ostringstream localized_stream;
localized_stream.imbue(std::locale(locale));
try {
localized_stream.imbue(std::locale(locale));
} catch (const runtime_error& error) {
byte_array* array = allot_byte_array(1);
array->data<char>()[0] = '\0';
ctx->replace(tag<byte_array>(array));
return;
}
switch (format[0]) {
case 'f': localized_stream << std::fixed; break;
case 'e': localized_stream << std::scientific; break;