// File: 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:
subq $0x78, %rsp
movq %rdi, 0x68(%rsp)
movl %esi, 0x64(%rsp)
movq 0x68(%rsp), %rax
movq %rax, 0x18(%rsp)
movl 0x64(%rsp), %eax
movq %rax, 0x20(%rsp)
subq $0x7, %rax
ja 0xef873
movq 0x20(%rsp), %rax
leaq 0x7ac16(%rip), %rcx     # 0x16a02c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x18(%rsp), %rdi
callq 0xef890
movb $0x0, 0x3f(%rsp)
testb $0x1, %al
jne 0xef434
jmp 0xef454
movq 0x18(%rsp), %rdi
callq 0xef060
movb $0x1, %al
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
movb %al, 0x17(%rsp)
jne 0xef454
jp 0xef454
jmp 0xef556
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x5, %eax
jne 0xef484
movq 0x18(%rsp), %rax
movb (%rax), %al
andb $0x1, %al
movzbl %al, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, 0x17(%rsp)
je 0xef556
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x4, %eax
jne 0xef4da
movq 0x18(%rsp), %rsi
leaq 0x40(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0xe2e90
movq 0x8(%rsp), %rdi
movb $0x1, 0x3f(%rsp)
leaq 0x78141(%rip), %rsi     # 0x1675ff
callq 0xfa250
movb %al, 0x16(%rsp)
jmp 0xef4c9
movb 0x16(%rsp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x17(%rsp)
jne 0xef556
jmp 0xef4da
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x6, %eax
jne 0xef50b
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0xfa1e0
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, 0x17(%rsp)
je 0xef556
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x7, %eax
jne 0xef53c
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0xfa1e0
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, 0x17(%rsp)
je 0xef556
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x17(%rsp)
movb 0x17(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
testb $0x1, 0x3f(%rsp)
jne 0xef569
jmp 0xef573
leaq 0x40(%rsp), %rdi
callq 0x12430
jmp 0xef878
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
testb $0x1, 0x3f(%rsp)
jne 0xef58f
jmp 0xef599
leaq 0x40(%rsp), %rdi
callq 0x12430
jmp 0xef883
movq 0x18(%rsp), %rdi
callq 0xee1c0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x7(%rsp)
jne 0xef624
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x3, %eax
jne 0xef5ef
movq 0x18(%rsp), %rax
movsd (%rax), %xmm0
movl $0x80000000, %edi       # imm = 0x80000000
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
callq 0xee2b0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x7(%rsp)
jne 0xef624
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x5, %ecx
movb %al, 0x7(%rsp)
je 0xef624
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x7(%rsp)
movb 0x7(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movq 0x18(%rsp), %rdi
callq 0xee6a0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x6(%rsp)
jne 0xef6b6
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x3, %eax
jne 0xef681
movq 0x18(%rsp), %rax
movsd (%rax), %xmm0
xorl %edi, %edi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0xee790
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x6(%rsp)
jne 0xef6b6
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x5, %ecx
movb %al, 0x6(%rsp)
je 0xef6b6
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x6(%rsp)
movb 0x6(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movq 0x18(%rsp), %rdi
callq 0xef890
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x5(%rsp)
jne 0xef711
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x5, %ecx
movb %al, 0x5(%rsp)
je 0xef711
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x5(%rsp)
movb 0x5(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movq 0x18(%rsp), %rdi
callq 0xef890
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x4(%rsp)
jne 0xef76c
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x5, %ecx
movb %al, 0x4(%rsp)
je 0xef76c
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x4(%rsp)
movb 0x4(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movq 0x18(%rsp), %rdi
callq 0xef890
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x3(%rsp)
jne 0xef7e2
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x5, %ecx
movb %al, 0x3(%rsp)
je 0xef7e2
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x4, %ecx
movb %al, 0x3(%rsp)
je 0xef7e2
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x3(%rsp)
movb 0x3(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x6, %ecx
movb %al, 0x2(%rsp)
je 0xef826
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x2(%rsp)
movb 0x2(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %ecx
movb $0x1, %al
cmpl $0x7, %ecx
movb %al, 0x1(%rsp)
je 0xef867
movq 0x18(%rsp), %rax
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
sete %al
movb %al, 0x1(%rsp)
movb 0x1(%rsp), %al
andb $0x1, %al
movb %al, 0x77(%rsp)
jmp 0xef878
movb $0x0, 0x77(%rsp)
movb 0x77(%rsp), %al
andb $0x1, %al
addq $0x78, %rsp
retq
movq 0x30(%rsp), %rdi
callq 0x12c20
nopl (%rax)