// File: /workspace/github_c_makefile_star2_O0/taeguk[P]Compiler-Proj-Cminus/src/util.c
// Function: printTree
void
printTree(TreeNode* tree)
{
  INDENT;
  if (tree == NULL) PRINTDESC("(null)\n");
  for (; tree != NULL; tree = tree->sibling)
    {
      switch (tree->nodeKind)
        {
        case ErrorK:
          PRINTDESC("[DEBUG] ErrorK at printTree\n");
          break;

        case VariableDeclarationK:
          PRINTDESC("Variable Declaration\n");
          printTree(tree->attr.varDecl.type_spec);
          printTree(tree->attr.varDecl._var);
          break;

        case ArrayDeclarationK:
          PRINTDESC("Array Declaration\n");
          printTree(tree->attr.arrDecl.type_spec);
          printTree(tree->attr.arrDecl._var);
          printTree(tree->attr.arrDecl._num);
          break;

        case FunctionDeclarationK:
          PRINTDESC("Function Declaration\n");
          printTree(tree->attr.funcDecl.type_spec);
          printTree(tree->attr.funcDecl._var);
          PRINTDESC("> Parameters :\n");
          printTree(tree->attr.funcDecl.params);
          PRINTDESC("> Function Block :\n");
          printTree(tree->attr.funcDecl.cmpd_stmt);
          break;

        case VariableParameterK:
          PRINTDESC("Parameter (Variable)\n");
          printTree(tree->attr.varParam.type_spec);
          printTree(tree->attr.varParam._var);
          break;

        case ArrayParameterK:
          PRINTDESC("Parameter (Array)\n");
          printTree(tree->attr.arrParam.type_spec);
          printTree(tree->attr.arrParam._var);
          break;

        case CompoundStatementK:
          PRINTDESC("Compound Statement\n");
          PRINTDESC("> Local Declarations :\n");
          printTree(tree->attr.cmpdStmt.local_decl);
          PRINTDESC("> Local Statements :\n");
          printTree(tree->attr.cmpdStmt.stmt_list);
          break;

        case ExpressionStatementK:
          PRINTDESC("Expression Statement\n");
          PRINTDESC("> Expression :\n");
          printTree(tree->attr.exprStmt.expr);
          break;

        case SelectionStatementK:
          PRINTDESC("Selection Statement\n");
          PRINTDESC("> Expression inside if(*) :\n");
          printTree(tree->attr.selectStmt.expr);
          PRINTDESC("> Statements inside if clause :\n");
          printTree(tree->attr.selectStmt.if_stmt);
          PRINTDESC("> Statements inside else clause :\n");
          printTree(tree->attr.selectStmt.else_stmt);
          break;

        case IterationStatementK:
          PRINTDESC("Iteration Statement\n");
          PRINTDESC("> Expression inside while(*) :\n");
          printTree(tree->attr.iterStmt.expr);
          PRINTDESC("> Statements inside while clause :\n");
          printTree(tree->attr.iterStmt.loop_stmt);
          break;

        case ReturnStatementK:
          PRINTDESC("Return Statement\n");
          PRINTDESC("> Returning expression :\n");
          printTree(tree->attr.retStmt.expr);
          break;

        case AssignExpressionK:
          PRINTDESC("Assignment Expression\n");
          PRINTDESC("> Variable associated to assignment :\n");
          printTree(tree->attr.assignStmt._var);
          PRINTDESC("> Value assigned :\n");
          printTree(tree->attr.assignStmt.expr);
          break;

        case ComparisonExpressionK:
          PRINTDESC("Comparison Expression\n");
          printTree(tree->attr.cmpExpr.op);
          PRINTDESC("> Left expression compared :\n");
          printTree(tree->attr.cmpExpr.lexpr);
          PRINTDESC("> Right expression compared :\n");
          printTree(tree->attr.cmpExpr.rexpr);
          break;

        case AdditiveExpressionK:
          PRINTDESC("Additive Expression\n");
          printTree(tree->attr.addExpr.op);
          PRINTDESC("> Left expression added / subtracted :\n");
          printTree(tree->attr.addExpr.lexpr);
          PRINTDESC("> Right expression added / subtracted :\n");
          printTree(tree->attr.addExpr.rexpr);
          break;

        case MultiplicativeExpressionK:
          PRINTDESC("Multiplicative Expression\n");
          printTree(tree->attr.multExpr.op);
          PRINTDESC("> Left expression multiplied / divided :\n");
          printTree(tree->attr.multExpr.lexpr);
          PRINTDESC("> Right expression multiplied / divided :\n");
          printTree(tree->attr.multExpr.rexpr);
          break;

        case VariableK:
          PRINTDESC("Variable Id : %s\n", tree->attr.ID);
          break;

        case ArrayK:
          PRINTDESC("Array\n");
          printTree(tree->attr.arr._var);
          PRINTDESC("> Expression inside subscript [*]\n");
          printTree(tree->attr.arr.arr_expr);
          break;

        case CallK:
          PRINTDESC("Function Call\n");
          printTree(tree->attr.call._var);
          PRINTDESC("> Function arguments :\n");
          printTree(tree->attr.call.expr_list);
          break;

        case ConstantK:
          PRINTDESC("Constant : %d\n", tree->attr.NUM);
          break;

        case TokenTypeK:
          PRINTDESC("Token : %s\n", operatorString(tree->attr.TOK));
          break;

        default:
          PRINTDESC("[DEBUG] No such nodeKind\n");
        }
    }
  UNINDENT;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movl 0x1a426(%rip), %eax     # 0x222d8
addl $0x2, %eax
movl %eax, 0x1a41d(%rip)     # 0x222d8
cmpq $0x0, -0x8(%rbp)
jne 0x7ee3
jmp 0x7ec4
callq 0x86a0
leaq 0x6340(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2e94(%rip), %rsi      # 0xad6e
movb $0x0, %al
callq 0x1120
jmp 0x7ee3
jmp 0x7ee5
cmpq $0x0, -0x8(%rbp)
je 0x868a
movq -0x8(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x10(%rbp)
subq $0x13, %rax
ja 0x8657
movq -0x10(%rbp), %rax
leaq 0x2cc4(%rip), %rcx      # 0xabd4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x7f1b
callq 0x86a0
leaq 0x62e9(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2e45(%rip), %rsi      # 0xad76
movb $0x0, %al
callq 0x1120
jmp 0x8678
jmp 0x7f3f
callq 0x86a0
leaq 0x62c5(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2e3e(%rip), %rsi      # 0xad93
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x7f7d
callq 0x86a0
leaq 0x6287(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2e16(%rip), %rsi      # 0xada9
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x7fc8
callq 0x86a0
leaq 0x623c(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2dde(%rip), %rsi      # 0xadbc
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x6205(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2dbd(%rip), %rsi      # 0xadd2
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x61db(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2da3(%rip), %rsi      # 0xade2
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x805a
callq 0x86a0
leaq 0x61aa(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2d86(%rip), %rsi      # 0xadf6
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x8098
callq 0x86a0
leaq 0x616c(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2d5e(%rip), %rsi      # 0xae0c
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x80d6
callq 0x86a0
leaq 0x612e(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x173c(%rip), %rsi      # 0x9828
movb $0x0, %al
callq 0x1120
jmp 0x80f5
callq 0x86a0
leaq 0x610f(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2d14(%rip), %rsi      # 0xae1f
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x60e5(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2d02(%rip), %rsi      # 0xae37
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x8150
callq 0x86a0
leaq 0x60b4(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2ce7(%rip), %rsi      # 0xae4d
movb $0x0, %al
callq 0x1120
jmp 0x816f
callq 0x86a0
leaq 0x6095(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2cde(%rip), %rsi      # 0xae63
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x81a0
callq 0x86a0
leaq 0x6064(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x16a1(%rip), %rsi      # 0x9857
movb $0x0, %al
callq 0x1120
jmp 0x81bf
callq 0x86a0
leaq 0x6045(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c9e(%rip), %rsi      # 0xae73
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x601b(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c91(%rip), %rsi      # 0xae90
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5ff1(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c88(%rip), %rsi      # 0xaeb1
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x8244
callq 0x86a0
leaq 0x5fc0(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x1697(%rip), %rsi      # 0x98f1
movb $0x0, %al
callq 0x1120
jmp 0x8263
callq 0x86a0
leaq 0x5fa1(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c5b(%rip), %rsi      # 0xaed4
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5f77(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c51(%rip), %rsi      # 0xaef4
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x82be
callq 0x86a0
leaq 0x5f46(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c44(%rip), %rsi      # 0xaf18
movb $0x0, %al
callq 0x1120
jmp 0x82dd
callq 0x86a0
leaq 0x5f27(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c37(%rip), %rsi      # 0xaf2a
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x830e
callq 0x86a0
leaq 0x5ef6(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c20(%rip), %rsi      # 0xaf44
movb $0x0, %al
callq 0x1120
jmp 0x832d
callq 0x86a0
leaq 0x5ed7(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c18(%rip), %rsi      # 0xaf5b
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5ead(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2c15(%rip), %rsi      # 0xaf82
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x8388
callq 0x86a0
leaq 0x5e7c(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2bf8(%rip), %rsi      # 0xaf96
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5e52(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2be5(%rip), %rsi      # 0xafad
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5e28(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2bd9(%rip), %rsi      # 0xafcb
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x840d
callq 0x86a0
leaq 0x5df7(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2bc7(%rip), %rsi      # 0xafea
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5dcd(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2bb2(%rip), %rsi      # 0xafff
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5da3(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2bb0(%rip), %rsi      # 0xb027
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x8492
callq 0x86a0
leaq 0x5d72(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2ba8(%rip), %rsi      # 0xb050
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5d48(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2b99(%rip), %rsi      # 0xb06b
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5d1e(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2b99(%rip), %rsi      # 0xb095
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x8517
callq 0x86a0
leaq 0x5ced(%rip), %rax      # 0xe210
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdx
leaq 0x2b8b(%rip), %rsi      # 0xb0c0
movb $0x0, %al
callq 0x1120
jmp 0x8678
jmp 0x8543
callq 0x86a0
leaq 0x5cc1(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2b79(%rip), %rsi      # 0xb0d2
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5c97(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2b56(%rip), %rsi      # 0xb0d9
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x859e
callq 0x86a0
leaq 0x5c66(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2b48(%rip), %rsi      # 0xb0fc
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x7ea0
callq 0x86a0
leaq 0x5c3c(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2b2d(%rip), %rsi      # 0xb10b
movb $0x0, %al
callq 0x1120
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x7ea0
jmp 0x8678
jmp 0x85f9
callq 0x86a0
leaq 0x5c0b(%rip), %rax      # 0xe210
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movl 0x20(%rax), %edx
leaq 0x2b0d(%rip), %rsi      # 0xb123
movb $0x0, %al
callq 0x1120
jmp 0x8678
jmp 0x8621
callq 0x86a0
leaq 0x5be3(%rip), %rax      # 0xe210
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movl 0x20(%rax), %edi
callq 0x86f0
movq -0x18(%rbp), %rdi
movq %rax, %rdx
leaq 0x2ae4(%rip), %rsi      # 0xb132
movb $0x0, %al
callq 0x1120
jmp 0x8678
jmp 0x8659
callq 0x86a0
leaq 0x5bab(%rip), %rax      # 0xe210
movq (%rax), %rdi
leaq 0x2acf(%rip), %rsi      # 0xb13e
movb $0x0, %al
callq 0x1120
jmp 0x8678
jmp 0x867a
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x7ee5
movl 0x19c48(%rip), %eax     # 0x222d8
subl $0x2, %eax
movl %eax, 0x19c3f(%rip)     # 0x222d8
addq $0x20, %rsp
popq %rbp
retq
nop