Merge pull request #26113 from akien-mga/VariantWriter-int64_t
Fix VariantWriter overflow on 64-bit int
This commit is contained in:
commit
d2e4363ac0
|
@ -1597,7 +1597,7 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str
|
||||||
} break;
|
} break;
|
||||||
case Variant::INT: {
|
case Variant::INT: {
|
||||||
|
|
||||||
p_store_string_func(p_store_string_ud, itos(p_variant.operator int()));
|
p_store_string_func(p_store_string_ud, itos(p_variant.operator int64_t()));
|
||||||
} break;
|
} break;
|
||||||
case Variant::REAL: {
|
case Variant::REAL: {
|
||||||
|
|
||||||
|
|
|
@ -811,7 +811,7 @@
|
||||||
<description>
|
<description>
|
||||||
Random range, any floating point value between [code]from[/code] and [code]to[/code].
|
Random range, any floating point value between [code]from[/code] and [code]to[/code].
|
||||||
[codeblock]
|
[codeblock]
|
||||||
prints(rand_range(0, 1), rand_range(0, 1)) # prints 0.135591 0.405263
|
prints(rand_range(0, 1), rand_range(0, 1)) # prints e.g. 0.135591 0.405263
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -830,7 +830,7 @@
|
||||||
<description>
|
<description>
|
||||||
Returns a random floating point value on the interval [code][0, 1][/code].
|
Returns a random floating point value on the interval [code][0, 1][/code].
|
||||||
[codeblock]
|
[codeblock]
|
||||||
randf() # returns 0.375671
|
randf() # returns e.g. 0.375671
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -838,11 +838,12 @@
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns a random 32 bit integer. Use remainder to obtain a random value in the interval [code][0, N][/code] (where N is smaller than 2^32 -1).
|
Returns a random unsigned 32 bit integer. Use remainder to obtain a random value in the interval [code][0, N][/code] (where N is smaller than 2^32 -1).
|
||||||
[codeblock]
|
[codeblock]
|
||||||
randi() % 20 # returns random number between 0 and 19
|
randi() # returns random integer between 0 and 2^32 - 1
|
||||||
randi() % 100 # returns random number between 0 and 99
|
randi() % 20 # returns random integer between 0 and 19
|
||||||
randi() % 100 + 1 # returns random number between 1 and 100
|
randi() % 100 # returns random integer between 0 and 99
|
||||||
|
randi() % 100 + 1 # returns random integer between 1 and 100
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
|
|
@ -4,7 +4,21 @@
|
||||||
Integer built-in type.
|
Integer built-in type.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
Integer built-in type.
|
Signed 64-bit integer type.
|
||||||
|
It can take values in the interval [code][-2^63, 2^63 - 1][/code], i.e. [code][-9223372036854775808, 9223372036854775807][/code]. Exceeding those bounds will wrap around.
|
||||||
|
[code]int[/code] is a [Variant] type, and will thus be used when assigning an integer value to a [Variant]. It can also be enforced with the [code]: int[/code] type hint.
|
||||||
|
[codeblock]
|
||||||
|
var my_variant = 0 # int, value 0
|
||||||
|
my_variant += 4.2 # float, value 4.2
|
||||||
|
var my_int: int = 1 # int, value 1
|
||||||
|
my_int = 4.2 # int, value 4, the right value is implicitly cast to int
|
||||||
|
my_int = int("6.7") # int, value 6, the String is explicitly cast with [method int]
|
||||||
|
|
||||||
|
var max_int = 9223372036854775807
|
||||||
|
print(max_int) # 9223372036854775807, OK
|
||||||
|
max_int += 1
|
||||||
|
print(max_int) # -9223372036854775808, we overflowed and wrapped around
|
||||||
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
|
|
|
@ -483,16 +483,16 @@ EditorPropertyCheck::EditorPropertyCheck() {
|
||||||
|
|
||||||
void EditorPropertyEnum::_option_selected(int p_which) {
|
void EditorPropertyEnum::_option_selected(int p_which) {
|
||||||
|
|
||||||
int val = options->get_item_metadata(p_which);
|
int64_t val = options->get_item_metadata(p_which);
|
||||||
emit_changed(get_edited_property(), val);
|
emit_changed(get_edited_property(), val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPropertyEnum::update_property() {
|
void EditorPropertyEnum::update_property() {
|
||||||
|
|
||||||
int which = get_edited_object()->get(get_edited_property());
|
int64_t which = get_edited_object()->get(get_edited_property());
|
||||||
|
|
||||||
for (int i = 0; i < options->get_item_count(); i++) {
|
for (int i = 0; i < options->get_item_count(); i++) {
|
||||||
if (which == (int)options->get_item_metadata(i)) {
|
if (which == (int64_t)options->get_item_metadata(i)) {
|
||||||
options->select(i);
|
options->select(i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -501,11 +501,11 @@ void EditorPropertyEnum::update_property() {
|
||||||
|
|
||||||
void EditorPropertyEnum::setup(const Vector<String> &p_options) {
|
void EditorPropertyEnum::setup(const Vector<String> &p_options) {
|
||||||
|
|
||||||
int current_val = 0;
|
int64_t current_val = 0;
|
||||||
for (int i = 0; i < p_options.size(); i++) {
|
for (int i = 0; i < p_options.size(); i++) {
|
||||||
Vector<String> text_split = p_options[i].split(":");
|
Vector<String> text_split = p_options[i].split(":");
|
||||||
if (text_split.size() != 1)
|
if (text_split.size() != 1)
|
||||||
current_val = text_split[1].to_int();
|
current_val = text_split[1].to_int64();
|
||||||
options->add_item(text_split[0]);
|
options->add_item(text_split[0]);
|
||||||
options->set_item_metadata(i, current_val);
|
options->set_item_metadata(i, current_val);
|
||||||
current_val += 1;
|
current_val += 1;
|
||||||
|
@ -801,11 +801,11 @@ EditorPropertyLayers::EditorPropertyLayers() {
|
||||||
void EditorPropertyInteger::_value_changed(double val) {
|
void EditorPropertyInteger::_value_changed(double val) {
|
||||||
if (setting)
|
if (setting)
|
||||||
return;
|
return;
|
||||||
emit_changed(get_edited_property(), int(val));
|
emit_changed(get_edited_property(), (int64_t)val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPropertyInteger::update_property() {
|
void EditorPropertyInteger::update_property() {
|
||||||
int val = get_edited_object()->get(get_edited_property());
|
int64_t val = get_edited_object()->get(get_edited_property());
|
||||||
setting = true;
|
setting = true;
|
||||||
spin->set_value(val);
|
spin->set_value(val);
|
||||||
setting = false;
|
setting = false;
|
||||||
|
|
Loading…
Reference in New Issue