diff options
author | Hein-Pieter van Braam-Stewart <hp@tmm.cx> | 2019-04-20 01:57:29 +0200 |
---|---|---|
committer | Hein-Pieter van Braam-Stewart <hp@tmm.cx> | 2019-04-20 02:01:55 +0200 |
commit | 8b1e297fc6567ead2c400199348d89e17b552899 (patch) | |
tree | 7cc302337a56767015ae4b716cc2ac8fae57c557 /core/dictionary.cpp | |
parent | 8e652a1400ee20b99cf4829e8b4883fe3f254d59 (diff) | |
download | redot-engine-8b1e297fc6567ead2c400199348d89e17b552899.tar.gz |
Don't crash on printing nested types
When adding an Array or Dictionary to itself operator String() got in an
infinite loop. This commit adds a stack to operator String() (Through
the use of a new 'stringify method'). This stack keeps track of all
unique Arrays and Dictionaries it has seen. When a duplicate is found
only a static string is printed '[...]' or '{...}'.
This mirror Python's behavior in a similar case.
Diffstat (limited to 'core/dictionary.cpp')
-rw-r--r-- | core/dictionary.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/core/dictionary.cpp b/core/dictionary.cpp index bea0997cc9..5e4dfb9a5a 100644 --- a/core/dictionary.cpp +++ b/core/dictionary.cpp @@ -270,6 +270,10 @@ void Dictionary::operator=(const Dictionary &p_dictionary) { _ref(p_dictionary); } +const void *Dictionary::id() const { + return _p->variant_map.id(); +} + Dictionary::Dictionary(const Dictionary &p_from) { _p = NULL; _ref(p_from); |