// File: DoubleString[P]RtConverter/src/Json/json_reader.cpp
// Function: Json::Reader::readArray(Json::Reader::Token&)
bool Reader::readArray(Token& token) {
  Value init(arrayValue);
  currentValue().swapPayload(init);
  currentValue().setOffsetStart(token.start_ - begin_);
  skipSpaces();
  if (current_ != end_ && *current_ == ']') // empty array
  {
    Token endArray;
    readToken(endArray);
    return true;
  }
  int index = 0;
  for (;;) {
    Value& value = currentValue()[index++];
    nodes_.push(&value);
    bool ok = readValue();
    nodes_.pop();
    if (!ok) // error already set
      return recoverFromError(tokenArrayEnd);

    Token currentToken;
    // Accept Comment after last item in the array.
    ok = readToken(currentToken);
    while (currentToken.type_ == tokenComment && ok) {
      ok = readToken(currentToken);
    }
    bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
                         currentToken.type_ != tokenArrayEnd);
    if (!ok || badTokenType) {
      return addErrorAndRecover("Missing ',' or ']' in array declaration",
                                currentToken, tokenArrayEnd);
    }
    if (currentToken.type_ == tokenArrayEnd)
      break;
  }
  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xe0(%rbp)
leaq -0x40(%rbp), %rdi
movl $0x6, %esi
callq 0x1e5c0
movq -0xe0(%rbp), %rdi
callq 0xb200
movq %rax, -0xd8(%rbp)
jmp 0xba01
movq -0xd8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x1f1e0
jmp 0xba13
movq -0xe0(%rbp), %rdi
callq 0xb200
movq %rax, -0xe8(%rbp)
jmp 0xba28
movq -0xe8(%rbp), %rdi
movq -0xe0(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rsi
movq 0xc0(%rax), %rax
subq %rax, %rsi
callq 0x245c0
jmp 0xba4f
movq -0xe0(%rbp), %rdi
callq 0xc1a0
movq -0xe0(%rbp), %rcx
movq 0xd0(%rcx), %rax
cmpq 0xc8(%rcx), %rax
je 0xbabb
movq -0xe0(%rbp), %rax
movq 0xd0(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5d, %eax
jne 0xbabb
movq -0xe0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xbfe0
jmp 0xba9a
movb $0x1, -0x1(%rbp)
movl $0x1, -0x6c(%rbp)
jmp 0xbd17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xbd2e
movl $0x0, -0x70(%rbp)
movq -0xe0(%rbp), %rdi
callq 0xb200
movq %rax, -0xf0(%rbp)
jmp 0xbad7
movq -0xf0(%rbp), %rdi
movl -0x70(%rbp), %esi
movl %esi, %eax
incl %eax
movl %eax, -0x70(%rbp)
callq 0x223c0
movq %rax, -0xf8(%rbp)
jmp 0xbaf6
movq -0xe0(%rbp), %rdi
movq -0xf8(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x80(%rbp), %rsi
callq 0x14520
jmp 0xbb1b
movq -0xe0(%rbp), %rdi
callq 0xaa30
movb %al, -0xf9(%rbp)
jmp 0xbb2f
movq -0xe0(%rbp), %rdi
movb -0xf9(%rbp), %al
andb $0x1, %al
movb %al, -0x81(%rbp)
callq 0x14500
jmp 0xbb4b
testb $0x1, -0x81(%rbp)
jne 0xbb84
movq -0xe0(%rbp), %rdi
movl $0x4, %esi
callq 0xcd50
movb %al, -0xfa(%rbp)
jmp 0xbb6d
movb -0xfa(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x6c(%rbp)
jmp 0xbd17
movq -0xe0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0xbfe0
movb %al, -0xfb(%rbp)
jmp 0xbb9f
movb -0xfb(%rbp), %al
andb $0x1, %al
movb %al, -0x81(%rbp)
xorl %eax, %eax
cmpl $0xc, -0xa0(%rbp)
movb %al, -0xfc(%rbp)
jne 0xbbca
movb -0x81(%rbp), %al
movb %al, -0xfc(%rbp)
movb -0xfc(%rbp), %al
testb $0x1, %al
jne 0xbbd6
jmp 0xbc01
movq -0xe0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0xbfe0
movb %al, -0xfd(%rbp)
jmp 0xbbf1
movb -0xfd(%rbp), %al
andb $0x1, %al
movb %al, -0x81(%rbp)
jmp 0xbbad
xorl %eax, %eax
cmpl $0xa, -0xa0(%rbp)
movb %al, -0xfe(%rbp)
je 0xbc22
cmpl $0x4, -0xa0(%rbp)
setne %al
movb %al, -0xfe(%rbp)
movb -0xfe(%rbp), %al
andb $0x1, %al
movb %al, -0xa1(%rbp)
testb $0x1, -0x81(%rbp)
je 0xbc46
testb $0x1, -0xa1(%rbp)
je 0xbcfc
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x9d30
movq -0x108(%rbp), %rdx
leaq 0xafc4d(%rip), %rsi     # 0xbb8b4
leaq -0xc8(%rbp), %rdi
callq 0x9a30
jmp 0xbc75
movq -0xe0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
leaq -0xa0(%rbp), %rdx
movl $0x4, %ecx
callq 0xd100
movb %al, -0x109(%rbp)
jmp 0xbc9c
movb -0x109(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x9480
leaq -0xc9(%rbp), %rdi
callq 0x97e0
movl $0x1, -0x6c(%rbp)
jmp 0xbd17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xbcee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x9480
leaq -0xc9(%rbp), %rdi
callq 0x97e0
jmp 0xbd2e
cmpl $0x4, -0xa0(%rbp)
jne 0xbd07
jmp 0xbd0c
jmp 0xbac2
movb $0x1, -0x1(%rbp)
movl $0x1, -0x6c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x1f050
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
leaq -0x40(%rbp), %rdi
callq 0x1f050
movq -0x48(%rbp), %rdi
callq 0x9d20