// File: /workspace/github_cpp_makefile_star2_O3/jliesch[P]ofxget/pugixml/pugixml.cpp
// Function: pugi::impl::(anonymous namespace)::xpath_parser::parse_step(pugi::impl::(anonymous namespace)::xpath_ast_node*)
xpath_ast_node* parse_step(xpath_ast_node* set)
		{
			if (set && set->rettype() != xpath_type_node_set)
				return error("Step has to be applied to node set");

			bool axis_specified = false;
			axis_t axis = axis_child; // implied child axis

			if (_lexer.current() == lex_axis_attribute)
			{
				axis = axis_attribute;
				axis_specified = true;

				_lexer.next();
			}
			else if (_lexer.current() == lex_dot)
			{
				_lexer.next();

				if (_lexer.current() == lex_open_square_brace)
					return error("Predicates are not allowed after an abbreviated step");

				return alloc_node(ast_step, set, axis_self, nodetest_type_node, 0);
			}
			else if (_lexer.current() == lex_double_dot)
			{
				_lexer.next();

				if (_lexer.current() == lex_open_square_brace)
					return error("Predicates are not allowed after an abbreviated step");

				return alloc_node(ast_step, set, axis_parent, nodetest_type_node, 0);
			}

			nodetest_t nt_type = nodetest_none;
			xpath_lexer_string nt_name;

			if (_lexer.current() == lex_string)
			{
				// node name test
				nt_name = _lexer.contents();
				_lexer.next();

				// was it an axis name?
				if (_lexer.current() == lex_double_colon)
				{
					// parse axis name
					if (axis_specified)
						return error("Two axis specifiers in one step");

					axis = parse_axis_name(nt_name, axis_specified);

					if (!axis_specified)
						return error("Unknown axis");

					// read actual node test
					_lexer.next();

					if (_lexer.current() == lex_multiply)
					{
						nt_type = nodetest_all;
						nt_name = xpath_lexer_string();
						_lexer.next();
					}
					else if (_lexer.current() == lex_string)
					{
						nt_name = _lexer.contents();
						_lexer.next();
					}
					else
					{
						return error("Unrecognized node test");
					}
				}

				if (nt_type == nodetest_none)
				{
					// node type test or processing-instruction
					if (_lexer.current() == lex_open_brace)
					{
						_lexer.next();

						if (_lexer.current() == lex_close_brace)
						{
							_lexer.next();

							nt_type = parse_node_test_type(nt_name);

							if (nt_type == nodetest_none)
								return error("Unrecognized node type");

							nt_name = xpath_lexer_string();
						}
						else if (nt_name == PUGIXML_TEXT("processing-instruction"))
						{
							if (_lexer.current() != lex_quoted_string)
								return error("Only literals are allowed as arguments to processing-instruction()");

							nt_type = nodetest_pi;
							nt_name = _lexer.contents();
							_lexer.next();

							if (_lexer.current() != lex_close_brace)
								return error("Unmatched brace near processing-instruction()");
							_lexer.next();
						}
						else
						{
							return error("Unmatched brace near node type test");
						}
					}
					// QName or NCName:*
					else
					{
						if (nt_name.end - nt_name.begin > 2 && nt_name.end[-2] == ':' && nt_name.end[-1] == '*') // NCName:*
						{
							nt_name.end--; // erase *

							nt_type = nodetest_all_in_namespace;
						}
						else
						{
							nt_type = nodetest_name;
						}
					}
				}
			}
			else if (_lexer.current() == lex_multiply)
			{
				nt_type = nodetest_all;
				_lexer.next();
			}
			else
			{
				return error("Unrecognized node test");
			}

			const char_t* nt_name_copy = alloc_string(nt_name);
			if (!nt_name_copy) return 0;

			xpath_ast_node* n = alloc_node(ast_step, set, axis, nt_type, nt_name_copy);
			if (!n) return 0;

			xpath_ast_node* last = 0;

			while (_lexer.current() == lex_open_square_brace)
			{
				_lexer.next();

				xpath_ast_node* expr = parse_expression();
				if (!expr) return 0;

				xpath_ast_node* pred = alloc_node(ast_predicate, 0, expr, predicate_default);
				if (!pred) return 0;

				if (_lexer.current() != lex_close_square_brace)
					return error("Expected ']' to match an opening '['");
				_lexer.next();

				if (last) last->set_next(pred);
				else n->set_right(pred);

				last = pred;
			}

			return n;
		}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r15
movq %rdi, %rbx
testq %rsi, %rsi
je 0x2c0f8
cmpb $0x1, 0x1(%r15)
jne 0x2c120
leaq 0x8(%rbx), %r14
movl 0x28(%rbx), %eax
cmpl $0x18, %eax
je 0x2c162
cmpl $0x17, %eax
je 0x2c130
cmpl $0x16, %eax
jne 0x2c184
movq %r14, %rdi
callq 0x2a77e
movl 0x28(%rbx), %eax
movb $0x2, %cl
movb $0x1, %bpl
jmp 0x2c188
movq 0x40(%rbx), %rax
leaq 0x7ab7(%rip), %rcx      # 0x33be2
jmp 0x2c6c0
movq %r14, %rdi
callq 0x2a77e
cmpl $0x12, 0x28(%rbx)
je 0x2c174
movq (%rbx), %rdi
movl $0x28, %esi
callq 0x2bfc0
testq %rax, %rax
je 0x2c6cf
movq %rax, %r12
movl $0x20c0138, (%rax)      # imm = 0x20C0138
jmp 0x2c2e1
movq %r14, %rdi
callq 0x2a77e
cmpl $0x12, 0x28(%rbx)
jne 0x2c2c2
movq 0x40(%rbx), %rax
leaq 0x7d54(%rip), %rcx      # 0x33ed3
jmp 0x2c6c0
movb $0x3, %cl
xorl %ebp, %ebp
cmpl $0x9, %eax
movq %r14, 0x10(%rsp)
je 0x2c1d4
cmpl $0x14, %eax
jne 0x2c6b5
movl %ecx, 0xc(%rsp)
movq 0x18(%rbx), %r12
movq 0x20(%rbx), %r13
movq %r14, %rdi
callq 0x2a77e
movl 0x28(%rbx), %eax
cmpl $0x19, %eax
jne 0x2c67a
testb %bpl, %bpl
je 0x2c2fd
movq 0x40(%rbx), %rax
leaq 0x7d39(%rip), %rcx      # 0x33f08
jmp 0x2c6c0
movl %ecx, 0xc(%rsp)
movq %r14, %rdi
callq 0x2a77e
leaq 0x3f22(%rip), %r13      # 0x30109
movl $0x7, %ebp
movq (%rbx), %rdi
movl $0x28, %esi
callq 0x2bfc0
testq %rax, %rax
je 0x2c6cf
movq %rax, %r12
movw $0x138, (%rax)          # imm = 0x138
movl 0xc(%rsp), %eax
movb %al, 0x2(%r12)
movb %bpl, 0x3(%r12)
movq %r15, 0x8(%r12)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%r12)
movq %r13, 0x20(%r12)
cmpl $0x12, 0x28(%rbx)
jne 0x2c6d2
movq %r12, %rbp
addq $0x10, %rbp
xorl %r14d, %r14d
movq 0x10(%rsp), %r13
movq %r13, %rdi
callq 0x2a77e
movq %rbx, %rdi
xorl %esi, %esi
callq 0x2aa8a
testq %rax, %rax
je 0x2c6cf
movq %rax, %r13
movq (%rbx), %rdi
movl $0x28, %esi
callq 0x2bfc0
testq %rax, %rax
je 0x2c6cf
movq %rax, %r15
movl $0x110, (%rax)          # imm = 0x110
xorl %eax, %eax
movq %rax, 0x8(%r15)
movq %r13, 0x10(%r15)
movq %rax, 0x18(%r15)
cmpl $0x13, 0x28(%rbx)
jne 0x2c422
movq 0x10(%rsp), %r13
movq %r13, %rdi
callq 0x2a77e
leaq 0x18(%r14), %rax
testq %r14, %r14
cmoveq %rbp, %rax
movq %r15, (%rax)
cmpl $0x12, 0x28(%rbx)
movq %r15, %r14
je 0x2c244
jmp 0x2c6d2
movq (%rbx), %rdi
movl $0x28, %esi
callq 0x2bfc0
testq %rax, %rax
je 0x2c6cf
movq %rax, %r12
movl $0x2090138, (%rax)      # imm = 0x2090138
movq %r15, 0x8(%r12)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%r12)
movq $0x0, 0x20(%r12)
jmp 0x2c6d2
movzbl (%r12), %eax
cmpl $0x6d, %eax
jg 0x2c3c9
addl $-0x61, %eax
cmpl $0x5, %eax
ja 0x2c61a
leaq 0x5882(%rip), %rcx      # 0x31ba0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r13, %rax
subq %r12, %rax
je 0x2c34a
xorl %ecx, %ecx
leaq 0x7cc0(%rip), %rdx      # 0x33ff8
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c35b
incq %rcx
cmpq %rcx, %rax
jne 0x2c338
leaq 0x7ca7(%rip), %rcx      # 0x33ff8
cmpb $0x0, (%rax,%rcx)
je 0x2c62f
cmpq %r12, %r13
je 0x2c37b
xorl %ecx, %ecx
leaq 0x7c98(%rip), %rdx      # 0x34001
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c38c
incq %rcx
cmpq %rcx, %rax
jne 0x2c369
leaq 0x7c7f(%rip), %rcx      # 0x34001
cmpb $0x0, (%rax,%rcx)
je 0x2c63d
cmpq %r12, %r13
je 0x2c3b0
xorl %ecx, %ecx
leaq 0x610d(%rip), %rdx      # 0x324a7
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c61a
incq %rcx
cmpq %rcx, %rax
jne 0x2c39a
leaq 0x60f0(%rip), %rcx      # 0x324a7
cmpb $0x0, (%rax,%rcx)
jne 0x2c61a
movb $0x2, %bpl
jmp 0x2c64a
cmpl $0x6e, %eax
je 0x2c552
cmpl $0x70, %eax
je 0x2c590
cmpl $0x73, %eax
jne 0x2c61a
subq %r12, %r13
je 0x2c407
xorl %eax, %eax
leaq 0x7c1b(%rip), %rcx      # 0x3400d
movb (%rax,%rcx), %dl
cmpb (%r12,%rax), %dl
jne 0x2c61a
incq %rax
cmpq %rax, %r13
jne 0x2c3f2
leaq 0x7bff(%rip), %rax      # 0x3400d
cmpb $0x0, (%r13,%rax)
jne 0x2c61a
movb $0xc, %bpl
jmp 0x2c64a
movq 0x40(%rbx), %rax
leaq 0x781c(%rip), %rcx      # 0x33c49
jmp 0x2c6c0
movq %r13, %rax
subq %r12, %rax
je 0x2c455
xorl %ecx, %ecx
leaq 0x7bcf(%rip), %rdx      # 0x34012
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c466
incq %rcx
cmpq %rcx, %rax
jne 0x2c443
leaq 0x7bb6(%rip), %rcx      # 0x34012
cmpb $0x0, (%rax,%rcx)
je 0x2c62a
cmpq %r12, %r13
je 0x2c48a
xorl %ecx, %ecx
leaq 0x7ba9(%rip), %rdx      # 0x3401d
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c61a
incq %rcx
cmpq %rcx, %rax
jne 0x2c474
leaq 0x7b8c(%rip), %rcx      # 0x3401d
cmpb $0x0, (%rax,%rcx)
jne 0x2c61a
movb $0x5, %bpl
jmp 0x2c64a
movq %r13, %rax
subq %r12, %rax
je 0x2c4c6
xorl %ecx, %ecx
leaq 0x7b7c(%rip), %rdx      # 0x34030
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c4d7
incq %rcx
cmpq %rcx, %rax
jne 0x2c4b4
leaq 0x7b63(%rip), %rcx      # 0x34030
cmpb $0x0, (%rax,%rcx)
je 0x2c633
cmpq %r12, %r13
je 0x2c4fb
xorl %ecx, %ecx
leaq 0x7b55(%rip), %rdx      # 0x3403a
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c61a
incq %rcx
cmpq %rcx, %rax
jne 0x2c4e5
leaq 0x7b38(%rip), %rcx      # 0x3403a
cmpb $0x0, (%rax,%rcx)
jne 0x2c61a
movb $0x7, %bpl
jmp 0x2c64a
subq %r12, %r13
je 0x2c537
xorl %eax, %eax
leaq 0x61c0(%rip), %rcx      # 0x326e2
movb (%rax,%rcx), %dl
cmpb (%r12,%rax), %dl
jne 0x2c61a
incq %rax
cmpq %rax, %r13
jne 0x2c522
leaq 0x61a4(%rip), %rax      # 0x326e2
cmpb $0x0, (%r13,%rax)
jne 0x2c61a
movb $0x3, %bpl
jmp 0x2c64a
subq %r12, %r13
je 0x2c575
xorl %eax, %eax
leaq 0x7aec(%rip), %rcx      # 0x3404c
movb (%rax,%rcx), %dl
cmpb (%r12,%rax), %dl
jne 0x2c61a
incq %rax
cmpq %rax, %r13
jne 0x2c560
leaq 0x7ad0(%rip), %rax      # 0x3404c
cmpb $0x0, (%r13,%rax)
jne 0x2c61a
movb $0x8, %bpl
jmp 0x2c64a
movq %r13, %rax
subq %r12, %rax
je 0x2c5b3
xorl %ecx, %ecx
leaq 0x741b(%rip), %rdx      # 0x339bc
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c5c0
incq %rcx
cmpq %rcx, %rax
jne 0x2c5a1
leaq 0x7402(%rip), %rcx      # 0x339bc
cmpb $0x0, (%rax,%rcx)
je 0x2c638
cmpq %r12, %r13
je 0x2c5e0
xorl %ecx, %ecx
leaq 0x7a88(%rip), %rdx      # 0x34056
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c5ed
incq %rcx
cmpq %rcx, %rax
jne 0x2c5ce
leaq 0x7a6f(%rip), %rcx      # 0x34056
cmpb $0x0, (%rax,%rcx)
je 0x2c642
cmpq %r12, %r13
je 0x2c60d
xorl %ecx, %ecx
leaq 0x7a65(%rip), %rdx      # 0x34060
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c61a
incq %rcx
cmpq %rcx, %rax
jne 0x2c5fb
leaq 0x7a4c(%rip), %rcx      # 0x34060
cmpb $0x0, (%rax,%rcx)
je 0x2c647
movq 0x40(%rbx), %rax
leaq 0x7903(%rip), %rcx      # 0x33f28
jmp 0x2c6c0
movb $0x4, %bpl
jmp 0x2c64a
xorl %ebp, %ebp
jmp 0x2c64a
movb $0x6, %bpl
jmp 0x2c64a
movb $0x9, %bpl
jmp 0x2c64a
movb $0x1, %bpl
jmp 0x2c64a
movb $0xa, %bpl
jmp 0x2c64a
movb $0xb, %bpl
movq %r14, %rdi
callq 0x2a77e
movl 0x28(%rbx), %eax
cmpl $0x9, %eax
je 0x2c7d1
cmpl $0x14, %eax
jne 0x2c6b5
movl %ebp, 0xc(%rsp)
movq 0x18(%rbx), %r12
movq 0x20(%rbx), %r13
movq %r14, %rdi
callq 0x2a77e
movl 0x28(%rbx), %eax
cmpl $0xc, %eax
jne 0x2c6e4
movq %r14, %rdi
callq 0x2a77e
movl 0x28(%rbx), %eax
cmpl $0xd, %eax
jne 0x2c755
movq %r14, %rdi
callq 0x2a77e
movq %r12, %rdi
movq %r13, %rsi
callq 0x2be42
testl %eax, %eax
je 0x2c794
movl %eax, %ebp
jmp 0x2c749
movq 0x40(%rbx), %rax
leaq 0x7875(%rip), %rcx      # 0x33f35
movq %rcx, (%rax)
movq 0x10(%rbx), %rcx
subq 0x30(%rbx), %rcx
movq %rcx, 0x8(%rax)
xorl %r12d, %r12d
movq %r12, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r13, %rax
subq %r12, %rax
movl $0x1, %ebp
cmpq $0x3, %rax
jl 0x2c711
cmpb $0x3a, -0x2(%r13)
jne 0x2c711
leaq -0x1(%r13), %rax
cmpb $0x2a, -0x1(%r13)
cmoveq %rax, %r13
movl $0x8, %eax
cmovel %eax, %ebp
testq %r12, %r12
je 0x2c749
movq (%rbx), %rdi
subq %r12, %r13
leaq 0x1(%r13), %rsi
callq 0x2bfc0
testq %rax, %rax
je 0x2c6cf
movq %r13, %r14
movq %rax, %r13
movq %rax, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x6090
movb $0x0, (%r13,%r14)
jmp 0x2c1ec
leaq 0x39b9(%rip), %r13      # 0x30109
jmp 0x2c1ec
subq %r12, %r13
je 0x2c775
xorl %ecx, %ecx
leaq 0x74a2(%rip), %rdx      # 0x33c05
movb (%rcx,%rdx), %sil
cmpb (%r12,%rcx), %sil
jne 0x2c784
incq %rcx
cmpq %rcx, %r13
jne 0x2c763
leaq 0x7489(%rip), %rcx      # 0x33c05
cmpb $0x0, (%r13,%rcx)
je 0x2c7a4
movq 0x40(%rbx), %rax
leaq 0x7845(%rip), %rcx      # 0x33fd4
jmp 0x2c6c0
movq 0x40(%rbx), %rax
leaq 0x77ad(%rip), %rcx      # 0x33f4c
jmp 0x2c6c0
cmpl $0xe, %eax
jne 0x2c7da
movq 0x18(%rbx), %r12
movq 0x20(%rbx), %r13
movq %r14, %rdi
callq 0x2a77e
cmpl $0xd, 0x28(%rbx)
jne 0x2c7ea
movq %r14, %rdi
callq 0x2a77e
movl $0x6, %ebp
jmp 0x2c711
movl %ebp, 0xc(%rsp)
jmp 0x2c1d8
movq 0x40(%rbx), %rax
leaq 0x777e(%rip), %rcx      # 0x33f63
jmp 0x2c6c0
movq 0x40(%rbx), %rax
leaq 0x77b1(%rip), %rcx      # 0x33fa6
jmp 0x2c6c0