summaryrefslogtreecommitdiff
path: root/src/map/script.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2014-08-27 13:40:22 -0700
committerBen Longbons <b.r.longbons@gmail.com>2014-08-27 13:40:38 -0700
commita88ffd2d9b2adec5de19a1bb88e6b8656985a044 (patch)
treec7c850ec7ccb0bc6e946588c72710092bbc0e163 /src/map/script.cpp
parent99c9ab6b3c6b0a877b454346addd57d18d1ea07e (diff)
downloadtmwa-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.cpp24
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))