XPath: evaluate_string refactoring (also fixes setjmp warning on MinGW without breaking DMC/SunCC)

git-svn-id: http://pugixml.googlecode.com/svn/trunk@733 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-09-14 16:44:13 +00:00
parent 39ee42f907
commit 1a764a3ee2

View File

@ -9070,37 +9070,34 @@ namespace pugi
return _root->eval_number(c, sd.stack); return _root->eval_number(c, sd.stack);
} }
static xpath_string evaluate_string_impl(xpath_ast_node* root, const xpath_node& n, xpath_stack_data& sd)
{
if (!root) return xpath_string();
#ifdef PUGIXML_NO_EXCEPTIONS
if (setjmp(sd.error_handler)) return xpath_string();
#endif
xpath_context c(n, 1, 1);
return root->eval_string(c, sd.stack);
}
#ifndef PUGIXML_NO_STL #ifndef PUGIXML_NO_STL
string_t xpath_query::evaluate_string(const xpath_node& n) const string_t xpath_query::evaluate_string(const xpath_node& n) const
{ {
if (!_root) return string_t();
xpath_context c(n, 1, 1);
xpath_stack_data sd; xpath_stack_data sd;
#ifdef PUGIXML_NO_EXCEPTIONS return evaluate_string_impl(_root, n, sd).c_str();
if (setjmp(sd.error_handler)) return string_t();
#endif
return _root->eval_string(c, sd.stack).c_str();
} }
#endif #endif
size_t xpath_query::evaluate_string(char_t* buffer, volatile size_t capacity, const xpath_node& n) const size_t xpath_query::evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const
{ {
xpath_context c(n, 1, 1);
xpath_stack_data sd; xpath_stack_data sd;
#ifdef PUGIXML_NO_EXCEPTIONS xpath_string r = evaluate_string_impl(_root, n, sd);
if (setjmp(sd.error_handler))
{
if (capacity > 0) *buffer = 0;
return 1;
}
#endif
xpath_string r = _root ? _root->eval_string(c, sd.stack) : xpath_string();
size_t size = r.length() + 1; size_t size = r.length() + 1;