summaryrefslogtreecommitdiff
path: root/Source/WebCore/xml/XPathParser.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/xml/XPathParser.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/xml/XPathParser.cpp')
-rw-r--r--Source/WebCore/xml/XPathParser.cpp39
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);
}
} }