diff options
Diffstat (limited to 'Source/WebCore/xml/XPathParser.cpp')
-rw-r--r-- | Source/WebCore/xml/XPathParser.cpp | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/Source/WebCore/xml/XPathParser.cpp b/Source/WebCore/xml/XPathParser.cpp index 1dae7f2c7..b6bb205dc 100644 --- a/Source/WebCore/xml/XPathParser.cpp +++ b/Source/WebCore/xml/XPathParser.cpp @@ -33,6 +33,7 @@ #include "XPathException.h" #include "XPathNSResolver.h" #include "XPathPath.h" +#include "XPathStep.h" #include <wtf/NeverDestroyed.h> #include <wtf/StdLibExtras.h> #include <wtf/text/StringHash.h> @@ -99,8 +100,8 @@ static void populateAxisNamesMap(HashMap<String, Step::Axis>& axisNames) { "preceding-sibling", Step::PrecedingSiblingAxis }, { "self", Step::SelfAxis } }; - for (unsigned i = 0; i < WTF_ARRAY_LENGTH(axisNameList); ++i) - axisNames.add(axisNameList[i].name, axisNameList[i].axis); + for (auto& axisName : axisNameList) + axisNames.add(axisName.name, axisName.axis); } static bool parseAxisName(const String& name, Step::Axis& type) @@ -188,7 +189,7 @@ Parser::Token Parser::lexString() if (m_data[m_nextPos] == delimiter) { String value = m_data.substring(startPos, m_nextPos - startPos); if (value.isNull()) - value = ""; + value = emptyString(); ++m_nextPos; // Consume the char. return Token(LITERAL, value); } @@ -208,7 +209,7 @@ Parser::Token Parser::lexNumber() UChar aChar = m_data[m_nextPos]; if (aChar >= 0xff) break; - if (aChar < '0' || aChar > '9') { + if (!isASCIIDigit(aChar)) { if (aChar == '.' && !seenDot) seenDot = true; else @@ -282,7 +283,7 @@ inline Parser::Token Parser::nextTokenInternal() char next = peekAheadHelper(); if (next == '.') return makeTokenAndAdvance(DOTDOT, 2); - if (next >= '0' && next <= '9') + if (isASCIIDigit(next)) return lexNumber(); return makeTokenAndAdvance('.'); } @@ -381,7 +382,7 @@ inline Parser::Token Parser::nextTokenInternal() if (name == "node") return Token(NODE); if (name == "text") - return Token(TEXT); + return Token(TEXT_); if (name == "comment") return Token(COMMENT); @@ -399,12 +400,9 @@ inline Parser::Token Parser::nextToken() return token; } -Parser::Parser(const String& statement, XPathNSResolver* resolver) +Parser::Parser(const String& statement, RefPtr<XPathNSResolver>&& resolver) : m_data(statement) - , m_resolver(resolver) - , m_nextPos(0) - , m_lastTokenType(0) - , m_sawNamespaceError(false) + , m_resolver(WTFMove(resolver)) { } @@ -452,27 +450,22 @@ bool Parser::expandQualifiedName(const String& qualifiedName, String& localName, localName = qualifiedName.substring(colon + 1); } else localName = qualifiedName; - return true; } -std::unique_ptr<Expression> Parser::parseStatement(const String& statement, XPathNSResolver* resolver, ExceptionCode& ec) +ExceptionOr<std::unique_ptr<Expression>> Parser::parseStatement(const String& statement, RefPtr<XPathNSResolver>&& resolver) { - Parser parser(statement, resolver); + Parser parser { statement, WTFMove(resolver) }; int parseError = xpathyyparse(parser); - if (parser.m_sawNamespaceError) { - ec = NAMESPACE_ERR; - return nullptr; - } + if (parser.m_sawNamespaceError) + return Exception { NAMESPACE_ERR }; - if (parseError) { - ec = XPathException::INVALID_EXPRESSION_ERR; - return nullptr; - } + if (parseError) + return Exception { XPathException::INVALID_EXPRESSION_ERR }; - return std::move(parser.m_result); + return WTFMove(parser.m_result); } } } |