| 8057 | } |
| 8058 | |
| 8059 | bool is_posinv() |
| 8060 | { |
| 8061 | switch (_type) |
| 8062 | { |
| 8063 | case ast_func_position: |
| 8064 | return false; |
| 8065 | |
| 8066 | case ast_string_constant: |
| 8067 | case ast_number_constant: |
| 8068 | case ast_variable: |
| 8069 | return true; |
| 8070 | |
| 8071 | case ast_step: |
| 8072 | case ast_step_root: |
| 8073 | return true; |
| 8074 | |
| 8075 | case ast_predicate: |
| 8076 | case ast_filter: |
| 8077 | case ast_filter_posinv: |
| 8078 | return true; |
| 8079 | |
| 8080 | default: |
| 8081 | if (_left && !_left->is_posinv()) return false; |
| 8082 | |
| 8083 | for (xpath_ast_node* n = _right; n; n = n->_next) |
| 8084 | if (!n->is_posinv()) return false; |
| 8085 | |
| 8086 | return true; |
| 8087 | } |
| 8088 | } |
| 8089 | |
| 8090 | xpath_value_type rettype() const |
| 8091 | { |
no outgoing calls
no test coverage detected