// File: /workspace/github_cpp_makefile_star2_O3/tomfunkhouser[P]gaps/pkgs/RNBasics/json.cpp
// Function: Json::Value::isConvertibleTo(Json::ValueType) const
bool Value::isConvertibleTo(ValueType other) const {
  switch (other) {
  case nullValue:
    return (isNumeric() && asDouble() == 0.0) ||
           (type_ == booleanValue && value_.bool_ == false) ||
           (type_ == stringValue && asString() == "") ||
           (type_ == arrayValue && value_.map_->size() == 0) ||
           (type_ == objectValue && value_.map_->size() == 0) ||
           type_ == nullValue;
  case intValue:
    return isInt() ||
           (type_ == realValue && InRange(value_.real_, minInt, maxInt)) ||
           type_ == booleanValue || type_ == nullValue;
  case uintValue:
    return isUInt() ||
           (type_ == realValue && InRange(value_.real_, 0, maxUInt)) ||
           type_ == booleanValue || type_ == nullValue;
  case realValue:
    return isNumeric() || type_ == booleanValue || type_ == nullValue;
  case booleanValue:
    return isNumeric() || type_ == booleanValue || type_ == nullValue;
  case stringValue:
    return isNumeric() || type_ == booleanValue || type_ == stringValue ||
           type_ == nullValue;
  case arrayValue:
    return type_ == arrayValue || type_ == nullValue;
  case objectValue:
    return type_ == objectValue || type_ == nullValue;
  }
  JSON_ASSERT_UNREACHABLE;
  return false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x28, %rsp
cmpl $0x7, %esi
ja 0x81690
movq %rdi, %rbx
movl %esi, %eax
leaq 0x3d91d(%rip), %rcx     # 0xbee40
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
callq 0x816e6
movb $0x1, %bpl
testb %al, %al
jne 0x816a9
movzbl 0x8(%rbx), %eax
cmpw $0x5, %ax
jmp 0x8169c
movq %rbx, %rdi
callq 0x80f00
movb $0x1, %bpl
testb %al, %al
jne 0x816a9
movzbl 0x8(%rbx), %eax
cmpw $0x3, %ax
jne 0x81543
movsd (%rbx), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x81543
movsd 0x3db21(%rip), %xmm1    # 0xbf0a0
jmp 0x8165b
movq %rbx, %rdi
callq 0x816e6
testb %al, %al
je 0x815ab
movq %rbx, %rdi
callq 0x8131c
movb $0x1, %bpl
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x815ab
jnp 0x816a9
movzbl 0x8(%rbx), %r15d
cmpw $0x5, %r15w
jne 0x815c3
movb $0x1, %bpl
cmpb $0x0, (%rbx)
je 0x816a9
movl %r15d, %eax
movl %r15d, %ecx
cmpw $0x4, %r15w
jne 0x815fd
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x79efc
leaq 0x3b04d(%rip), %rsi     # 0xbc634
movq %r14, %rdi
callq 0x111b0
testl %eax, %eax
je 0x816c6
movzbl 0x8(%rbx), %eax
movl %eax, %ecx
cmpb $0x7, %cl
je 0x8160a
movzwl %cx, %ecx
cmpl $0x6, %ecx
jne 0x81618
movq (%rbx), %rcx
cmpq $0x0, 0x28(%rcx)
je 0x816ba
testw %ax, %ax
sete %bpl
jmp 0x816bd
movq %rbx, %rdi
callq 0x80cdc
movb $0x1, %bpl
testb %al, %al
jne 0x816a9
movzbl 0x8(%rbx), %eax
cmpw $0x3, %ax
jne 0x81543
movsd (%rbx), %xmm0
ucomisd 0x3da43(%rip), %xmm0    # 0xbf090
jb 0x81543
movsd 0x3da3d(%rip), %xmm1    # 0xbf098
ucomisd %xmm0, %xmm1
jae 0x816a9
jmp 0x81543
movzbl 0x8(%rbx), %eax
cmpw $0x7, %ax
jmp 0x8169c
movq %rbx, %rdi
callq 0x816e6
movb $0x1, %bpl
testb %al, %al
jne 0x816a9
movzwl 0x8(%rbx), %ecx
cmpb $0x6, %cl
jae 0x81690
movb $0x31, %bpl
shrb %cl, %bpl
jmp 0x816a9
xorl %ebp, %ebp
jmp 0x816a9
movzbl 0x8(%rbx), %eax
cmpw $0x6, %ax
sete %cl
testw %ax, %ax
sete %bpl
orb %cl, %bpl
andb $0x1, %bpl
movl %ebp, %eax
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movb $0x1, %bpl
cmpw $0x4, %r15w
jne 0x816a9
jmp 0x816c9
movb $0x1, %bpl
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x816a9
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x115c0
jmp 0x816a9