// File: /workspace/github_c_makefile_star2_O0/macournoyer[P]peg/compile.c
// Function: makeCharClass
static char *makeCharClass(unsigned char *cclass)
{
  unsigned char	 bits[32];
  setter	 set;
  int		 c, prev= -1;
  static char	 string[256];
  char		*ptr;

  if ('^' == *cclass)
    {
      memset(bits, 255, 32);
      set= charClassClear;
      ++cclass;
    }
  else
    {
      memset(bits, 0, 32);
      set= charClassSet;
    }
  while ((c= *cclass++))
    {
      if ('-' == c && *cclass && prev >= 0)
	{
	  for (c= *cclass++;  prev <= c;  ++prev)
	    set(bits, prev);
	  prev= -1;
	}
      else if ('\\' == c && *cclass)
	{
	  switch (c= *cclass++)
	    {
	    case 'a':  c= '\a'; break;	/* bel */
	    case 'b':  c= '\b'; break;	/* bs */
	    case 'e':  c= '\e'; break;	/* esc */
	    case 'f':  c= '\f'; break;	/* ff */
	    case 'n':  c= '\n'; break;	/* nl */
	    case 'r':  c= '\r'; break;	/* cr */
	    case 't':  c= '\t'; break;	/* ht */
	    case 'v':  c= '\v'; break;	/* vt */
	    default:		break;
	    }
	  set(bits, prev= c);
	}
      else
	set(bits, prev= c);
    }

  ptr= string;
  for (c= 0;  c < 32;  ++c)
    ptr += sprintf(ptr, "\\%03o", bits[c]);

  return string;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movl $0xffffffff, -0x40(%rbp) # imm = 0xFFFFFFFF
movq -0x8(%rbp), %rax
movzbl (%rax), %ecx
movl $0x5e, %eax
cmpl %ecx, %eax
jne 0x5f6f
leaq -0x30(%rbp), %rdi
movl $0xff, %esi
movl $0x20, %edx
callq 0x1070
leaq 0x243(%rip), %rax       # 0x61a0
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x8(%rbp)
jmp 0x5f8a
leaq -0x30(%rbp), %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x1070
leaq 0x25a(%rip), %rax       # 0x61e0
movq %rax, -0x38(%rbp)
jmp 0x5f8c
movq -0x8(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x8(%rbp)
movzbl (%rax), %eax
movl %eax, -0x3c(%rbp)
cmpl $0x0, %eax
je 0x60ce
movl $0x2d, %eax
cmpl -0x3c(%rbp), %eax
jne 0x6007
movq -0x8(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x6007
cmpl $0x0, -0x40(%rbp)
jl 0x6007
movq -0x8(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x8(%rbp)
movzbl (%rax), %eax
movl %eax, -0x3c(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jg 0x5ffb
movq -0x38(%rbp), %rax
leaq -0x30(%rbp), %rdi
movl -0x40(%rbp), %esi
callq *%rax
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x5fdb
movl $0xffffffff, -0x40(%rbp) # imm = 0xFFFFFFFF
jmp 0x60c9
movl $0x5c, %eax
cmpl -0x3c(%rbp), %eax
jne 0x60b7
movq -0x8(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x60b7
movq -0x8(%rbp), %rax
movq %rax, %rcx
incq %rcx
movq %rcx, -0x8(%rbp)
movzbl (%rax), %eax
movl %eax, -0x3c(%rbp)
addl $-0x61, %eax
movl %eax, %ecx
movq %rcx, -0x50(%rbp)
subl $0x15, %eax
ja 0x60a3
movq -0x50(%rbp), %rax
leaq 0x1636(%rip), %rcx      # 0x7688
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x7, -0x3c(%rbp)
jmp 0x60a5
movl $0x8, -0x3c(%rbp)
jmp 0x60a5
movl $0x1b, -0x3c(%rbp)
jmp 0x60a5
movl $0xc, -0x3c(%rbp)
jmp 0x60a5
movl $0xa, -0x3c(%rbp)
jmp 0x60a5
movl $0xd, -0x3c(%rbp)
jmp 0x60a5
movl $0x9, -0x3c(%rbp)
jmp 0x60a5
movl $0xb, -0x3c(%rbp)
jmp 0x60a5
jmp 0x60a5
movq -0x38(%rbp), %rax
leaq -0x30(%rbp), %rdi
movl -0x3c(%rbp), %esi
movl %esi, -0x40(%rbp)
callq *%rax
jmp 0x60c7
movq -0x38(%rbp), %rax
leaq -0x30(%rbp), %rdi
movl -0x3c(%rbp), %esi
movl %esi, -0x40(%rbp)
callq *%rax
jmp 0x60c9
jmp 0x5f8c
leaq 0x810b(%rip), %rax      # 0xe1e0
movq %rax, -0x48(%rbp)
movl $0x0, -0x3c(%rbp)
cmpl $0x20, -0x3c(%rbp)
jge 0x611c
movq -0x48(%rbp), %rdi
movslq -0x3c(%rbp), %rax
movzbl -0x30(%rbp,%rax), %edx
leaq 0x2cb7(%rip), %rsi      # 0x8db1
movb $0x0, %al
callq 0x1160
movl %eax, %ecx
movq -0x48(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x60e0
leaq 0x80bd(%rip), %rax      # 0xe1e0
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)