diff options
Diffstat (limited to 'src/pugixpath.cpp')
-rw-r--r-- | src/pugixpath.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/pugixpath.cpp b/src/pugixpath.cpp index 0478f39..c4134ed 100644 --- a/src/pugixpath.cpp +++ b/src/pugixpath.cpp @@ -965,6 +965,7 @@ namespace pugi private: const char_t* m_cur; + const char_t* m_cur_lexeme_pos; xpath_lexer_string m_cur_lexeme_contents; lexeme_t m_cur_lexeme; @@ -986,6 +987,9 @@ namespace pugi while (IS_CHARTYPEX(*cur, ctx_space)) ++cur; + // save lexeme position for error reporting + m_cur_lexeme_pos = cur; + switch (*cur) { case 0: @@ -1230,6 +1234,11 @@ namespace pugi return m_cur_lexeme; } + const char_t* current_pos() const + { + return m_cur_lexeme_pos; + } + const xpath_lexer_string& contents() const { assert(m_cur_lexeme == lex_number || m_cur_lexeme == lex_string || m_cur_lexeme == lex_quoted_string); @@ -2568,6 +2577,7 @@ namespace pugi { xpath_allocator& m_alloc; xpath_lexer m_lexer; + const char_t* m_query; xpath_parse_result* m_result; jmp_buf m_error_handler; @@ -2577,7 +2587,7 @@ namespace pugi void throw_error(const char* message) { m_result->error = message; - m_result->offset = 0; // $$$ lexer + m_result->offset = m_lexer.current_pos() - m_query; longjmp(m_error_handler, 1); } @@ -3332,7 +3342,7 @@ namespace pugi return parse_or_expression(); } - xpath_parser(const char_t* query, xpath_allocator& alloc, xpath_parse_result* result): m_alloc(alloc), m_lexer(query), m_result(result) + xpath_parser(const char_t* query, xpath_allocator& alloc, xpath_parse_result* result): m_alloc(alloc), m_lexer(query), m_query(query), m_result(result) { } |