// File: /workspace/github_c_makefile_star2_O2/macournoyer[P]peg/tree.c
// Function: Node_fprint
static void Node_fprint(FILE *stream, Node *node)
{
  assert(node);
  switch (node->type)
    {
    case Rule:		fprintf(stream, " %s", node->rule.name);				break;
    case Name:		fprintf(stream, " %s", node->name.rule->rule.name);			break;
    case Dot:		fprintf(stream, " .");							break;
    case Character:	fprintf(stream, " '%s'", node->character.value);			break;
    case String:	fprintf(stream, " \"%s\"", node->string.value);				break;
    case Class:		fprintf(stream, " [%s]", node->cclass.value);				break;
    case Action:	fprintf(stream, " { %s }", node->action.text);				break;
    case Predicate:	fprintf(stream, " ?{ %s }", node->action.text);				break;

    case Alternate:	node= node->alternate.first;
			fprintf(stream, " (");
			Node_fprint(stream, node);
			while ((node= node->any.next))
			  {
			    fprintf(stream, " |");
			    Node_fprint(stream, node);
			  }
			fprintf(stream, " )");
			break;

    case Sequence:	node= node->sequence.first;
			fprintf(stream, " (");
			Node_fprint(stream, node);
			while ((node= node->any.next))
			  Node_fprint(stream, node);
			fprintf(stream, " )");
			break;

    case PeekFor:	fprintf(stream, "&");  Node_fprint(stream, node->query.element);	break;
    case PeekNot:	fprintf(stream, "!");  Node_fprint(stream, node->query.element);	break;
    case Query:		Node_fprint(stream, node->query.element);  fprintf(stream, "?");	break;
    case Star:		Node_fprint(stream, node->query.element);  fprintf(stream, "*");	break;
    case Plus:		Node_fprint(stream, node->query.element);  fprintf(stream, "+");	break;
    default:
      fprintf(stream, "\nunknown node type %d\n", node->type);
      exit(1);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
pushq $0x21
popq %rbp
leaq 0x2059(%rip), %r15      # 0x52cc
pushq $0x26
popq %r12
testq %r14, %r14
je 0x341e
movl (%r14), %edx
leal -0x1(%rdx), %eax
cmpl $0xf, %eax
ja 0x343d
movslq (%r15,%rax,4), %rax
addq %r15, %rax
movl %ebp, %edi
jmpq *%rax
movl %r12d, %edi
movq %rbx, %rsi
callq 0x1090
movq 0x10(%r14), %r14
jmp 0x3277
movq 0x10(%r14), %rsi
movq %rbx, %rdi
callq 0x3258
pushq $0x3f
jmp 0x33b7
movq 0x10(%r14), %rsi
movq %rbx, %rdi
callq 0x3258
pushq $0x2a
jmp 0x33b7
movq 0x10(%r14), %r14
leaq 0x2243(%rip), %rdi      # 0x551f
pushq $0x2
popq %r15
pushq $0x1
popq %r12
movq %r15, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x1180
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3258
leaq 0x221e(%rip), %r13      # 0x5522
movq 0x8(%r14), %r14
testq %r14, %r14
je 0x33fb
movq %r13, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x1180
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3258
jmp 0x3304
movq 0x10(%r14), %rdx
leaq 0x21dc(%rip), %rsi      # 0x5516
jmp 0x3391
movq 0x10(%r14), %rdx
leaq 0x21c7(%rip), %rsi      # 0x550e
jmp 0x3391
movq 0x10(%r14), %rdx
leaq 0x21ae(%rip), %rsi      # 0x5502
jmp 0x3391
movq 0x10(%r14), %rdx
leaq 0x1cb8(%rip), %rsi      # 0x5019
jmp 0x3391
leaq 0x2195(%rip), %rdi      # 0x54ff
jmp 0x3402
movq 0x10(%r14), %rdx
jmp 0x337d
movq 0x10(%r14), %rax
movq 0x10(%rax), %rdx
leaq 0x1c86(%rip), %rsi      # 0x500a
jmp 0x3391
movq 0x10(%r14), %rdx
leaq 0x2177(%rip), %rsi      # 0x5508
movq %rbx, %rdi
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x10c0
movq 0x10(%r14), %rsi
movq %rbx, %rdi
callq 0x3258
pushq $0x2b
popq %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1090
movq 0x10(%r14), %r14
leaq 0x2146(%rip), %rdi      # 0x551f
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
callq 0x1180
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3258
movq 0x8(%r14), %r14
testq %r14, %r14
jne 0x33e7
leaq 0x2123(%rip), %rdi      # 0x5525
pushq $0x2
popq %rsi
pushq $0x1
popq %rdx
movq %rbx, %rcx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1180
leaq 0x1f15(%rip), %rdi      # 0x533a
leaq 0x1ef0(%rip), %rsi      # 0x531c
leaq 0x20ab(%rip), %rcx      # 0x54de
movl $0x128, %edx            # imm = 0x128
callq 0x1060
leaq 0x20e4(%rip), %rsi      # 0x5528
movq %rbx, %rdi
xorl %eax, %eax
callq 0x10c0
pushq $0x1
popq %rdi
callq 0x1170