XPath: Minor parsing refactoring

git-svn-id: http://pugixml.googlecode.com/svn/trunk@641 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-08-29 15:10:08 +00:00
parent 9b6dc1a585
commit 4662bc9e74

View File

@ -3369,6 +3369,18 @@ namespace pugi
return result;
}
static xpath_ast_node* parse(const char_t* query, xpath_allocator& alloc, xpath_parse_result* result)
{
result->error = 0;
result->offset = 0;
xpath_parser parser(query, alloc, result);
int error = setjmp(parser.m_error_handler);
return (error == 0) ? parser.parse() : 0;
}
};
const char* xpath_parse_result::description() const
@ -3379,23 +3391,11 @@ namespace pugi
xpath_query::xpath_query(const char_t* query): m_alloc(0), m_root(0)
{
m_alloc = new xpath_allocator;
m_root = xpath_parser::parse(query, *m_alloc, &_result);
xpath_parser parser(query, *m_alloc, &_result);
int error = setjmp(parser.m_error_handler);
if (error == 0)
{
m_root = parser.parse();
_result.error = 0;
_result.offset = 0;
}
else
if (!m_root)
{
delete m_alloc;
m_root = 0;
m_alloc = 0;
#ifndef PUGIXML_NO_EXCEPTIONS