#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ pjson_skip_word(char const **, char *);
int pjson_skip_val(const char **ppstr, int is_pair) {
  switch (**ppstr) {
  case '{':
  case '[': {
    char closec = **ppstr == '[' ? ']' : '}';
    (*ppstr)++;
    do {
      while (((*(*ppstr)) == ' ' || (*(*ppstr)) == '\t' ||
              (*(*ppstr)) == '\r' || (*(*ppstr)) == '\n' ||
              (*(*ppstr)) == '\b' || (*(*ppstr)) == '\f'))
        (*ppstr)++;
    } while (0);
    while (**ppstr && **ppstr != closec) {
      pjson_skip_val(ppstr, closec == '}');
      do {
        while (((*(*ppstr)) == ' ' || (*(*ppstr)) == '\t' ||
                (*(*ppstr)) == '\r' || (*(*ppstr)) == '\n' ||
                (*(*ppstr)) == '\b' || (*(*ppstr)) == '\f'))
          (*ppstr)++;
      } while (0);
      if (**ppstr == ',')
        (*ppstr)++;
      do {
        while (((*(*ppstr)) == ' ' || (*(*ppstr)) == '\t' ||
                (*(*ppstr)) == '\r' || (*(*ppstr)) == '\n' ||
                (*(*ppstr)) == '\b' || (*(*ppstr)) == '\f'))
          (*ppstr)++;
      } while (0);
    }
    if (**ppstr)
      (*ppstr)++;
    else
      return 0;
    break;
  }
  case '"': {
    (*ppstr)++;
    do {
      int is_escape = 0;
      while (*(*ppstr) && (*(*ppstr) != ('"') || is_escape)) {
        if (*(*ppstr) == ('\\'))
          is_escape = !is_escape;
        else
          is_escape = 0;
        (*ppstr)++;
      }
    } while (0);
    if (**ppstr)
      (*ppstr)++;
    else
      return 0;
    break;
  }
  case 't':
    if (!pjson_skip_word(ppstr, "true"))
      return 0;
  case 'f':
    if (!pjson_skip_word(ppstr, "false"))
      return 0;
  case 'n':
    if (!pjson_skip_word(ppstr, "null"))
      return 0;
  default:
    if (**ppstr == '-')
      (*ppstr)++;
    if (((**ppstr) >= '0' && (**ppstr) <= '9')) {
      while (((**ppstr) >= '0' && (**ppstr) <= '9') || **ppstr == '.' ||
             **ppstr == 'e' || **ppstr == 'E' || **ppstr == '+' ||
             **ppstr == '-')
        (*ppstr)++;
    } else {
      (*ppstr)++;
      return 0;
    }
  }
  if (is_pair) {
    do {
      while (((*(*ppstr)) == ' ' || (*(*ppstr)) == '\t' ||
              (*(*ppstr)) == '\r' || (*(*ppstr)) == '\n' ||
              (*(*ppstr)) == '\b' || (*(*ppstr)) == '\f'))
        (*ppstr)++;
    } while (0);
    if (**ppstr == ':')
      (*ppstr)++;
    else
      return 0;
    do {
      while (((*(*ppstr)) == ' ' || (*(*ppstr)) == '\t' ||
              (*(*ppstr)) == '\r' || (*(*ppstr)) == '\n' ||
              (*(*ppstr)) == '\b' || (*(*ppstr)) == '\f'))
        (*ppstr)++;
    } while (0);
    pjson_skip_val(ppstr, 0);
  }
  return 1;
}


x86 assembly (clang, -O0):
<pjson_skip_val>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
mov    %eax,-0x20(%rbp)
sub    $0x22,%eax
je     14ac <pjson_skip_val+0x38c>
jmp    114a <pjson_skip_val+0x2a>
mov    -0x20(%rbp),%eax
sub    $0x5b,%eax
je     119f <pjson_skip_val+0x7f>
jmp    115b <pjson_skip_val+0x3b>
mov    -0x20(%rbp),%eax
sub    $0x66,%eax
je     15b7 <pjson_skip_val+0x497>
jmp    116c <pjson_skip_val+0x4c>
mov    -0x20(%rbp),%eax
sub    $0x6e,%eax
je     15e1 <pjson_skip_val+0x4c1>
jmp    117d <pjson_skip_val+0x5d>
mov    -0x20(%rbp),%eax
sub    $0x74,%eax
je     158d <pjson_skip_val+0x46d>
jmp    118e <pjson_skip_val+0x6e>
mov    -0x20(%rbp),%eax
sub    $0x7b,%eax
jne    160b <pjson_skip_val+0x4eb>
jmp    119f <pjson_skip_val+0x7f>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%edx
mov    $0x7d,%eax
mov    $0x5d,%ecx
cmp    $0x5b,%edx
cmove  %ecx,%eax
mov    %al,-0x15(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    11cf <pjson_skip_val+0xaf>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x21(%rbp)
je     125a <pjson_skip_val+0x13a>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x21(%rbp)
je     125a <pjson_skip_val+0x13a>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x21(%rbp)
je     125a <pjson_skip_val+0x13a>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x21(%rbp)
je     125a <pjson_skip_val+0x13a>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0x21(%rbp)
je     125a <pjson_skip_val+0x13a>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0xc,%eax
sete   %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    126a <pjson_skip_val+0x14a>
jmp    127d <pjson_skip_val+0x15d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    11cf <pjson_skip_val+0xaf>
jmp    1282 <pjson_skip_val+0x162>
jmp    1287 <pjson_skip_val+0x167>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x22(%rbp)
je     12b5 <pjson_skip_val+0x195>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
movsbl -0x15(%rbp),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
test   $0x1,%al
jne    12c5 <pjson_skip_val+0x1a5>
jmp    1478 <pjson_skip_val+0x358>
mov    -0x10(%rbp),%rdi
movsbl -0x15(%rbp),%eax
cmp    $0x7d,%eax
sete   %al
and    $0x1,%al
movzbl %al,%esi
call   1030 <pjson_skip_val@plt>
jmp    12e2 <pjson_skip_val+0x1c2>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x23(%rbp)
je     136d <pjson_skip_val+0x24d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x23(%rbp)
je     136d <pjson_skip_val+0x24d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x23(%rbp)
je     136d <pjson_skip_val+0x24d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x23(%rbp)
je     136d <pjson_skip_val+0x24d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0x23(%rbp)
je     136d <pjson_skip_val+0x24d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0xc,%eax
sete   %al
mov    %al,-0x23(%rbp)
mov    -0x23(%rbp),%al
test   $0x1,%al
jne    137d <pjson_skip_val+0x25d>
jmp    1390 <pjson_skip_val+0x270>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    12e2 <pjson_skip_val+0x1c2>
jmp    1395 <pjson_skip_val+0x275>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
jne    13b6 <pjson_skip_val+0x296>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    13bb <pjson_skip_val+0x29b>
jmp    13c0 <pjson_skip_val+0x2a0>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x24(%rbp)
je     144b <pjson_skip_val+0x32b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x24(%rbp)
je     144b <pjson_skip_val+0x32b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x24(%rbp)
je     144b <pjson_skip_val+0x32b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x24(%rbp)
je     144b <pjson_skip_val+0x32b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0x24(%rbp)
je     144b <pjson_skip_val+0x32b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0xc,%eax
sete   %al
mov    %al,-0x24(%rbp)
mov    -0x24(%rbp),%al
test   $0x1,%al
jne    145b <pjson_skip_val+0x33b>
jmp    146e <pjson_skip_val+0x34e>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    13c0 <pjson_skip_val+0x2a0>
jmp    1473 <pjson_skip_val+0x353>
jmp    1287 <pjson_skip_val+0x167>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     149b <pjson_skip_val+0x37b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    14a7 <pjson_skip_val+0x387>
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    173c <pjson_skip_val+0x61c>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
movl   $0x0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x25(%rbp)
je     1501 <pjson_skip_val+0x3e1>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x22,%ecx
mov    %al,-0x26(%rbp)
jne    14fb <pjson_skip_val+0x3db>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
mov    %al,-0x26(%rbp)
mov    -0x26(%rbp),%al
mov    %al,-0x25(%rbp)
mov    -0x25(%rbp),%al
test   $0x1,%al
jne    1511 <pjson_skip_val+0x3f1>
jmp    1554 <pjson_skip_val+0x434>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    153a <pjson_skip_val+0x41a>
cmpl   $0x0,-0x1c(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1c(%rbp)
jmp    1541 <pjson_skip_val+0x421>
movl   $0x0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    14c1 <pjson_skip_val+0x3a1>
jmp    1559 <pjson_skip_val+0x439>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     157c <pjson_skip_val+0x45c>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    1588 <pjson_skip_val+0x468>
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    173c <pjson_skip_val+0x61c>
mov    -0x10(%rbp),%rdi
lea    0xa68(%rip),%rsi
call   1040 <pjson_skip_word@plt>
cmp    $0x0,%eax
jne    15b2 <pjson_skip_val+0x492>
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    15b7 <pjson_skip_val+0x497>
mov    -0x10(%rbp),%rdi
lea    0xa43(%rip),%rsi
call   1040 <pjson_skip_word@plt>
cmp    $0x0,%eax
jne    15dc <pjson_skip_val+0x4bc>
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    15e1 <pjson_skip_val+0x4c1>
mov    -0x10(%rbp),%rdi
lea    0xa1f(%rip),%rsi
call   1040 <pjson_skip_word@plt>
cmp    $0x0,%eax
jne    1606 <pjson_skip_val+0x4e6>
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    160b <pjson_skip_val+0x4eb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    162c <pjson_skip_val+0x50c>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     171d <pjson_skip_val+0x5fd>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     171d <pjson_skip_val+0x5fd>
jmp    1657 <pjson_skip_val+0x537>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1682 <pjson_skip_val+0x562>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x39,%ecx
mov    %al,-0x27(%rbp)
jle    16f5 <pjson_skip_val+0x5d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x2e,%ecx
mov    %al,-0x27(%rbp)
je     16f5 <pjson_skip_val+0x5d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x65,%ecx
mov    %al,-0x27(%rbp)
je     16f5 <pjson_skip_val+0x5d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x45,%ecx
mov    %al,-0x27(%rbp)
je     16f5 <pjson_skip_val+0x5d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x2b,%ecx
mov    %al,-0x27(%rbp)
je     16f5 <pjson_skip_val+0x5d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
sete   %al
mov    %al,-0x27(%rbp)
mov    -0x27(%rbp),%al
test   $0x1,%al
jne    1705 <pjson_skip_val+0x5e5>
jmp    1718 <pjson_skip_val+0x5f8>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    1657 <pjson_skip_val+0x537>
jmp    1737 <pjson_skip_val+0x617>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    173c <pjson_skip_val+0x61c>
cmpl   $0x0,-0x14(%rbp)
je     18fd <pjson_skip_val+0x7dd>
jmp    174b <pjson_skip_val+0x62b>
jmp    1750 <pjson_skip_val+0x630>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x28(%rbp)
je     17db <pjson_skip_val+0x6bb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x28(%rbp)
je     17db <pjson_skip_val+0x6bb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x28(%rbp)
je     17db <pjson_skip_val+0x6bb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x28(%rbp)
je     17db <pjson_skip_val+0x6bb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0x28(%rbp)
je     17db <pjson_skip_val+0x6bb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0xc,%eax
sete   %al
mov    %al,-0x28(%rbp)
mov    -0x28(%rbp),%al
test   $0x1,%al
jne    17eb <pjson_skip_val+0x6cb>
jmp    17fe <pjson_skip_val+0x6de>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    1750 <pjson_skip_val+0x630>
jmp    1803 <pjson_skip_val+0x6e3>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    1829 <pjson_skip_val+0x709>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    1835 <pjson_skip_val+0x715>
movl   $0x0,-0x4(%rbp)
jmp    1904 <pjson_skip_val+0x7e4>
jmp    183a <pjson_skip_val+0x71a>
jmp    183f <pjson_skip_val+0x71f>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x29(%rbp)
je     18ca <pjson_skip_val+0x7aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x29(%rbp)
je     18ca <pjson_skip_val+0x7aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x29(%rbp)
je     18ca <pjson_skip_val+0x7aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x29(%rbp)
je     18ca <pjson_skip_val+0x7aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0x29(%rbp)
je     18ca <pjson_skip_val+0x7aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0xc,%eax
sete   %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    18da <pjson_skip_val+0x7ba>
jmp    18ed <pjson_skip_val+0x7cd>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    183f <pjson_skip_val+0x71f>
jmp    18f2 <pjson_skip_val+0x7d2>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
call   1030 <pjson_skip_val@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pjson_skip_val>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %esi,%r13d
mov    %rdi,%rbx
mov    (%rdi),%rax
mov    (%rax),%cl
xor    %r14d,%r14d
movabs $0x100003700,%r12
movabs $0x40000000400000d,%r15
lea    0xeac(%rip),%rbp
movsbl %cl,%edx
lea    -0x5b(%rdx),%esi
cmp    $0x20,%esi
ja     1250 <pjson_skip_val+0x130>
movslq 0x0(%rbp,%rsi,4),%rdx
add    %rbp,%rdx
jmp    *%rdx
nopl   (%rax)
add    $0x1,%rax
mov    %rax,(%rbx)
movzbl (%rax),%edx
movsbl %dl,%esi
cmp    $0x20,%rdx
ja     1189 <pjson_skip_val+0x69>
bt     %rdx,%r12
jb     1170 <pjson_skip_val+0x50>
mov    %r14d,0x4(%rsp)
xor    %r14d,%r14d
cmp    $0x5b,%cl
setne  %r14b
shl    $0x5,%r14d
or     $0x5d,%r14d
test   %dl,%dl
sete   %dl
je     1230 <pjson_skip_val+0x110>
cmp    %esi,%r14d
je     1230 <pjson_skip_val+0x110>
xor    %ebp,%ebp
cmp    $0x5b,%cl
setne  %bpl
nopl   (%rax)
mov    %rbx,%rdi
mov    %ebp,%esi
call   1030 <pjson_skip_val@plt>
mov    (%rbx),%rax
nopl   (%rax)
movzbl (%rax),%ecx
cmp    $0x2c,%rcx
ja     1217 <pjson_skip_val+0xf7>
bt     %rcx,%r12
jae    11f0 <pjson_skip_val+0xd0>
add    $0x1,%rax
mov    %rax,(%rbx)
jmp    11d0 <pjson_skip_val+0xb0>
nopl   0x0(%rax,%rax,1)
cmp    $0x2c,%rcx
je     1210 <pjson_skip_val+0xf0>
jmp    1217 <pjson_skip_val+0xf7>
nopl   0x0(%rax,%rax,1)
test   %cl,%cl
sete   %dl
je     1230 <pjson_skip_val+0x110>
cmp    %esi,%r14d
jne    11c0 <pjson_skip_val+0xa0>
jmp    1230 <pjson_skip_val+0x110>
xchg   %ax,%ax
add    $0x1,%rax
mov    %rax,(%rbx)
movzbl (%rax),%ecx
movsbl %cl,%esi
cmp    $0x20,%rcx
ja     1200 <pjson_skip_val+0xe0>
bt     %rcx,%r12
jb     1210 <pjson_skip_val+0xf0>
jmp    1200 <pjson_skip_val+0xe0>
nopl   0x0(%rax,%rax,1)
xor    %ecx,%ecx
test   %dl,%dl
mov    0x4(%rsp),%r14d
lea    0xdc0(%rip),%rbp
jne    13e0 <pjson_skip_val+0x2c0>
add    $0x1,%rax
jmp    12b7 <pjson_skip_val+0x197>
nopl   0x0(%rax)
cmp    $0x22,%edx
jne    1312 <pjson_skip_val+0x1f2>
lea    0x1(%rax),%rcx
mov    %rcx,(%rbx)
mov    0x1(%rax),%sil
xor    %ecx,%ecx
cmp    $0x22,%sil
je     12b3 <pjson_skip_val+0x193>
test   %sil,%sil
je     13e0 <pjson_skip_val+0x2c0>
add    $0x2,%rax
xor    %ecx,%ecx
xor    %edi,%edi
nopl   (%rax)
mov    %rax,(%rbx)
movzbl (%rax),%edx
test   %dl,%dl
je     13e0 <pjson_skip_val+0x2c0>
cmp    $0x5c,%sil
sete   %sil
xor    $0x1,%dil
and    %sil,%dil
add    $0x1,%rax
mov    %edx,%esi
cmp    $0x22,%dl
jne    1280 <pjson_skip_val+0x160>
mov    %edx,%esi
test   %dil,%dil
jne    1280 <pjson_skip_val+0x160>
add    $0xfffffffffffffffe,%rax
add    $0x2,%rax
mov    %rax,(%rbx)
mov    %rax,%rdx
jmp    1365 <pjson_skip_val+0x245>
mov    %rbx,%rdi
lea    0xdb8(%rip),%rsi
call   1040 <pjson_skip_word@plt>
xor    %ecx,%ecx
test   %eax,%eax
je     13e0 <pjson_skip_val+0x2c0>
mov    %rbx,%rdi
lea    0xda4(%rip),%rsi
call   1040 <pjson_skip_word@plt>
xor    %ecx,%ecx
test   %eax,%eax
je     13e0 <pjson_skip_val+0x2c0>
mov    %rbx,%rdi
lea    0xd91(%rip),%rsi
call   1040 <pjson_skip_word@plt>
xor    %ecx,%ecx
test   %eax,%eax
je     13e0 <pjson_skip_val+0x2c0>
mov    (%rbx),%rax
mov    (%rax),%cl
cmp    $0x2d,%cl
jne    1324 <pjson_skip_val+0x204>
lea    0x1(%rax),%rdx
mov    %rdx,(%rbx)
mov    0x1(%rax),%cl
mov    %rdx,%rax
lea    -0x30(%rcx),%edx
add    $0x1,%rax
cmp    $0x9,%dl
ja     13db <pjson_skip_val+0x2bb>
mov    %rax,%rdx
jmp    134a <pjson_skip_val+0x22a>
nopl   0x0(%rax)
mov    %rdx,(%rbx)
movzbl (%rdx),%ecx
add    $0x1,%rdx
lea    -0x30(%rcx),%eax
cmp    $0xa,%al
jb     1340 <pjson_skip_val+0x220>
add    $0xd5,%cl
movzbl %cl,%eax
cmp    $0x3a,%al
ja     1361 <pjson_skip_val+0x241>
bt     %rax,%r15
jb     1340 <pjson_skip_val+0x220>
add    $0xffffffffffffffff,%rdx
mov    $0x1,%ecx
test   %r13d,%r13d
je     13e0 <pjson_skip_val+0x2c0>
lea    0x1(%rdx),%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rdx),%ecx
cmp    $0x3a,%rcx
ja     13de <pjson_skip_val+0x2be>
bt     %rcx,%r12
jae    13a0 <pjson_skip_val+0x280>
add    $0x1,%rdx
mov    %rdx,(%rbx)
add    $0x1,%rax
jmp    1380 <pjson_skip_val+0x260>
nopl   0x0(%rax)
cmp    $0x3a,%rcx
jne    13de <pjson_skip_val+0x2be>
cs nopw 0x0(%rax,%rax,1)
mov    %rax,(%rbx)
movzbl (%rax),%ecx
cmp    $0x20,%rcx
ja     13d0 <pjson_skip_val+0x2b0>
bt     %rcx,%r12
jae    13d0 <pjson_skip_val+0x2b0>
add    $0x1,%rax
jmp    13b0 <pjson_skip_val+0x290>
nopl   0x0(%rax,%rax,1)
mov    $0x1,%r14b
xor    %r13d,%r13d
jmp    1154 <pjson_skip_val+0x34>
mov    %rax,(%rbx)
xor    %ecx,%ecx
test   $0x1,%r14b
mov    $0x1,%eax
cmove  %ecx,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [5 x i8] c"true\00"
@.str.1 = [6 x i8] c"false\00"
@.str.2 = [5 x i8] c"null\00"
define i32 @pjson_skip_val(i8** %0, i32 %1) {
%3 = alloca i32
%4 = alloca i8**
%5 = alloca i32
%6 = alloca i8
%7 = alloca i32
store i8** %0, i8*** %4
store i32 %1, i32* %5
%8 = load i8**, i8*** %4
%9 = load i8*, i8** %8
%10 = load i8, i8* %9
%11 = sext i8 %10 to i32
switch i32 %11, label %273 [
i32 123, label %12
i32 91, label %12
i32 34, label %203
i32 116, label %255
i32 102, label %261
i32 110, label %267
]
12: ; preds = %2, %2
%13 = load i8**, i8*** %4
%14 = load i8*, i8** %13
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, 91
%18 = zext i1 %17 to i64
%19 = select i1 %17, i32 93, i32 125
%20 = trunc i32 %19 to i8
store i8 %20, i8* %6
%21 = load i8**, i8*** %4
%22 = load i8*, i8** %21
%23 = getelementptr inbounds i8, i8* %22, i32 1
store i8* %23, i8** %21
br label %24
24: ; preds = %12
br label %25
25: ; preds = %63, %24
%26 = load i8**, i8*** %4
%27 = load i8*, i8** %26
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp eq i32 %29, 32
br i1 %30, label %61, label %31
31: ; preds = %25
%32 = load i8**, i8*** %4
%33 = load i8*, i8** %32
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = icmp eq i32 %35, 9
br i1 %36, label %61, label %37
37: ; preds = %31
%38 = load i8**, i8*** %4
%39 = load i8*, i8** %38
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = icmp eq i32 %41, 13
br i1 %42, label %61, label %43
43: ; preds = %37
%44 = load i8**, i8*** %4
%45 = load i8*, i8** %44
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 10
br i1 %48, label %61, label %49
49: ; preds = %43
%50 = load i8**, i8*** %4
%51 = load i8*, i8** %50
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = icmp eq i32 %53, 8
br i1 %54, label %61, label %55
55: ; preds = %49
%56 = load i8**, i8*** %4
%57 = load i8*, i8** %56
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = icmp eq i32 %59, 12
br label %61
61: ; preds = %55, %49, %43, %37, %31, %25
%62 = phi i1 [ true, %49 ], [ true, %43 ], [ true, %37 ], [ true, %31 ], [ true, %25 ], [ %60, %55 ]
br i1 %62, label %63, label %67
63: ; preds = %61
%64 = load i8**, i8*** %4
%65 = load i8*, i8** %64
%66 = getelementptr inbounds i8, i8* %65, i32 1
store i8* %66, i8** %64
br label %25
67: ; preds = %61
br label %68
68: ; preds = %67
br label %69
69: ; preds = %191, %68
%70 = load i8**, i8*** %4
%71 = load i8*, i8** %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp ne i32 %73, 0
br i1 %74, label %75, label %83
75: ; preds = %69
%76 = load i8**, i8*** %4
%77 = load i8*, i8** %76
%78 = load i8, i8* %77
%79 = sext i8 %78 to i32
%80 = load i8, i8* %6
%81 = sext i8 %80 to i32
%82 = icmp ne i32 %79, %81
br label %83
83: ; preds = %75, %69
%84 = phi i1 [ false, %69 ], [ %82, %75 ]
br i1 %84, label %85, label %192
85: ; preds = %83
%86 = load i8**, i8*** %4
%87 = load i8, i8* %6
%88 = sext i8 %87 to i32
%89 = icmp eq i32 %88, 125
%90 = zext i1 %89 to i32
%91 = call i32 @pjson_skip_val(i8** %86, i32 %90)
br label %92
92: ; preds = %85
br label %93
93: ; preds = %131, %92
%94 = load i8**, i8*** %4
%95 = load i8*, i8** %94
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = icmp eq i32 %97, 32
br i1 %98, label %129, label %99
99: ; preds = %93
%100 = load i8**, i8*** %4
%101 = load i8*, i8** %100
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = icmp eq i32 %103, 9
br i1 %104, label %129, label %105
105: ; preds = %99
%106 = load i8**, i8*** %4
%107 = load i8*, i8** %106
%108 = load i8, i8* %107
%109 = sext i8 %108 to i32
%110 = icmp eq i32 %109, 13
br i1 %110, label %129, label %111
111: ; preds = %105
%112 = load i8**, i8*** %4
%113 = load i8*, i8** %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp eq i32 %115, 10
br i1 %116, label %129, label %117
117: ; preds = %111
%118 = load i8**, i8*** %4
%119 = load i8*, i8** %118
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = icmp eq i32 %121, 8
br i1 %122, label %129, label %123
123: ; preds = %117
%124 = load i8**, i8*** %4
%125 = load i8*, i8** %124
%126 = load i8, i8* %125
%127 = sext i8 %126 to i32
%128 = icmp eq i32 %127, 12
br label %129
129: ; preds = %123, %117, %111, %105, %99, %93
%130 = phi i1 [ true, %117 ], [ true, %111 ], [ true, %105 ], [ true, %99 ], [ true, %93 ], [ %128, %123 ]
br i1 %130, label %131, label %135
131: ; preds = %129
%132 = load i8**, i8*** %4
%133 = load i8*, i8** %132
%134 = getelementptr inbounds i8, i8* %133, i32 1
store i8* %134, i8** %132
br label %93
135: ; preds = %129
br label %136
136: ; preds = %135
%137 = load i8**, i8*** %4
%138 = load i8*, i8** %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = icmp eq i32 %140, 44
br i1 %141, label %142, label %146
142: ; preds = %136
%143 = load i8**, i8*** %4
%144 = load i8*, i8** %143
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %143
br label %146
146: ; preds = %142, %136
br label %147
147: ; preds = %146
br label %148
148: ; preds = %186, %147
%149 = load i8**, i8*** %4
%150 = load i8*, i8** %149
%151 = load i8, i8* %150
%152 = sext i8 %151 to i32
%153 = icmp eq i32 %152, 32
br i1 %153, label %184, label %154
154: ; preds = %148
%155 = load i8**, i8*** %4
%156 = load i8*, i8** %155
%157 = load i8, i8* %156
%158 = sext i8 %157 to i32
%159 = icmp eq i32 %158, 9
br i1 %159, label %184, label %160
160: ; preds = %154
%161 = load i8**, i8*** %4
%162 = load i8*, i8** %161
%163 = load i8, i8* %162
%164 = sext i8 %163 to i32
%165 = icmp eq i32 %164, 13
br i1 %165, label %184, label %166
166: ; preds = %160
%167 = load i8**, i8*** %4
%168 = load i8*, i8** %167
%169 = load i8, i8* %168
%170 = sext i8 %169 to i32
%171 = icmp eq i32 %170, 10
br i1 %171, label %184, label %172
172: ; preds = %166
%173 = load i8**, i8*** %4
%174 = load i8*, i8** %173
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %176, 8
br i1 %177, label %184, label %178
178: ; preds = %172
%179 = load i8**, i8*** %4
%180 = load i8*, i8** %179
%181 = load i8, i8* %180
%182 = sext i8 %181 to i32
%183 = icmp eq i32 %182, 12
br label %184
184: ; preds = %178, %172, %166, %160, %154, %148
%185 = phi i1 [ true, %172 ], [ true, %166 ], [ true, %160 ], [ true, %154 ], [ true, %148 ], [ %183, %178 ]
br i1 %185, label %186, label %190
186: ; preds = %184
%187 = load i8**, i8*** %4
%188 = load i8*, i8** %187
%189 = getelementptr inbounds i8, i8* %188, i32 1
store i8* %189, i8** %187
br label %148
190: ; preds = %184
br label %191
191: ; preds = %190
br label %69
192: ; preds = %83
%193 = load i8**, i8*** %4
%194 = load i8*, i8** %193
%195 = load i8, i8* %194
%196 = icmp ne i8 %195, 0
br i1 %196, label %197, label %201
197: ; preds = %192
%198 = load i8**, i8*** %4
%199 = load i8*, i8** %198
%200 = getelementptr inbounds i8, i8* %199, i32 1
store i8* %200, i8** %198
br label %202
201: ; preds = %192
store i32 0, i32* %3
br label %458
202: ; preds = %197
br label %350
203: ; preds = %2
%204 = load i8**, i8*** %4
%205 = load i8*, i8** %204
%206 = getelementptr inbounds i8, i8* %205, i32 1
store i8* %206, i8** %204
br label %207
207: ; preds = %203
store i32 0, i32* %7
br label %208
208: ; preds = %239, %207
%209 = load i8**, i8*** %4
%210 = load i8*, i8** %209
%211 = load i8, i8* %210
%212 = sext i8 %211 to i32
%213 = icmp ne i32 %212, 0
br i1 %213, label %214, label %225
214: ; preds = %208
%215 = load i8**, i8*** %4
%216 = load i8*, i8** %215
%217 = load i8, i8* %216
%218 = sext i8 %217 to i32
%219 = icmp ne i32 %218, 34
br i1 %219, label %223, label %220
220: ; preds = %214
%221 = load i32, i32* %7
%222 = icmp ne i32 %221, 0
br label %223
223: ; preds = %220, %214
%224 = phi i1 [ true, %214 ], [ %222, %220 ]
br label %225
225: ; preds = %223, %208
%226 = phi i1 [ false, %208 ], [ %224, %223 ]
br i1 %226, label %227, label %243
227: ; preds = %225
%228 = load i8**, i8*** %4
%229 = load i8*, i8** %228
%230 = load i8, i8* %229
%231 = sext i8 %230 to i32
%232 = icmp eq i32 %231, 92
br i1 %232, label %233, label %238
233: ; preds = %227
%234 = load i32, i32* %7
%235 = icmp ne i32 %234, 0
%236 = xor i1 %235, true
%237 = zext i1 %236 to i32
store i32 %237, i32* %7
br label %239
238: ; preds = %227
store i32 0, i32* %7
br label %239
239: ; preds = %238, %233
%240 = load i8**, i8*** %4
%241 = load i8*, i8** %240
%242 = getelementptr inbounds i8, i8* %241, i32 1
store i8* %242, i8** %240
br label %208
243: ; preds = %225
br label %244
244: ; preds = %243
%245 = load i8**, i8*** %4
%246 = load i8*, i8** %245
%247 = load i8, i8* %246
%248 = icmp ne i8 %247, 0
br i1 %248, label %249, label %253
249: ; preds = %244
%250 = load i8**, i8*** %4
%251 = load i8*, i8** %250
%252 = getelementptr inbounds i8, i8* %251, i32 1
store i8* %252, i8** %250
br label %254
253: ; preds = %244
store i32 0, i32* %3
br label %458
254: ; preds = %249
br label %350
255: ; preds = %2
%256 = load i8**, i8*** %4
%257 = call i32 @pjson_skip_word(i8** %256, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%258 = icmp ne i32 %257, 0
br i1 %258, label %260, label %259
259: ; preds = %255
store i32 0, i32* %3
br label %458
260: ; preds = %255
br label %261
261: ; preds = %2, %260
%262 = load i8**, i8*** %4
%263 = call i32 @pjson_skip_word(i8** %262, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
%264 = icmp ne i32 %263, 0
br i1 %264, label %266, label %265
265: ; preds = %261
store i32 0, i32* %3
br label %458
266: ; preds = %261
br label %267
267: ; preds = %2, %266
%268 = load i8**, i8*** %4
%269 = call i32 @pjson_skip_word(i8** %268, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%270 = icmp ne i32 %269, 0
br i1 %270, label %272, label %271
271: ; preds = %267
store i32 0, i32* %3
br label %458
272: ; preds = %267
br label %273
273: ; preds = %2, %272
%274 = load i8**, i8*** %4
%275 = load i8*, i8** %274
%276 = load i8, i8* %275
%277 = sext i8 %276 to i32
%278 = icmp eq i32 %277, 45
br i1 %278, label %279, label %283
279: ; preds = %273
%280 = load i8**, i8*** %4
%281 = load i8*, i8** %280
%282 = getelementptr inbounds i8, i8* %281, i32 1
store i8* %282, i8** %280
br label %283
283: ; preds = %279, %273
%284 = load i8**, i8*** %4
%285 = load i8*, i8** %284
%286 = load i8, i8* %285
%287 = sext i8 %286 to i32
%288 = icmp sge i32 %287, 48
br i1 %288, label %289, label %345
289: ; preds = %283
%290 = load i8**, i8*** %4
%291 = load i8*, i8** %290
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp sle i32 %293, 57
br i1 %294, label %295, label %345
295: ; preds = %289
br label %296
296: ; preds = %340, %295
%297 = load i8**, i8*** %4
%298 = load i8*, i8** %297
%299 = load i8, i8* %298
%300 = sext i8 %299 to i32
%301 = icmp sge i32 %300, 48
br i1 %301, label %302, label %308
302: ; preds = %296
%303 = load i8**, i8*** %4
%304 = load i8*, i8** %303
%305 = load i8, i8* %304
%306 = sext i8 %305 to i32
%307 = icmp sle i32 %306, 57
br i1 %307, label %338, label %308
308: ; preds = %302, %296
%309 = load i8**, i8*** %4
%310 = load i8*, i8** %309
%311 = load i8, i8* %310
%312 = sext i8 %311 to i32
%313 = icmp eq i32 %312, 46
br i1 %313, label %338, label %314
314: ; preds = %308
%315 = load i8**, i8*** %4
%316 = load i8*, i8** %315
%317 = load i8, i8* %316
%318 = sext i8 %317 to i32
%319 = icmp eq i32 %318, 101
br i1 %319, label %338, label %320
320: ; preds = %314
%321 = load i8**, i8*** %4
%322 = load i8*, i8** %321
%323 = load i8, i8* %322
%324 = sext i8 %323 to i32
%325 = icmp eq i32 %324, 69
br i1 %325, label %338, label %326
326: ; preds = %320
%327 = load i8**, i8*** %4
%328 = load i8*, i8** %327
%329 = load i8, i8* %328
%330 = sext i8 %329 to i32
%331 = icmp eq i32 %330, 43
br i1 %331, label %338, label %332
332: ; preds = %326
%333 = load i8**, i8*** %4
%334 = load i8*, i8** %333
%335 = load i8, i8* %334
%336 = sext i8 %335 to i32
%337 = icmp eq i32 %336, 45
br label %338
338: ; preds = %332, %326, %320, %314, %308, %302
%339 = phi i1 [ true, %326 ], [ true, %320 ], [ true, %314 ], [ true, %308 ], [ true, %302 ], [ %337, %332 ]
br i1 %339, label %340, label %344
340: ; preds = %338
%341 = load i8**, i8*** %4
%342 = load i8*, i8** %341
%343 = getelementptr inbounds i8, i8* %342, i32 1
store i8* %343, i8** %341
br label %296
344: ; preds = %338
br label %349
345: ; preds = %289, %283
%346 = load i8**, i8*** %4
%347 = load i8*, i8** %346
%348 = getelementptr inbounds i8, i8* %347, i32 1
store i8* %348, i8** %346
store i32 0, i32* %3
br label %458
349: ; preds = %344
br label %350
350: ; preds = %349, %254, %202
%351 = load i32, i32* %5
%352 = icmp ne i32 %351, 0
br i1 %352, label %353, label %457
353: ; preds = %350
br label %354
354: ; preds = %353
br label %355
355: ; preds = %393, %354
%356 = load i8**, i8*** %4
%357 = load i8*, i8** %356
%358 = load i8, i8* %357
%359 = sext i8 %358 to i32
%360 = icmp eq i32 %359, 32
br i1 %360, label %391, label %361
361: ; preds = %355
%362 = load i8**, i8*** %4
%363 = load i8*, i8** %362
%364 = load i8, i8* %363
%365 = sext i8 %364 to i32
%366 = icmp eq i32 %365, 9
br i1 %366, label %391, label %367
367: ; preds = %361
%368 = load i8**, i8*** %4
%369 = load i8*, i8** %368
%370 = load i8, i8* %369
%371 = sext i8 %370 to i32
%372 = icmp eq i32 %371, 13
br i1 %372, label %391, label %373
373: ; preds = %367
%374 = load i8**, i8*** %4
%375 = load i8*, i8** %374
%376 = load i8, i8* %375
%377 = sext i8 %376 to i32
%378 = icmp eq i32 %377, 10
br i1 %378, label %391, label %379
379: ; preds = %373
%380 = load i8**, i8*** %4
%381 = load i8*, i8** %380
%382 = load i8, i8* %381
%383 = sext i8 %382 to i32
%384 = icmp eq i32 %383, 8
br i1 %384, label %391, label %385
385: ; preds = %379
%386 = load i8**, i8*** %4
%387 = load i8*, i8** %386
%388 = load i8, i8* %387
%389 = sext i8 %388 to i32
%390 = icmp eq i32 %389, 12
br label %391
391: ; preds = %385, %379, %373, %367, %361, %355
%392 = phi i1 [ true, %379 ], [ true, %373 ], [ true, %367 ], [ true, %361 ], [ true, %355 ], [ %390, %385 ]
br i1 %392, label %393, label %397
393: ; preds = %391
%394 = load i8**, i8*** %4
%395 = load i8*, i8** %394
%396 = getelementptr inbounds i8, i8* %395, i32 1
store i8* %396, i8** %394
br label %355
397: ; preds = %391
br label %398
398: ; preds = %397
%399 = load i8**, i8*** %4
%400 = load i8*, i8** %399
%401 = load i8, i8* %400
%402 = sext i8 %401 to i32
%403 = icmp eq i32 %402, 58
br i1 %403, label %404, label %408
404: ; preds = %398
%405 = load i8**, i8*** %4
%406 = load i8*, i8** %405
%407 = getelementptr inbounds i8, i8* %406, i32 1
store i8* %407, i8** %405
br label %409
408: ; preds = %398
store i32 0, i32* %3
br label %458
409: ; preds = %404
br label %410
410: ; preds = %409
br label %411
411: ; preds = %449, %410
%412 = load i8**, i8*** %4
%413 = load i8*, i8** %412
%414 = load i8, i8* %413
%415 = sext i8 %414 to i32
%416 = icmp eq i32 %415, 32
br i1 %416, label %447, label %417
417: ; preds = %411
%418 = load i8**, i8*** %4
%419 = load i8*, i8** %418
%420 = load i8, i8* %419
%421 = sext i8 %420 to i32
%422 = icmp eq i32 %421, 9
br i1 %422, label %447, label %423
423: ; preds = %417
%424 = load i8**, i8*** %4
%425 = load i8*, i8** %424
%426 = load i8, i8* %425
%427 = sext i8 %426 to i32
%428 = icmp eq i32 %427, 13
br i1 %428, label %447, label %429
429: ; preds = %423
%430 = load i8**, i8*** %4
%431 = load i8*, i8** %430
%432 = load i8, i8* %431
%433 = sext i8 %432 to i32
%434 = icmp eq i32 %433, 10
br i1 %434, label %447, label %435
435: ; preds = %429
%436 = load i8**, i8*** %4
%437 = load i8*, i8** %436
%438 = load i8, i8* %437
%439 = sext i8 %438 to i32
%440 = icmp eq i32 %439, 8
br i1 %440, label %447, label %441
441: ; preds = %435
%442 = load i8**, i8*** %4
%443 = load i8*, i8** %442
%444 = load i8, i8* %443
%445 = sext i8 %444 to i32
%446 = icmp eq i32 %445, 12
br label %447
447: ; preds = %441, %435, %429, %423, %417, %411
%448 = phi i1 [ true, %435 ], [ true, %429 ], [ true, %423 ], [ true, %417 ], [ true, %411 ], [ %446, %441 ]
br i1 %448, label %449, label %453
449: ; preds = %447
%450 = load i8**, i8*** %4
%451 = load i8*, i8** %450
%452 = getelementptr inbounds i8, i8* %451, i32 1
store i8* %452, i8** %450
br label %411
453: ; preds = %447
br label %454
454: ; preds = %453
%455 = load i8**, i8*** %4
%456 = call i32 @pjson_skip_val(i8** %455, i32 0)
br label %457
457: ; preds = %454, %350
store i32 1, i32* %3
br label %458
458: ; preds = %457, %408, %345, %271, %265, %259, %253, %201
%459 = load i32, i32* %3
ret i32 %459
}

LLVM IR (-O2):
@.str = [5 x i8] c"true\00"
@.str.1 = [6 x i8] c"false\00"
@.str.2 = [5 x i8] c"null\00"
define i32 @pjson_skip_val(i8** %0, i32 %1) {
%3 = load i8*, i8** %0
%4 = load i8, i8* %3
br label %5
5: ; preds = %115, %2
%6 = phi i8 [ %4, %2 ], [ %118, %115 ]
%7 = phi i8* [ %3, %2 ], [ %117, %115 ]
%8 = phi i32 [ %1, %2 ], [ 0, %115 ]
%9 = phi i1 [ false, %2 ], [ true, %115 ]
%10 = sext i8 %6 to i32
switch i32 %10, label %82 [
i32 123, label %14
i32 91, label %14
i32 34, label %11
i32 116, label %70
i32 102, label %73
i32 110, label %76
]
11: ; preds = %5
%12 = getelementptr inbounds i8, i8* %7, i64 1
store i8* %12, i8** %0
%13 = load i8, i8* %12
switch i8 %13, label %60 [
i8 0, label %120
i8 34, label %67
]
14: ; preds = %5, %5
%15 = icmp eq i8 %6, 91
br label %16
16: ; preds = %20, %14
%17 = phi i8* [ %7, %14 ], [ %18, %20 ]
%18 = getelementptr inbounds i8, i8* %17, i64 1
store i8* %18, i8** %0
%19 = load i8, i8* %18
switch i8 %19, label %21 [
i8 32, label %20
i8 9, label %20
i8 13, label %20
i8 10, label %20
i8 8, label %20
i8 12, label %20
]
20: ; preds = %16, %16, %16, %16, %16, %16
br label %16
21: ; preds = %16
%22 = select i1 %15, i32 93, i32 125
%23 = icmp eq i8 %19, 0
%24 = sext i8 %19 to i32
%25 = icmp eq i32 %22, %24
%26 = select i1 %23, i1 true, i1 %25
br i1 %26, label %49, label %27
27: ; preds = %21
%28 = xor i1 %15, true
%29 = zext i1 %28 to i32
br label %35
30: ; preds = %46
%31 = icmp eq i8 %48, 0
%32 = sext i8 %48 to i32
%33 = icmp eq i32 %22, %32
%34 = select i1 %31, i1 true, i1 %33
br i1 %34, label %49, label %35
35: ; preds = %27, %30
%36 = tail call i32 @pjson_skip_val(i8** %0, i32 %29)
%37 = load i8*, i8** %0
br label %38
38: ; preds = %41, %35
%39 = phi i8* [ %42, %41 ], [ %37, %35 ]
%40 = load i8, i8* %39
switch i8 %40, label %46 [
i8 32, label %41
i8 9, label %41
i8 13, label %41
i8 10, label %41
i8 8, label %41
i8 12, label %41
i8 44, label %43
]
41: ; preds = %38, %38, %38, %38, %38, %38
%42 = getelementptr inbounds i8, i8* %39, i64 1
store i8* %42, i8** %0
br label %38
43: ; preds = %38, %46, %46, %46, %46, %46, %46
%44 = phi i8* [ %47, %46 ], [ %47, %46 ], [ %47, %46 ], [ %47, %46 ], [ %47, %46 ], [ %47, %46 ], [ %39, %38 ]
%45 = getelementptr inbounds i8, i8* %44, i64 1
store i8* %45, i8** %0
br label %46
46: ; preds = %38, %43
%47 = phi i8* [ %45, %43 ], [ %39, %38 ]
%48 = load i8, i8* %47
switch i8 %48, label %30 [
i8 32, label %43
i8 9, label %43
i8 13, label %43
i8 10, label %43
i8 8, label %43
i8 12, label %43
]
49: ; preds = %30, %21
%50 = phi i8* [ %18, %21 ], [ %47, %30 ]
%51 = phi i1 [ %23, %21 ], [ %31, %30 ]
br i1 %51, label %120, label %52
52: ; preds = %49
%53 = getelementptr inbounds i8, i8* %50, i64 1
br label %105
54: ; preds = %60
%55 = icmp eq i8 %63, 92
%56 = xor i1 %61, true
%57 = select i1 %55, i1 %56, i1 false
%58 = icmp ne i8 %65, 34
%59 = select i1 %58, i1 true, i1 %57
br i1 %59, label %60, label %67
60: ; preds = %11, %54
%61 = phi i1 [ %57, %54 ], [ false, %11 ]
%62 = phi i8* [ %64, %54 ], [ %12, %11 ]
%63 = phi i8 [ %65, %54 ], [ %13, %11 ]
%64 = getelementptr inbounds i8, i8* %62, i64 1
store i8* %64, i8** %0
%65 = load i8, i8* %64
%66 = icmp eq i8 %65, 0
br i1 %66, label %120, label %54
67: ; preds = %54, %11
%68 = phi i8* [ %7, %11 ], [ %62, %54 ]
%69 = getelementptr inbounds i8, i8* %68, i64 2
br label %105
70: ; preds = %5
%71 = tail call i32 @pjson_skip_word(i8** %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%72 = icmp eq i32 %71, 0
br i1 %72, label %120, label %73
73: ; preds = %70, %5
%74 = tail call i32 @pjson_skip_word(i8** %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
%75 = icmp eq i32 %74, 0
br i1 %75, label %120, label %76
76: ; preds = %73, %5
%77 = tail call i32 @pjson_skip_word(i8** %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%78 = icmp eq i32 %77, 0
br i1 %78, label %120, label %79
79: ; preds = %76
%80 = load i8*, i8** %0
%81 = load i8, i8* %80
br label %82
82: ; preds = %79, %5
%83 = phi i8 [ %81, %79 ], [ %6, %5 ]
%84 = phi i8* [ %80, %79 ], [ %7, %5 ]
%85 = icmp eq i8 %83, 45
br i1 %85, label %86, label %89
86: ; preds = %82
%87 = getelementptr inbounds i8, i8* %84, i64 1
store i8* %87, i8** %0
%88 = load i8, i8* %87
br label %89
89: ; preds = %86, %82
%90 = phi i8 [ %88, %86 ], [ %83, %82 ]
%91 = phi i8* [ %87, %86 ], [ %84, %82 ]
%92 = add i8 %90, -48
%93 = icmp ult i8 %92, 10
br i1 %93, label %94, label %103
94: ; preds = %89, %100
%95 = phi i8 [ %102, %100 ], [ %90, %89 ]
%96 = phi i8* [ %101, %100 ], [ %91, %89 ]
%97 = add i8 %95, -48
%98 = icmp ult i8 %97, 10
br i1 %98, label %100, label %99
99: ; preds = %94
switch i8 %95, label %107 [
i8 46, label %100
i8 101, label %100
i8 69, label %100
i8 43, label %100
i8 45, label %100
]
100: ; preds = %99, %99, %99, %99, %99, %94
%101 = getelementptr inbounds i8, i8* %96, i64 1
store i8* %101, i8** %0
%102 = load i8, i8* %101
br label %94
103: ; preds = %89
%104 = getelementptr inbounds i8, i8* %91, i64 1
store i8* %104, i8** %0
br label %120
105: ; preds = %67, %52
%106 = phi i8* [ %53, %52 ], [ %69, %67 ]
store i8* %106, i8** %0
br label %107
107: ; preds = %99, %105
%108 = phi i8* [ %106, %105 ], [ %96, %99 ]
%109 = icmp eq i32 %8, 0
br i1 %109, label %120, label %110
110: ; preds = %107, %113
%111 = phi i8* [ %114, %113 ], [ %108, %107 ]
%112 = load i8, i8* %111
switch i8 %112, label %120 [
i8 32, label %113
i8 9, label %113
i8 13, label %113
i8 10, label %113
i8 8, label %113
i8 12, label %113
i8 58, label %115
]
113: ; preds = %110, %110, %110, %110, %110, %110
%114 = getelementptr inbounds i8, i8* %111, i64 1
store i8* %114, i8** %0
br label %110
115: ; preds = %110, %119
%116 = phi i8* [ %117, %119 ], [ %111, %110 ]
%117 = getelementptr inbounds i8, i8* %116, i64 1
store i8* %117, i8** %0
%118 = load i8, i8* %117
switch i8 %118, label %5 [
i8 32, label %119
i8 9, label %119
i8 13, label %119
i8 10, label %119
i8 8, label %119
i8 12, label %119
]
119: ; preds = %115, %115, %115, %115, %115, %115
br label %115
120: ; preds = %49, %107, %76, %73, %70, %11, %60, %110, %103
%121 = phi i32 [ 0, %103 ], [ 0, %110 ], [ 0, %60 ], [ 0, %11 ], [ 0, %49 ], [ 1, %107 ], [ 0, %76 ], [ 0, %73 ], [ 0, %70 ]
%122 = select i1 %9, i32 1, i32 %121
ret i32 %122
}