summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2016-06-14 13:56:18 (GMT)
committerStefan Radomski <github@mintwerk.de>2016-06-14 13:56:18 (GMT)
commited6aee05e2843be65c4ab445d79e70dc8dacc07b (patch)
tree1819481be3dadd13361024ae76245989ee5dca85
parenta17466eefe7576a2c56b8a46ff03e359c04ad5ae (diff)
downloaduscxml-ed6aee05e2843be65c4ab445d79e70dc8dacc07b.zip
uscxml-ed6aee05e2843be65c4ab445d79e70dc8dacc07b.tar.gz
uscxml-ed6aee05e2843be65c4ab445d79e70dc8dacc07b.tar.bz2
Fixed issue 84
-rw-r--r--src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp9
-rw-r--r--test/issues/test-issue84.scxml22
2 files changed, 27 insertions, 4 deletions
diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
index 67294da..717def9 100644
--- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
@@ -73,18 +73,19 @@ static Data getLuaAsData(lua_State* _luaState, const luabridge::LuaRef& lua) {
data.atom = toStr(lua.cast<int>());
data.type = Data::INTERPRETED;
} else if(lua.isString()) {
- data.atom = lua.tostring();
+ data.atom = lua.cast<std::string>();
data.type = Data::VERBATIM;
} else if(lua.isTable()) {
bool isArray = false;
bool isMap = false;
for (luabridge::Iterator iter (lua); !iter.isNil(); ++iter) {
- luabridge::LuaRef luaKey = iter.key();
+ luabridge::LuaRef luaKey = iter.key();
luabridge::LuaRef luaVal = *iter;
if (luaKey.isString()) {
- assert(!isArray);
+ assert(!isArray);
isMap = true;
- data.compound[luaKey.tostring()] = getLuaAsData(_luaState, luaVal);
+ // luaKey.tostring() is not working?! see issue84
+ data.compound[luaKey.cast<std::string>()] = getLuaAsData(_luaState, luaVal);
} else {
assert(!isMap);
isArray = true;
diff --git a/test/issues/test-issue84.scxml b/test/issues/test-issue84.scxml
new file mode 100644
index 0000000..09fd265
--- /dev/null
+++ b/test/issues/test-issue84.scxml
@@ -0,0 +1,22 @@
+<scxml datamodel="lua" initial="Start" name="Root" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
+ <datamodel>
+ <data id="testTable">{
+ a=555,b=777,c=888
+}
+ </data>
+ </datamodel>
+ <final id="pass"/>
+ <final id="fail"/>
+ <state id="Start">
+ <onentry>
+ <script>print('*************************')
+print(type(testTable))
+for k,v in pairs(testTable) do
+ print(string.format(&quot;key=%s,value=%s&quot;,tostring(k),tostring(v)))
+end
+ </script>
+ </onentry>
+ <transition target="pass"/>
+ <transition event="error.*" target="Fail"/>
+ </state>
+</scxml>