diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2019-02-21 11:21:41 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2019-02-21 11:24:00 +0100 |
commit | b39e1df7046e6db8aa32166d5c82b3c9d2e39075 (patch) | |
tree | 66062f38ad21cab066ef0436baf424d5b3ff913b /doc/classes/int.xml | |
parent | 16934c7411fc7beda7459d0bb8bf5de233d671d1 (diff) | |
download | redot-engine-b39e1df7046e6db8aa32166d5c82b3c9d2e39075.tar.gz |
Fix VariantWriter overflow on 64-bit int
Integers in Godot are signed 64-bit ints (int64_t), but var2str used
int behind the scenes and would thus overflow after 2^31.
Also properly documented the actual bounds of int and the behaviour
when overflowing them.
Diffstat (limited to 'doc/classes/int.xml')
-rw-r--r-- | doc/classes/int.xml | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/doc/classes/int.xml b/doc/classes/int.xml index 4855fa2848..7175b9fd88 100644 --- a/doc/classes/int.xml +++ b/doc/classes/int.xml @@ -4,7 +4,21 @@ Integer built-in type. </brief_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> <tutorials> </tutorials> |