diff options
author | Stefan Radomski <github@mintwerk.de> | 2017-08-01 21:47:10 (GMT) |
---|---|---|
committer | Stefan Radomski <github@mintwerk.de> | 2017-08-01 21:47:10 (GMT) |
commit | 045bde78c0587316e0373c7698413412d0f315f9 (patch) | |
tree | f90d4ceb9d48fdc0dc240fce031dc81308e471dd /src/uscxml/interpreter/BasicContentExecutor.cpp | |
parent | e0a7e43e2e41639bb50127cc5419b712a7b1f6e2 (diff) | |
download | uscxml-045bde78c0587316e0373c7698413412d0f315f9.zip uscxml-045bde78c0587316e0373c7698413412d0f315f9.tar.gz uscxml-045bde78c0587316e0373c7698413412d0f315f9.tar.bz2 |
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 |