diff options
-rw-r--r-- | src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp | 21 | ||||
-rw-r--r-- | test/issues/test-issue83.scxml | 14 |
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("x=%d",x)) + </script> + <raise event="done" /> + </onentry> + <transition event="error.*" target="fail"/> + <transition event="*" target="pass"/> + </state> + <final id="pass"/> + <final id="fail"/> +</scxml> |