summaryrefslogtreecommitdiffstats
path: root/src/uscxml/interpreter/BasicContentExecutor.cpp
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2017-08-02 06:04:38 (GMT)
committerGitHub <noreply@github.com>2017-08-02 06:04:38 (GMT)
commit97e72c5cb5e70eca231f74f01097c9b2392b4c98 (patch)
treef90d4ceb9d48fdc0dc240fce031dc81308e471dd /src/uscxml/interpreter/BasicContentExecutor.cpp
parent998e624aaddb237767f5d80e0ff12eb2cfdc814b (diff)
parent045bde78c0587316e0373c7698413412d0f315f9 (diff)
downloaduscxml-97e72c5cb5e70eca231f74f01097c9b2392b4c98.zip
uscxml-97e72c5cb5e70eca231f74f01097c9b2392b4c98.tar.gz
uscxml-97e72c5cb5e70eca231f74f01097c9b2392b4c98.tar.bz2
Merge pull request #165 from tklab-tud/sradomski
Reenabled V8, Debugger tests and smaller fixes
Diffstat (limited to 'src/uscxml/interpreter/BasicContentExecutor.cpp')
-rw-r--r--src/uscxml/interpreter/BasicContentExecutor.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/uscxml/interpreter/BasicContentExecutor.cpp b/src/uscxml/interpreter/BasicContentExecutor.cpp
index 87c2180..7b62fd4 100644
--- a/src/uscxml/interpreter/BasicContentExecutor.cpp
+++ b/src/uscxml/interpreter/BasicContentExecutor.cpp
@@ -251,7 +251,7 @@ void BasicContentExecutor::processAssign(XERCESC_NS::DOMElement* content) {
additionalAttr[X(attr->getNodeName()).str()] = X(attr->getNodeValue()).str();
}
- _callbacks->assign(location, elementAsData(content, true), additionalAttr);
+ _callbacks->assign(location, elementAsData(content), additionalAttr);
}
void BasicContentExecutor::processForeach(XERCESC_NS::DOMElement* content) {
@@ -545,7 +545,12 @@ void BasicContentExecutor::raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC
// content
std::list<DOMElement*> contents = DOMUtils::filterChildElements(XML_PREFIX(doneData).str() + "content", doneData);
if (contents.size() > 0) {
- doneEvent.data = elementAsData(contents.front());
+ if (HAS_ATTR(contents.front(), kXMLCharExpr) &&
+ !_callbacks->isLegalDataValue(ATTR(contents.front(), kXMLCharExpr))) {
+ ERROR_EXECUTION_THROW2("Expression '" + ATTR(contents.front(), kXMLCharExpr) + "' is not a legal data value", contents.front());
+ } else {
+ doneEvent.data = elementAsData(contents.front());
+ }
}
} catch (ErrorEvent e) {
ERROR_EXECUTION_RETHROW(e, "Syntax error in donedata element content", doneData);
@@ -594,15 +599,14 @@ void BasicContentExecutor::processParams(std::multimap<std::string, Data>& param
}
}
-Data BasicContentExecutor::elementAsData(XERCESC_NS::DOMElement* element, bool asExpression) {
+Data BasicContentExecutor::elementAsData(XERCESC_NS::DOMElement* element) {
// element with expr
if (HAS_ATTR(element, kXMLCharExpr)) {
- std::string expr = ATTR(element, kXMLCharExpr);
- if (_callbacks->isLegalDataValue(expr)) {
- return Data(expr, Data::INTERPRETED);
- } else {
- ERROR_EXECUTION_THROW2("Expression '" + expr + "' is not a legal data value", element);
- }
+ // we cannot throw here:
+ // - with init, we need to check in the datamodel
+ // - with content, we need to invoke isLegalDataValue later
+ // test 277, 528
+ return Data(ATTR(element, kXMLCharExpr), Data::INTERPRETED);
}
// element with external src - this ought to behave just as with child nodes below