use format contants in default ivar/fvar/svar handlers

master
Daniel Kolesa 2021-04-06 21:23:17 +02:00
parent f93042d7b9
commit 4da0cb54a8
3 changed files with 10 additions and 6 deletions

View File

@ -7,7 +7,7 @@ namespace cubescript {
using integer_type = int;
using float_type = float;
constexpr auto const INT_FORMAT = "%d";
constexpr auto const INTEGER_FORMAT = "%d";
constexpr auto const FLOAT_FORMAT = "%.7g";
constexpr auto const ROUND_FLOAT_FORMAT = "%.1f";
} /* namespace cubescript */

View File

@ -132,7 +132,9 @@ state::state(alloc_func func, void *data) {
) {
auto *iv = args[0].get_ident()->get_ivar();
if (args[2].get_integer() <= 1) {
std::printf("%s = %d\n", iv->get_name().data(), iv->get_value());
std::printf("%s = ", iv->get_name().data());
std::printf(INTEGER_FORMAT, iv->get_value());
std::printf("\n");
} else {
iv->set_value(cs, args[1].get_integer());
}
@ -144,11 +146,13 @@ state::state(alloc_func func, void *data) {
auto *fv = args[0].get_ident()->get_fvar();
if (args[2].get_integer() <= 1) {
auto val = fv->get_value();
std::printf("%s = ", fv->get_name().data());
if (std::floor(val) == val) {
std::printf("%s = %.1f\n", fv->get_name().data(), val);
std::printf(ROUND_FLOAT_FORMAT, val);
} else {
std::printf("%s = %.7g\n", fv->get_name().data(), val);
std::printf(FLOAT_FORMAT, val);
}
std::printf("\n");
} else {
fv->set_value(cs, args[1].get_float());
}

View File

@ -11,10 +11,10 @@ namespace cubescript {
static std::string_view intstr(integer_type v, charbuf &buf) {
buf.reserve(32);
int n = snprintf(buf.data(), 32, INT_FORMAT, v);
int n = snprintf(buf.data(), 32, INTEGER_FORMAT, v);
if (n > 32) {
buf.reserve(n + 1);
int nn = snprintf(buf.data(), n + 1, INT_FORMAT, v);
int nn = snprintf(buf.data(), n + 1, INTEGER_FORMAT, v);
if ((nn > n) || (nn <= 0)) {
n = -1;
} else {