diff options
author | Stefan Radomski <github@mintwerk.de> | 2017-08-02 06:04:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-02 06:04:38 (GMT) |
commit | 97e72c5cb5e70eca231f74f01097c9b2392b4c98 (patch) | |
tree | f90d4ceb9d48fdc0dc240fce031dc81308e471dd /src/uscxml/interpreter/BasicContentExecutor.cpp | |
parent | 998e624aaddb237767f5d80e0ff12eb2cfdc814b (diff) | |
parent | 045bde78c0587316e0373c7698413412d0f315f9 (diff) | |
download | uscxml-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.cpp | 22 |
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 |