summaryrefslogtreecommitdiffstats
path: root/src/uscxml/interpreter
diff options
context:
space:
mode:
authorStefan Radomski <sradomski@mintwerk.de>2015-07-08 20:03:03 (GMT)
committerStefan Radomski <sradomski@mintwerk.de>2015-07-08 20:03:03 (GMT)
commit57ba362eae6e8209cf560555fd4cc4bb76dbe2a1 (patch)
tree00a2e2c5fd6993a5ee118df147cae3ef6e9cca9a /src/uscxml/interpreter
parentf02d7e5919f16d8396839fcff1e0588d6ccf3004 (diff)
downloaduscxml-57ba362eae6e8209cf560555fd4cc4bb76dbe2a1.zip
uscxml-57ba362eae6e8209cf560555fd4cc4bb76dbe2a1.tar.gz
uscxml-57ba362eae6e8209cf560555fd4cc4bb76dbe2a1.tar.bz2
done.event bug and prolog tests
Fixed the done.event bug and added first prolog transformed IRP tests
Diffstat (limited to 'src/uscxml/interpreter')
-rw-r--r--src/uscxml/interpreter/InterpreterDraft6.cpp12
-rw-r--r--src/uscxml/interpreter/InterpreterRC.cpp18
2 files changed, 23 insertions, 7 deletions
diff --git a/src/uscxml/interpreter/InterpreterDraft6.cpp b/src/uscxml/interpreter/InterpreterDraft6.cpp
index 6bbb7d8..48ba78f 100644
--- a/src/uscxml/interpreter/InterpreterDraft6.cpp
+++ b/src/uscxml/interpreter/InterpreterDraft6.cpp
@@ -441,7 +441,15 @@ void InterpreterDraft6::enterStates(const Arabica::XPath::NodeSet<std::string>&
}
#endif
if (isFinal(stateElem)) {
- internalDoneSend(stateElem);
+
+ Arabica::DOM::Element<std::string> doneData;
+ Arabica::XPath::NodeSet<std::string> doneDatas = filterChildElements(_nsInfo.xmlNSPrefix + "donedata", stateElem);
+ if (doneDatas.size() > 0) {
+ // only process first donedata element
+ doneData = Element<std::string>(doneDatas[0]);
+ }
+
+ internalDoneSend(stateElem, doneData);
Node<std::string> parent = stateElem.getParentNode();
if (parent.getNodeType() == Node_base::ELEMENT_NODE &&
@@ -458,7 +466,7 @@ void InterpreterDraft6::enterStates(const Arabica::XPath::NodeSet<std::string>&
}
}
if (inFinalState) {
- internalDoneSend(Element<std::string>(parent));
+ internalDoneSend(Element<std::string>(parent), Arabica::DOM::Element<std::string>());
}
}
}
diff --git a/src/uscxml/interpreter/InterpreterRC.cpp b/src/uscxml/interpreter/InterpreterRC.cpp
index 0237618..b933993 100644
--- a/src/uscxml/interpreter/InterpreterRC.cpp
+++ b/src/uscxml/interpreter/InterpreterRC.cpp
@@ -295,14 +295,22 @@ void InterpreterRC::enterStates(const Arabica::XPath::NodeSet<std::string>& enab
}
if (isFinal(s)) {
- internalDoneSend(s);
- if (parentIsScxmlState(s)) {
+ Element<std::string> parent = (Element<std::string>)s.getParentNode();
+
+ Arabica::DOM::Element<std::string> doneData;
+ Arabica::XPath::NodeSet<std::string> doneDatas = filterChildElements(_nsInfo.xmlNSPrefix + "donedata", s);
+ if (doneDatas.size() > 0) {
+ // only process first donedata element
+ doneData = Element<std::string>(doneDatas[0]);
+ }
+ internalDoneSend(parent, doneData);
+
+ if (parentIsScxmlState(s)) {
_topLevelFinalReached = true;
} else {
- Element<std::string> parent = (Element<std::string>)s.getParentNode();
Element<std::string> grandParent = (Element<std::string>)parent.getParentNode();
- internalDoneSend(parent);
+// internalDoneSend(parent, Arabica::DOM::Element<std::string>());
if (isParallel(grandParent)) {
Arabica::XPath::NodeSet<std::string> childs = getChildStates(grandParent);
@@ -314,7 +322,7 @@ void InterpreterRC::enterStates(const Arabica::XPath::NodeSet<std::string>& enab
}
}
if (inFinalState) {
- internalDoneSend(grandParent);
+ internalDoneSend(grandParent, Arabica::DOM::Element<std::string>());
}
}
}