// File: /workspace/github_c_makefile_star2_O3/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 0x2db5
movq 0x10235(%rip), %r15     # 0x12fd0
leaq 0xb9f6(%rip), %r14      # 0xe798
movl %ebp, %r12d
movq (%r15), %rsi
movq %r14, %rdi
callq 0x20e0
decl %r12d
jne 0x2da5
testq %rbx, %rbx
je 0x2de7
movl (%rbx), %edi
movl %edi, %eax
andl $0xf000, %eax           # imm = 0xF000
movl %eax, %ecx
shrl $0xc, %ecx
cmpl $0x5, %ecx
ja 0x2e3c
leaq 0xa3a8(%rip), %rdx      # 0xd17c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
callq 0x2894
movq %rax, %rdi
jmp 0x2dee
leaq 0xa7e1(%rip), %rdi      # 0xd5cf
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2070
callq 0x2894
movq %rax, %rdi
callq 0x2070
movl $0xf000, %eax           # imm = 0xF000
andl (%rbx), %eax
cmpl $0x4000, %eax           # imm = 0x4000
jne 0x2edb
movq 0x18(%rbx), %r14
testq %r14, %r14
je 0x2e3c
incl %ebp
xorl %r15d, %r15d
movq 0x20(%rbx,%r15,8), %rdi
movl %ebp, %esi
callq 0x2d83
incq %r15
cmpq %r15, %r14
jne 0x2e28
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x2000, %eax           # imm = 0x2000
jne 0x2efe
callq 0x2894
movq 0x18(%rbx), %rdx
leaq 0xa77d(%rip), %rdi      # 0xd5dd
jmp 0x2eab
cmpl $0x3000, %eax           # imm = 0x3000
jne 0x2f21
callq 0x2894
movsd 0x18(%rbx), %xmm0
leaq 0xa768(%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 0x2f44
callq 0x2894
movq 0x18(%rbx), %rdx
leaq 0xa729(%rip), %rdi      # 0xd5d4
movq %rax, %rsi
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20b0
callq 0x2894
leaq 0xa724(%rip), %rdi      # 0xd5ed
movq %rax, %rsi
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20b0
leaq 0xa2ca(%rip), %rdi      # 0xd1ac
leaq 0xa2e5(%rip), %rsi      # 0xd1ce
leaq 0xa354(%rip), %rcx      # 0xd244
leaq 0xa36b(%rip), %r8       # 0xd262
movl $0x99, %edx
jmp 0x2f65
leaq 0xa2a7(%rip), %rdi      # 0xd1ac
leaq 0xa2c2(%rip), %rsi      # 0xd1ce
leaq 0xa2fd(%rip), %rcx      # 0xd210
leaq 0xa30a(%rip), %r8       # 0xd224
movl $0x83, %edx
jmp 0x2f65
leaq 0xa284(%rip), %rdi      # 0xd1ac
leaq 0xa29f(%rip), %rsi      # 0xd1ce
leaq 0xa2f4(%rip), %rcx      # 0xd22a
leaq 0xa301(%rip), %r8       # 0xd23e
movl $0x8a, %edx
jmp 0x2f65
leaq 0xa261(%rip), %rdi      # 0xd1ac
leaq 0xa27c(%rip), %rsi      # 0xd1ce
leaq 0xa27b(%rip), %rcx      # 0xd1d4
leaq 0xa288(%rip), %r8       # 0xd1e8
movl $0x73, %edx
xorl %eax, %eax
callq 0x4eac