// File: /workspace/github_c_makefile_star2_O2/pocari[P]compilerbook-9cc/parser.c
// Function: cast
static Node *cast() {
  Token *tk = token;
  if (consume("(")) {
    if (is_type(token)) {
      Type *ty = type_name();
      expect(")");
      if (!consume("{")) {
        // "{" が来た場合は、キャストではなくcompound-literaruの"(" typename ")" になるので、
        // この節はスキップして、token=tmpでもとに戻した上で、postfix側で処理する
        Node *node = new_unary_node(ND_CAST, cast(), tk);
        add_type(node->lhs);
        node->ty = ty;
        return node;
      }
    }
  }
  token = tk;
  Node *node = unary();
  add_type(node);

  return node;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
leaq 0x9404(%rip), %r12      # 0xf480
movq (%r12), %rbx
leaq 0x44ef(%rip), %rdi      # 0xa576
callq 0x498f
testq %rax, %rax
je 0x60c7
movq (%r12), %rdi
callq 0x54e7
testb %al, %al
je 0x60c7
callq 0x674d
movq %rax, %r14
leaq 0x44dc(%rip), %rdi      # 0xa589
callq 0x5644
leaq 0x425d(%rip), %rdi      # 0xa316
callq 0x498f
testq %rax, %rax
je 0x615a
movq %rbx, (%r12)
leaq 0x4861(%rip), %rdi      # 0xa933
callq 0x498f
testq %rax, %rax
je 0x60e3
callq 0x6067
jmp 0x611a
leaq 0x5107(%rip), %rdi      # 0xb1f1
callq 0x498f
testq %rax, %rax
je 0x6137
movq %rax, %rbx
xorl %edi, %edi
movq %rax, %rsi
callq 0x688f
movq %rax, %r14
callq 0x6067
pushq $0x3
popq %rdi
movq %r14, %rsi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x5adf
movq %rax, %rbx
movq %rbx, %rdi
callq 0x8a4d
movq %rbx, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x47bb(%rip), %rdi      # 0xa8f9
callq 0x498f
testq %rax, %rax
je 0x6182
movq %rax, %rbx
callq 0x6067
movq %rax, %r14
pushq $0x1e
jmp 0x6220
callq 0x6067
movq %rax, %r15
pushq $0x24
popq %rdi
movq %rbx, %rsi
callq 0x4e7e
movq %rax, %rbx
movq %r15, 0x18(%rax)
movq %r15, %rdi
callq 0x8a4d
movq %r14, 0x10(%rbx)
jmp 0x6125
leaq 0x4c8e(%rip), %rdi      # 0xae17
callq 0x498f
testq %rax, %rax
je 0x61a2
movq %rax, %rbx
callq 0x6067
movq %rax, %r14
pushq $0x1f
jmp 0x6220
leaq 0x4789(%rip), %rdi      # 0xa932
callq 0x498f
testq %rax, %rax
je 0x61c2
movq %rax, %rbx
callq 0x6067
movq %rax, %r14
pushq $0x28
jmp 0x6220
leaq 0x5027(%rip), %rdi      # 0xb1f0
callq 0x498f
testq %rax, %rax
je 0x61e2
movq %rax, %rbx
callq 0x6067
movq %rax, %r14
pushq $0x29
jmp 0x6220
leaq 0x474c(%rip), %rdi      # 0xa935
callq 0x498f
testq %rax, %rax
je 0x6202
movq %rax, %rbx
callq 0x6067
movq %rax, %r14
pushq $0x14
jmp 0x6220
leaq 0x472e(%rip), %rdi      # 0xa937
callq 0x498f
testq %rax, %rax
je 0x6235
movq %rax, %rbx
callq 0x6067
movq %rax, %r14
pushq $0x15
popq %rdi
movq %rbx, %rsi
callq 0x4e7e
movq %rax, %rbx
movq %r14, 0x18(%rax)
jmp 0x611d
movq (%r12), %rbx
movl (%rbx), %eax
cmpl $0x12, %eax
je 0x627a
cmpl $0x13, %eax
jne 0x62d5
movq 0x8(%rbx), %rax
movq %rax, (%r12)
leaq 0x431e(%rip), %rdi      # 0xa576
callq 0x5644
callq 0x674d
movq %rax, %r14
leaq 0x431d(%rip), %rdi      # 0xa589
callq 0x5644
movslq 0x8(%r14), %rdi
jmp 0x644f
movq 0x8(%rbx), %rbx
movq %rbx, (%r12)
leaq 0x42ed(%rip), %rdi      # 0xa576
callq 0x498f
movq (%r12), %r14
testq %rax, %rax
je 0x638c
movq %r14, %rdi
callq 0x54e7
testb %al, %al
je 0x6422
callq 0x674d
cmpb $0x1, 0xc(%rax)
je 0x66fa
movq %rax, %rbx
leaq 0x42c5(%rip), %rdi      # 0xa589
callq 0x5644
movslq 0x4(%rbx), %rdi
movq %r14, %rsi
jmp 0x6452
leaq 0x429a(%rip), %rdi      # 0xa576
callq 0x498f
testq %rax, %rax
je 0x635e
movq (%r12), %rdi
callq 0x54e7
testb %al, %al
je 0x635e
callq 0x674d
movq %rax, %r15
leaq 0x4287(%rip), %rdi      # 0xa589
callq 0x5644
leaq 0x4008(%rip), %rdi      # 0xa316
callq 0x4ea0
testb %al, %al
je 0x635e
movq (%r12), %r14
movl 0x910f(%rip), %ebx      # 0xf430
callq 0x6aec
testl %ebx, %ebx
je 0x6504
movq %rax, %rdi
movq %r15, %rsi
callq 0x69f3
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x4e55
movq %rax, %rbx
movq %r15, %rdi
movq %r14, %rsi
callq 0x6a24
movq %rax, 0x58(%rbx)
jmp 0x611d
movq %rbx, (%r12)
leaq 0x420d(%rip), %rdi      # 0xa576
callq 0x498f
testq %rax, %rax
je 0x6394
callq 0x7590
movq %rax, %rbx
leaq 0x4207(%rip), %rdi      # 0xa589
callq 0x5644
jmp 0x65e7
movq %r14, %rbx
jmp 0x6426
movq (%r12), %r14
movl (%r14), %eax
cmpl $0x14, %eax
je 0x6475
cmpl $0x3, %eax
je 0x645c
cmpl $0x2, %eax
jne 0x6707
movq 0x8(%r14), %rax
movq %rax, (%r12)
leaq 0x41b1(%rip), %rdi      # 0xa576
callq 0x498f
testq %rax, %rax
je 0x653f
pushq $0x1d
popq %rdi
movq %r14, %rsi
callq 0x4e7e
movq %rax, %rbx
movq 0x18(%r14), %rdi
movl 0x20(%r14), %esi
callq 0x4903
movq %rax, %r15
movq %rax, 0x88(%rbx)
movq %r14, %rdi
callq 0x7541
testq %rax, %rax
je 0x6564
movq 0x10(%rax), %rax
movq (%rax), %rax
cmpl $0xb, (%rax)
jne 0x6719
addq $0x28, %rax
jmp 0x6582
movq %rbx, (%r12)
callq 0x6067
movq %rax, %r14
movq %rax, %rdi
callq 0x8a4d
movq 0x10(%r14), %rax
cmpb $0x1, 0xc(%rax)
je 0x66ed
movq %r14, %rdi
callq 0x8a45
movslq %eax, %rdi
movq %rbx, %rsi
callq 0x688f
jmp 0x611a
movq 0x8(%r14), %rax
movq 0x10(%r14), %rdi
movq %rax, (%r12)
movq %r14, %rsi
callq 0x688f
jmp 0x64fc
movq 0x8(%r14), %rax
movq %rax, (%r12)
leaq 0x8f14(%rip), %rax      # 0xf398
movq (%rax), %rdi
movl 0x30(%r14), %esi
callq 0x89cb
movq %rax, %r15
callq 0x6aec
pushq $0x1
popq %rbx
movq %rax, %rdi
movq %r15, %rsi
movl %ebx, %edx
movl %ebx, %ecx
callq 0x6991
movq %rax, %r15
movq 0x28(%r14), %r12
movl 0x30(%r14), %r13d
xorps %xmm0, %xmm0
movq %rsp, %rax
movaps %xmm0, 0x10(%rax)
movaps %xmm0, (%rax)
andq $0x0, 0x20(%rax)
xorl %ebp, %ebp
testl %r13d, %r13d
cmovlel %ebp, %r13d
cmpq %rbp, %r13
je 0x64e9
movsbq (%r12,%rbp), %rdx
movq %rax, %rdi
movl %ebx, %esi
callq 0x6e19
incq %rbp
jmp 0x64d0
movq (%rsp), %rax
movq %rax, 0x18(%r15)
movq %r15, %rdi
movq %r14, %rsi
callq 0x4e55
movq %rax, %rbx
jmp 0x65e7
pushq $0x1
popq %rdx
movq %rax, %rdi
movq %r15, %rsi
xorl %ecx, %ecx
callq 0x6991
movq %rax, %rbx
movq %r15, %rdi
callq 0x69d5
movq %rax, 0x18(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4e55
movq %rax, %rbx
testq %rax, %rax
jne 0x611d
jmp 0x6362
movq %r14, %rdi
callq 0x7541
testq %rax, %rax
je 0x6729
cmpq $0x0, 0x20(%rax)
je 0x66bd
movslq 0x28(%rax), %rdi
jmp 0x6468
leaq 0x321e(%rip), %rsi      # 0x9789
movq %r15, %rdi
callq 0x2110
testl %eax, %eax
jne 0x66c6
leaq 0x8d6e(%rip), %rax      # 0xf2f0
movq (%rax), %rax
movq %rax, 0x10(%rbx)
leaq 0x3ff9(%rip), %rdi      # 0xa589
callq 0x498f
testq %rax, %rax
jne 0x65df
pushq $0x1
popq %rbp
callq 0x6edd
movq %rax, %r15
leaq 0x4103(%rip), %r14      # 0xa6af
movq %r14, %rdi
callq 0x498f
testq %rax, %rax
je 0x65c9
callq 0x6edd
movq %r15, 0x30(%rax)
incl %ebp
movq %rax, %r15
jmp 0x65ac
movq %r15, 0x70(%rbx)
movl %ebp, 0x90(%rbx)
leaq 0x3faf(%rip), %rdi      # 0xa589
callq 0x5644
movq %rbx, %rdi
callq 0x8a4d
leaq 0x431d(%rip), %r14      # 0xa90b
leaq 0x4591(%rip), %r15      # 0xab86
pushq $0x1f
popq %rbp
leaq 0x31bf(%rip), %r13      # 0x97be
movq %r14, %rdi
callq 0x498f
testq %rax, %rax
je 0x663e
movq %rax, %r12
callq 0x7590
movq %rbx, %rdi
movq %rax, %rsi
movq %r12, %rdx
callq 0x5e8a
movl %ebp, %edi
movq %rax, %rsi
xorl %edx, %edx
movq %r12, %rcx
callq 0x5adf
movq %rax, %rbx
movq %r13, %rdi
callq 0x5644
jmp 0x65ff
movq %r15, %rdi
callq 0x498f
testq %rax, %rax
je 0x6650
movq %rbx, %rdi
jmp 0x6672
leaq 0x4324(%rip), %rdi      # 0xa97b
callq 0x498f
testq %rax, %rax
je 0x667c
movl %ebp, %edi
movq %rax, %rsi
callq 0x4e7e
movq %rbx, 0x18(%rax)
movq %rax, %rdi
callq 0x68a4
movq %rax, %rbx
jmp 0x65ff
leaq 0x42af(%rip), %rdi      # 0xa932
callq 0x498f
testq %rax, %rax
je 0x6691
pushq $0x26
jmp 0x66a8
leaq 0x4b58(%rip), %rdi      # 0xb1f0
callq 0x498f
testq %rax, %rax
je 0x611d
pushq $0x27
popq %rdi
movq %rax, %rsi
callq 0x4e7e
movq %rbx, 0x18(%rax)
movq %rax, %rbx
jmp 0x65ff
movq 0x10(%rax), %rdi
jmp 0x64f4
movq 0x892b(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4360(%rip), %rsi      # 0xaa37
movq %r15, %rdx
xorl %eax, %eax
callq 0x2120
leaq 0x8c78(%rip), %rax      # 0xf360
jmp 0x6582
movq 0x18(%rbx), %rdi
leaq 0x4262(%rip), %rsi      # 0xa95a
jmp 0x6712
movq 0x18(%r14), %rdi
leaq 0x4234(%rip), %rsi      # 0xa939
jmp 0x6712
movq 0x18(%r14), %rdi
leaq 0x437c(%rip), %rsi      # 0xaa8e
xorl %eax, %eax
callq 0x46f0
movq 0x18(%r14), %rdi
leaq 0x42f9(%rip), %rsi      # 0xaa1d
movq %r15, %rdx
jmp 0x6746
movq 0x18(%r14), %rbx
movl 0x20(%r14), %esi
movq %rbx, %rdi
callq 0x4903
leaq 0x4322(%rip), %rsi      # 0xaa62
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x46f0