// File: /workspace/github_c_makefile_star2_O0/hikalium[P]compilium/ast.c
// Function: PrintASTNodeSub
static void PrintASTNodeSub(struct Node *n, int depth) {
  if (!n) {
    fprintf(stderr, "(null)");
    return;
  }
  if (IsToken(n)) {
    PrintTokenBrief(n);
    return;
  }
  if (n->type == kASTList) {
    fprintf(stderr, "[");
    if (GetSizeOfList(n) == 0) {
      fprintf(stderr, "]");
      return;
    }
    for (int i = 0; i < GetSizeOfList(n); i++) {
      fprintf(stderr, "%s\n", i ? "," : "");
      PrintPadding(depth + 1);
      PrintASTNodeSub(GetNodeAt(n, i), depth + 1);
    }
    fprintf(stderr, "\n");
    PrintPadding(depth);
    fprintf(stderr, "]");
    return;
  } else if (n->type == kASTStructSpec) {
    fprintf(stderr, "StructSpec: ");
    PrintASTNodeSub(n->struct_member_dict, depth);
    return;
  } else if (n->type == kASTKeyValue) {
    fprintf(stderr, "%s: ", n->key);
    PrintASTNodeSub(n->value, depth);
    return;
  } else if (n->type == kNodeStructMember) {
    fprintf(stderr, "Member +%d: ", n->struct_member_ent_ofs);
    PrintASTNodeSub(n->struct_member_ent_type, depth);
    return;
  } else if (n->type == kNodeMacroReplacement) {
    fprintf(stderr, "MacroReplacement<args: ");
    PrintASTNodeSub(n->arg_expr_list, depth);
    fprintf(stderr, ", rep: ");
    PrintTokenSequence(n->value);
    fprintf(stderr, ">");
    return;
  } else if (n->type == kTypeBase) {
    PrintTokenStrToFile(n->op, stderr);
    return;
  } else if (n->type == kTypeLValue) {
    fprintf(stderr, "lvalue<");
    PrintASTNodeSub(n->right, depth);
    fprintf(stderr, ">");
    return;
  } else if (n->type == kTypePointer) {
    fprintf(stderr, "pointer_of<");
    PrintASTNodeSub(n->right, depth);
    fprintf(stderr, ">");
    return;
  } else if (n->type == kTypeFunction) {
    fprintf(stderr, "function<returns: ");
    PrintASTNodeSub(n->left, depth);
    fprintf(stderr, ", args: ");
    PrintASTNodeSub(n->right, depth);
    fprintf(stderr, ">");
    return;
  } else if (n->type == kTypeStruct) {
    fprintf(stderr, "struct<tag: ");
    PrintASTNodeSub(n->tag, depth);
    if (!n->type_struct_spec) {
      fprintf(stderr, ", incomplete");
    }
    fprintf(stderr, ">");
    return;
  } else if (n->type == kTypeArray) {
    fprintf(stderr, "array_of<");
    PrintASTNodeSub(n->type_array_type_of, depth);
    fprintf(stderr, ">[");
    PrintASTNodeSub(n->type_array_index_decl, depth);
    fprintf(stderr, "]");
    return;
  } else if (n->type == kTypeAttrIdent) {
    fputc('`', stderr);
    PrintTokenStrToFile(n->left, stderr);
    fputc('`', stderr);
    fprintf(stderr, " has a type: ");
    PrintASTNodeSub(n->right, depth);
    return;
  } else if (n->type == kASTFuncDef) {
    fprintf(stderr, "FuncDef ");
    PrintASTNodeSub(n->func_name_token, depth);
    fprintf(stderr, " : ");
    PrintASTNodeSub(n->func_type, depth);
    fprintf(stderr, "{\n");
    PrintPadding(depth + 1);
    PrintASTNodeSub(n->func_body, depth + 1);
    fprintf(stderr, "\n");
    PrintPadding(depth);
    fprintf(stderr, "}");
    return;
  } else if (n->type == kASTExprStmt) {
    PrintASTNodeSub(n->left, depth);
    fprintf(stderr, ";");
    return;
  } else if (n->type == kASTExprFuncCall) {
    fprintf(stderr, "FuncCall<");
    PrintASTNodeSub(n->func_expr, depth);
    fprintf(stderr, ">(");
    PrintASTNodeSub(n->arg_expr_list, depth);
    fprintf(stderr, ")");
    return;
  }
  fprintf(stderr, "(op=");
  if (n->op) PrintTokenBrief(n->op);
  if (n->expr_type) {
    fprintf(stderr, ":");
    PrintASTNodeSub(n->expr_type, depth + 1);
  }
  if (n->reg) fprintf(stderr, " reg: %d", n->reg);
  if (n->cond) {
    fprintf(stderr, " cond=");
    PrintASTNodeSub(n->cond, depth + 1);
  }
  if (n->left) {
    fprintf(stderr, " L=");
    PrintASTNodeSub(n->left, depth + 1);
  }
  if (n->right) {
    fprintf(stderr, " R=");
    PrintASTNodeSub(n->right, depth + 1);
  }
  fprintf(stderr, ")");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0x4203
movq 0x10e0b(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc278(%rip), %rsi      # 0x1046f
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rdi
callq 0xbbb0
testb $0x1, %al
jne 0x4212
jmp 0x4220
movq -0x8(%rbp), %rdi
callq 0xc000
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x6, (%rax)
jne 0x432c
movq 0x10dc4(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc2c9(%rip), %rsi      # 0x10507
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rdi
callq 0x4fe0
cmpl $0x0, %eax
jne 0x4270
movq 0x10d9e(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc212(%rip), %rsi      # 0x10476
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movl $0x0, -0x10(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0x14(%rbp)
movq -0x8(%rbp), %rdi
callq 0x4fe0
movl %eax, %ecx
movl -0x14(%rbp), %eax
cmpl %ecx, %eax
jge 0x42ef
movq 0x10d62(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
movl -0x10(%rbp), %ecx
leaq 0xbfe1(%rip), %rdx      # 0x10284
leaq 0xbf40(%rip), %rax      # 0x101ea
cmpl $0x0, %ecx
cmovneq %rax, %rdx
leaq 0xcd9c(%rip), %rsi      # 0x11054
movb $0x0, %al
callq 0x2100
movl -0xc(%rbp), %edi
addl $0x1, %edi
callq 0x4a00
movq -0x8(%rbp), %rdi
movl -0x10(%rbp), %esi
callq 0x5030
movq %rax, %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0x41d0
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0x4277
movq 0x10d02(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbf83(%rip), %rsi      # 0x10283
movb $0x0, %al
callq 0x2100
movl -0xc(%rbp), %edi
callq 0x4a00
movq 0x10ce2(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc156(%rip), %rsi      # 0x10476
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x13, (%rax)
jne 0x4362
movq 0x10cbc(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc132(%rip), %rsi      # 0x10478
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x11, (%rax)
jne 0x43a6
movq 0x10c86(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x98(%rax), %rdx
leaq 0xd26e(%rip), %rsi      # 0x115f5
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x43e6
movq 0x10c42(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movl 0x80(%rax), %edx
leaq 0xc0bb(%rip), %rsi      # 0x10485
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x445f
movq 0x10c02(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc092(%rip), %rsi      # 0x10492
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xb8(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10bd7(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc07f(%rip), %rsi      # 0x104aa
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rdi
callq 0xbe70
movq 0x10baf(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbc0b(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x14, (%rax)
jne 0x4484
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x10b81(%rip), %rax     # 0x14ff8
movq (%rax), %rsi
callq 0xc0b0
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x15, (%rax)
jne 0x44d2
movq 0x10b64(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xc014(%rip), %rsi      # 0x104b2
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10b3c(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbb98(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x16, (%rax)
jne 0x4520
movq 0x10b16(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbfce(%rip), %rsi      # 0x104ba
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10aee(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbb4a(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x17, (%rax)
jne 0x4596
movq 0x10ac8(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbf8c(%rip), %rsi      # 0x104c6
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10aa0(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbf77(%rip), %rsi      # 0x104d9
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10a78(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbad4(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x19, (%rax)
jne 0x460d
movq 0x10a52(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbf32(%rip), %rsi      # 0x104e2
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xe8(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq -0x8(%rbp), %rax
cmpq $0x0, 0xf0(%rax)
jne 0x45f0
movq 0x10a19(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbf06(%rip), %rsi      # 0x104ef
movb $0x0, %al
callq 0x2100
movq 0x10a01(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xba5d(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x1a, (%rax)
jne 0x4689
movq 0x109db(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbed5(%rip), %rsi      # 0x104fc
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xf8(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x109b0(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbeb4(%rip), %rsi      # 0x10506
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x100(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10985(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbdf9(%rip), %rsi      # 0x10476
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x18, (%rax)
jne 0x46fe
movq 0x1095f(%rip), %rax     # 0x14ff8
movq (%rax), %rsi
movl $0x60, %edi
callq 0x20c0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq 0x10943(%rip), %rax     # 0x14ff8
movq (%rax), %rsi
callq 0xc0b0
movq 0x10934(%rip), %rax     # 0x14ff8
movq (%rax), %rsi
movl $0x60, %edi
callq 0x20c0
movq 0x10920(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbe27(%rip), %rsi      # 0x10509
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x10, (%rax)
jne 0x47d7
movq 0x108e6(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbdfb(%rip), %rsi      # 0x10517
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x108bb(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbdd9(%rip), %rsi      # 0x10520
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xd8(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10890(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbdb2(%rip), %rsi      # 0x10524
movb $0x0, %al
callq 0x2100
movl -0xc(%rbp), %edi
addl $0x1, %edi
callq 0x4a00
movq -0x8(%rbp), %rax
movq 0xd0(%rax), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0x41d0
movq 0x10857(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbad8(%rip), %rsi      # 0x10283
movb $0x0, %al
callq 0x2100
movl -0xc(%rbp), %edi
callq 0x4a00
movq 0x10837(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbd5c(%rip), %rsi      # 0x10527
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x480d
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10801(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xd361(%rip), %rsi      # 0x11b62
movb $0x0, %al
callq 0x2100
jmp 0x49ee
movq -0x8(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x4889
movq 0x107db(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbd02(%rip), %rsi      # 0x10529
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xb0(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x107b0(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbce1(%rip), %rsi      # 0x10533
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0xb8(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x41d0
movq 0x10785(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xcec8(%rip), %rsi      # 0x11745
movb $0x0, %al
callq 0x2100
jmp 0x49ee
jmp 0x488b
jmp 0x488d
jmp 0x488f
jmp 0x4891
jmp 0x4893
jmp 0x4895
jmp 0x4897
jmp 0x4899
jmp 0x489b
jmp 0x489d
jmp 0x489f
jmp 0x48a1
jmp 0x48a3
jmp 0x48a5
movq 0x1074c(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbc80(%rip), %rsi      # 0x10536
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x48d5
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0xc000
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x490b
movq 0x10711(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbc4a(%rip), %rsi      # 0x1053b
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0x41d0
movq -0x8(%rbp), %rax
cmpl $0x0, 0x4(%rax)
je 0x4934
movq 0x106dc(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movl 0x4(%rax), %edx
leaq 0xbc10(%rip), %rsi      # 0x1053d
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x496a
movq 0x106b2(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbbf6(%rip), %rsi      # 0x10546
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0x41d0
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x49a0
movq 0x1067c(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbbc7(%rip), %rsi      # 0x1054d
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0x41d0
movq -0x8(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x49d6
movq 0x10646(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xbb95(%rip), %rsi      # 0x10551
movb $0x0, %al
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movl -0xc(%rbp), %esi
addl $0x1, %esi
callq 0x41d0
movq 0x1061b(%rip), %rax     # 0x14ff8
movq (%rax), %rdi
leaq 0xcd5e(%rip), %rsi      # 0x11745
movb $0x0, %al
callq 0x2100
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)