summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2016-06-13 13:24:09 (GMT)
committerStefan Radomski <github@mintwerk.de>2016-06-13 13:24:09 (GMT)
commit07395f2766d70c55f51674dc3027d7b19a4ccc26 (patch)
tree8b74a3b00f41e1e7ea124a37e41c1168385bc4b4
parentdabfa4eb94e376f78ae32d8eca998ba9c4875f57 (diff)
downloaduscxml-07395f2766d70c55f51674dc3027d7b19a4ccc26.zip
uscxml-07395f2766d70c55f51674dc3027d7b19a4ccc26.tar.gz
uscxml-07395f2766d70c55f51674dc3027d7b19a4ccc26.tar.bz2
Resolved issue 83
-rw-r--r--src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp21
-rw-r--r--test/issues/test-issue83.scxml14
2 files changed, 28 insertions, 7 deletions
diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
index 6fc5ac4..67294da 100644
--- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
@@ -334,16 +334,23 @@ Data LuaDataModel::evalAsData(const std::string& content) {
data = getLuaAsData(_luaState, luabridge::LuaRef::fromStack(_luaState, -1));
}
lua_pop(_luaState, retVals);
+ return data;
} catch (ErrorEvent e) {
- int retVals = luaEval(_luaState, trimmedExpr);
+ }
+
+ try {
+ // evaluate again without the return()
+ int retVals = luaEval(_luaState, trimmedExpr);
+
if (retVals == 1) {
data = getLuaAsData(_luaState, luabridge::LuaRef::fromStack(_luaState, -1));
- lua_pop(_luaState, retVals);
- } else {
- lua_pop(_luaState, retVals);
- throw e; // we will assume syntax error and throw
- }
- }
+ }
+ lua_pop(_luaState, retVals);
+ return data;
+
+ } catch (ErrorEvent e) {
+ throw e; // we will assume syntax error and throw
+ }
return data;
}
diff --git a/test/issues/test-issue83.scxml b/test/issues/test-issue83.scxml
new file mode 100644
index 0000000..c3afb86
--- /dev/null
+++ b/test/issues/test-issue83.scxml
@@ -0,0 +1,14 @@
+<scxml datamodel="lua" initial="Start" name="Root" version="1.0" xmlns="http://www.w3.org/2005/07/scxml">
+ <state id="Start">
+ <onentry>
+ <script>x = 15
+print(string.format(&quot;x=%d&quot;,x))
+ </script>
+ <raise event="done" />
+ </onentry>
+ <transition event="error.*" target="fail"/>
+ <transition event="*" target="pass"/>
+ </state>
+ <final id="pass"/>
+ <final id="fail"/>
+</scxml>