diff options
Diffstat (limited to 'core/ustring.cpp')
-rw-r--r-- | core/ustring.cpp | 54 |
1 files changed, 20 insertions, 34 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp index 476ab3f936..09d3d95b68 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -3550,8 +3550,8 @@ String String::lpad(int min_length, const String& character) const { // sprintf is implemented in GDScript via: // "fish %s pie" % "frog" // "fish %s %d pie" % ["frog", 12] -String String::sprintf(const Array& values) const { - +// In case of an error, the string returned is the error description and "error" is true. +String String::sprintf(const Array& values, bool* error) const { String formatted; CharType* self = (CharType*)c_str(); int num_items = values.size(); @@ -3564,6 +3564,7 @@ String String::sprintf(const Array& values) const { bool left_justified; bool show_sign; + *error = true; for (; *self; self++) { const CharType c = *self; @@ -3580,13 +3581,11 @@ String String::sprintf(const Array& values) const { case 'x': // Hexadecimal (lowercase) case 'X': { // Hexadecimal (uppercase) if (value_index >= values.size()) { - ERR_EXPLAIN("not enough arguments for format string"); - ERR_FAIL_V(""); + return "not enough arguments for format string"; } if (!values[value_index].is_num()) { - ERR_EXPLAIN("a number is required"); - ERR_FAIL_V(""); + return "a number is required"; } int64_t value = values[value_index]; @@ -3622,13 +3621,11 @@ String String::sprintf(const Array& values) const { } case 'f': { // Float if (value_index >= values.size()) { - ERR_EXPLAIN("not enough arguments for format string"); - ERR_FAIL_V(""); + return "not enough arguments for format string"; } if (!values[value_index].is_num()) { - ERR_EXPLAIN("a number is required"); - ERR_FAIL_V(""); + return "a number is required"; } double value = values[value_index]; @@ -3657,8 +3654,7 @@ String String::sprintf(const Array& values) const { } case 's': { // String if (value_index >= values.size()) { - ERR_EXPLAIN("not enough arguments for format string"); - ERR_FAIL_V(""); + return "not enough arguments for format string"; } String str = values[value_index]; @@ -3676,8 +3672,7 @@ String String::sprintf(const Array& values) const { } case 'c': { if (value_index >= values.size()) { - ERR_EXPLAIN("not enough arguments for format string"); - ERR_FAIL_V(""); + return "not enough arguments for format string"; } // Convert to character. @@ -3685,22 +3680,18 @@ String String::sprintf(const Array& values) const { if (values[value_index].is_num()) { int value = values[value_index]; if (value < 0) { - ERR_EXPLAIN("unsigned byte integer is lower than maximum") - ERR_FAIL_V(""); + return "unsigned byte integer is lower than maximum"; } else if (value > 255) { - ERR_EXPLAIN("unsigned byte integer is greater than maximum") - ERR_FAIL_V(""); + return "unsigned byte integer is greater than maximum"; } str = chr(values[value_index]); } else if (values[value_index].get_type() == Variant::STRING) { str = values[value_index]; if (str.length() != 1) { - ERR_EXPLAIN("%c requires number or single-character string"); - ERR_FAIL_V(""); + return "%c requires number or single-character string"; } } else { - ERR_EXPLAIN("%c requires number or single-character string"); - ERR_FAIL_V(""); + return "%c requires number or single-character string"; } // Padding. @@ -3741,8 +3732,7 @@ String String::sprintf(const Array& values) const { } case '.': { // Float separtor. if (in_decimals) { - ERR_EXPLAIN("too many decimal points in format"); - ERR_FAIL_V(""); + return "too many decimal points in format"; } in_decimals = true; min_decimals = 0; // We want to add the value manually. @@ -3751,13 +3741,11 @@ String String::sprintf(const Array& values) const { case '*': { // Dyanmic width, based on value. if (value_index >= values.size()) { - ERR_EXPLAIN("not enough arguments for format string"); - ERR_FAIL_V(""); + return "not enough arguments for format string"; } if (!values[value_index].is_num()) { - ERR_EXPLAIN("* wants number"); - ERR_FAIL_V(""); + return "* wants number"; } int size = values[value_index]; @@ -3773,8 +3761,7 @@ String String::sprintf(const Array& values) const { } default: { - ERR_EXPLAIN("unsupported format character"); - ERR_FAIL_V(""); + return "unsupported format character"; } } } else { // Not in format string. @@ -3796,14 +3783,13 @@ String String::sprintf(const Array& values) const { } if (in_format) { - ERR_EXPLAIN("incomplete format"); - ERR_FAIL_V(""); + return "incomplete format"; } if (value_index != values.size()) { - ERR_EXPLAIN("not all arguments converted during string formatting"); - ERR_FAIL_V(""); + return "not all arguments converted during string formatting"; } + *error = false; return formatted; } |