// File: /workspace/github_c_makefile_star2_O0/neosploit[P]compiler/ast_print.c
// Function: ast_expression_print
void ast_expression_print(AstPrintState* state, Expression* expression) {

    switch (expression->tag) {
        case EXPRESSION_BINARY:
            fprintf(state->fp, " [EXPRESSION_BINARY:");

            ast_expression_print(state, expression->binary.left_expression);
            if (expression->binary.operator != UNDEFINED) fprintf(state->fp, " (OPERATOR: %s)", OperatorString[expression->binary.operator]);
            ast_expression_print(state, expression->binary.right_expression);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_UNARY:
            fprintf(state->fp, " [EXPRESSION_UNARY:");

            if (expression->unary.operator != UNDEFINED) fprintf(state->fp, " (OPERATOR: %s)", OperatorString[expression->unary.operator]);
            ast_expression_print(state, expression->unary.expression);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_VARIABLE:
            fprintf(state->fp, " [EXPRESSION_VARIABLE:");

            ast_variable_print(state, expression->variable.variable);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_FUNCTION_CALL:
            fprintf(state->fp, " [EXPRESSION_FUNCTION_CALL:");

            ast_id_print(state, expression->function_call.id);
            ast_expression_print(state, expression->function_call.expressions);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_LENGTH:
            fprintf(state->fp, " [EXPRESSION_LENGTH:");

            ast_expression_print(state, expression->length.expression);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_NEW:
            fprintf(state->fp, " [EXPRESSION_NEW:");

            ast_expression_print(state, expression->new.expression);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_CONSTANT:
            fprintf(state->fp, " [EXPRESSION_CONSTANT:");

            ast_constant_print(state, expression->constant.constant);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_ENCLOSED:
            fprintf(state->fp, " [EXPRESSION_ENCLOSED:");

            ast_expression_print(state, expression->enclosed.expression);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_SETLIST:
            fprintf(state->fp, " [EXPRESSION_SETLIST:");

            if (expression->setlist.expression) ast_expression_print(state, expression->setlist.expression);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_LIMITS:
            fprintf(state->fp, " [EXPRESSION_LIMITS:");

            ast_constant_print(state, expression->limits.lower_limit);
            ast_constant_print(state, expression->limits.upper_limit);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_LIMITS_ID:
            fprintf(state->fp, " [EXPRESSION_LIMITS_ID:");

            ast_id_print(state, expression->limits_id.id);

            fprintf(state->fp, "]");

            break;
        case EXPRESSION_ITER_SPACE:
            fprintf(state->fp, " [EXPRESSION_ITER_SPACE:");

            ast_expression_print(state, expression->iter_space.initial_expression);
            fprintf(state->fp, " (ITER SPACE: %s)", IterSpaceString[expression->iter_space.iter_space]);
            ast_expression_print(state, expression->iter_space.final_expression);

            fprintf(state->fp, "]");
    }

    if (expression->next) ast_expression_print(state, expression->next);

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
movq %rax, -0x18(%rbp)
subq $0xb, %rax
ja 0xf64a
movq -0x18(%rbp), %rax
leaq 0x12ea4(%rip), %rcx     # 0x220f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x13099(%rip), %rsi     # 0x22301
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xf220
movq -0x10(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0xf2b4
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
leaq 0x1aece(%rip), %rax     # 0x2a170
movq (%rax,%rcx,8), %rdx
leaq 0x13069(%rip), %rsi     # 0x22316
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x1333d(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x13037(%rip), %rsi     # 0x22326
movb $0x0, %al
callq 0x7170
movq -0x10(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0xf32a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
leaq 0x1ae58(%rip), %rax     # 0x2a170
movq (%rax,%rcx,8), %rdx
leaq 0x12ff3(%rip), %rsi     # 0x22316
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x132c7(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12fd5(%rip), %rsi     # 0x2233a
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf8c0
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x13285(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12faa(%rip), %rsi     # 0x22351
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf130
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x13232(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12f73(%rip), %rsi     # 0x2236d
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x131f0(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12f46(%rip), %rsi     # 0x22382
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x131ae(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12f16(%rip), %rsi     # 0x22394
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xfa50
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x1316c(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12eeb(%rip), %rsi     # 0x223ab
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x1312a(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12ec0(%rip), %rsi     # 0x223c2
movb $0x0, %al
callq 0x7170
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xf525
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x130dd(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12e89(%rip), %rsi     # 0x223d8
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xfa50
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xfa50
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x1308a(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12e4b(%rip), %rsi     # 0x223ed
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xf130
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x13048(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
jmp 0xf64a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12e24(%rip), %rsi     # 0x22405
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
leaq 0x1abff(%rip), %rax     # 0x2a210
movq (%rax,%rcx,8), %rdx
leaq 0x12e02(%rip), %rsi     # 0x2241e
movb $0x0, %al
callq 0x7170
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xf220
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x12fce(%rip), %rsi     # 0x22611
movb $0x0, %al
callq 0x7170
movq -0x10(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xf666
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xf220
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)