// File: /workspace/github_c_makefile_star2_O1/ryvnf[P]czc/ast.c
// Function: ast_print
void ast_print(struct ast *ast, int indent)
{
    for (int j = 0; j < indent; j++)
        fputs("  ", stdout);

    if (ast == NULL) {
        puts("NULL");
        return;
    }

    switch (ast_val_type(ast->tag)) {
        case AST_NO_VAL:
            printf("%s\n", ast_tag_name(ast->tag));
            break;
        case AST_S:
            printf("%s \"%s\"\n", ast_tag_name(ast->tag), ast_s(ast));
            break;
        case AST_I:
            printf("%s %lld\n", ast_tag_name(ast->tag), ast_i(ast));
            break;
        case AST_F:
            printf("%s %f\n", ast_tag_name(ast->tag), ast_f(ast));
            break;
        case AST_AST:
            printf("%s\n", ast_tag_name(ast->tag));
            ast_print_childs(ast, indent);
            break;
        case AST_CHARS:
            printf("%s <CHARS>\n", ast_tag_name(ast->tag));
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
testl %esi, %esi
jle 0x2d95
movq 0x10255(%rip), %r15     # 0x12fd0
leaq 0xba26(%rip), %r14      # 0xe7a8
movl %ebp, %r12d
movq (%r15), %rsi
movq %r14, %rdi
callq 0x20e0
decl %r12d
jne 0x2d85
testq %rbx, %rbx
je 0x2dc7
movl (%rbx), %edi
movl %edi, %eax
andl $0xf000, %eax           # imm = 0xF000
movl %eax, %ecx
shrl $0xc, %ecx
cmpl $0x5, %ecx
ja 0x2e1c
leaq 0xa3c8(%rip), %rdx      # 0xd17c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
callq 0x2874
movq %rax, %rdi
jmp 0x2dce
leaq 0xa801(%rip), %rdi      # 0xd5cf
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2070
callq 0x2874
movq %rax, %rdi
callq 0x2070
movl $0xf000, %eax           # imm = 0xF000
andl (%rbx), %eax
cmpl $0x4000, %eax           # imm = 0x4000
jne 0x2ebb
movq 0x18(%rbx), %r14
testq %r14, %r14
je 0x2e1c
incl %ebp
xorl %r15d, %r15d
movq 0x20(%rbx,%r15,8), %rdi
movl %ebp, %esi
callq 0x2d63
incq %r15
cmpq %r15, %r14
jne 0x2e08
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x2000, %eax           # imm = 0x2000
jne 0x2ede
callq 0x2874
movq 0x18(%rbx), %rdx
leaq 0xa79d(%rip), %rdi      # 0xd5dd
jmp 0x2e8b
cmpl $0x3000, %eax           # imm = 0x3000
jne 0x2f01
callq 0x2874
movsd 0x18(%rbx), %xmm0
leaq 0xa788(%rip), %rdi      # 0xd5e6
movq %rax, %rsi
movb $0x1, %al
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20b0
cmpl $0x1000, %eax           # imm = 0x1000
jne 0x2f24
callq 0x2874
movq 0x18(%rbx), %rdx
leaq 0xa749(%rip), %rdi      # 0xd5d4
movq %rax, %rsi
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20b0
callq 0x2874
leaq 0xa744(%rip), %rdi      # 0xd5ed
movq %rax, %rsi
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20b0
leaq 0xa2ea(%rip), %rdi      # 0xd1ac
leaq 0xa305(%rip), %rsi      # 0xd1ce
leaq 0xa374(%rip), %rcx      # 0xd244
leaq 0xa38b(%rip), %r8       # 0xd262
movl $0x99, %edx
jmp 0x2f45
leaq 0xa2c7(%rip), %rdi      # 0xd1ac
leaq 0xa2e2(%rip), %rsi      # 0xd1ce
leaq 0xa31d(%rip), %rcx      # 0xd210
leaq 0xa32a(%rip), %r8       # 0xd224
movl $0x83, %edx
jmp 0x2f45
leaq 0xa2a4(%rip), %rdi      # 0xd1ac
leaq 0xa2bf(%rip), %rsi      # 0xd1ce
leaq 0xa314(%rip), %rcx      # 0xd22a
leaq 0xa321(%rip), %r8       # 0xd23e
movl $0x8a, %edx
jmp 0x2f45
leaq 0xa281(%rip), %rdi      # 0xd1ac
leaq 0xa29c(%rip), %rsi      # 0xd1ce
leaq 0xa29b(%rip), %rcx      # 0xd1d4
leaq 0xa2a8(%rip), %r8       # 0xd1e8
movl $0x73, %edx
xorl %eax, %eax
callq 0x4f1c