diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-08-27 13:40:22 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-08-27 13:40:38 -0700 |
commit | a88ffd2d9b2adec5de19a1bb88e6b8656985a044 (patch) | |
tree | c7c850ec7ccb0bc6e946588c72710092bbc0e163 /src/map/script.cpp | |
parent | 99c9ab6b3c6b0a877b454346addd57d18d1ea07e (diff) | |
download | tmwa-a88ffd2d9b2adec5de19a1bb88e6b8656985a044.tar.gz tmwa-a88ffd2d9b2adec5de19a1bb88e6b8656985a044.tar.bz2 tmwa-a88ffd2d9b2adec5de19a1bb88e6b8656985a044.tar.xz tmwa-a88ffd2d9b2adec5de19a1bb88e6b8656985a044.zip |
Yes, I do
Diffstat (limited to 'src/map/script.cpp')
-rw-r--r-- | src/map/script.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/map/script.cpp b/src/map/script.cpp index d5eb379..4aeb7d9 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -1195,15 +1195,29 @@ RString conv_str(ScriptState *st, struct script_data *data) static __attribute__((warn_unused_result)) int conv_num(ScriptState *st, struct script_data *data) { + int rv = 0; get_val(st, data); assert (!data->is<ScriptDataRetInfo>()); - if (auto *u = data->get_if<ScriptDataStr>()) + MATCH (*data) { - RString p = u->str; - *data = ScriptDataInt{atoi(p.c_str())}; + default: + abort(); + CASE (const ScriptDataStr&, u) + { + RString p = u.str; + rv = atoi(p.c_str()); + } + CASE (const ScriptDataInt&, u) + { + return u.numi; + } + CASE (const ScriptDataPos&, u) + { + return u.numi; + } } - // TODO see if I also need to return for other types? - return data->get_if<ScriptDataInt>()->numi; + *data = ScriptDataInt{rv}; + return rv; } static __attribute__((warn_unused_result)) |