// File: /workspace/github_c_makefile_star2_O0/sebbekarlsson[P]cola/src/parse.c
// Function: parse_statement
ast_node* parse_statement(parse_state* state, scope* sc) {
    if (state->current_token->type == _INTERPRETER_INSTR) {
        return (ast_node*) parse_interpreter_instr(state, sc);
    } else if (state->current_token->type == _RETURN) {
        return (ast_node*) parse_return(state, sc);
    } else if (state->current_token->type == _TYPE_COMPONENT) {
        return (ast_node*) parse_component(state, sc);
    } else if (state->current_token->type == _IF) {
        return (ast_node*) parse_if(state, sc);
    } else if (state->current_token->type == _WHILE) {
        return (ast_node*) parse_while(state, sc);
    } else if (state->current_token->type == _FOREACH) {
        return (ast_node*) parse_foreach(state, sc);
    } else if (state->current_token->type == _DATA_TYPE) {
        return (ast_node*) parse_variable_definition(state, sc);
    } else if (state->current_token->type == _TYPE_FUNCTION) {
        return (ast_node*) parse_function_definition(state, sc);
    }  else if (state->current_token->type == _FUNCTION_CALL) {
        return (ast_node*) parse_function_call(state, sc);
    } else if (state->current_token->type == _ID || state->current_token->type == _INTEGER || state->current_token->type == _FLOAT) {
        return parse_expr(state, sc);
    } else {
        return (void*)0;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x20, (%rax)
jne 0x5503
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5670
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x11, (%rax)
jne 0x5526
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4a60
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x2f, (%rax)
jne 0x5549
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5240
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x12, (%rax)
jne 0x556c
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4d30
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1d, (%rax)
jne 0x558f
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4ac0
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1e, (%rax)
jne 0x55b2
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4bb0
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x4, (%rax)
jne 0x55d5
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5720
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x30, (%rax)
jne 0x55f5
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5810
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1c, (%rax)
jne 0x5615
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4e60
movq %rax, -0x8(%rbp)
jmp 0x5657
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1, (%rax)
je 0x563c
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x2, (%rax)
je 0x563c
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x27, (%rax)
jne 0x564f
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4670
movq %rax, -0x8(%rbp)
jmp 0x5657
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)