// File: /workspace/github_c_makefile_star2_O0/masyagin1998[P]GCI/src/parser/parser.c
// Function: formal_parameters_list_ast_read
static enum PARSER_CODES formal_parameters_list_ast_read(struct PARSER*parser, struct FORMAL_PARAMETERS_LIST_AST**formal_parameters_list)
{
    enum PARSER_CODES r;

    struct IDENT_AST**idents = NULL;
    size_t idents_len = 0;
    size_t idents_cap = 0;

    struct IDENT_AST*ident;

    r = ident_ast_read(parser, &ident);
    if (r != PARSER_OK) {
        goto err0;
    }
    
    PUSH_BACK(idents, ident);    
    
    while ((parser->tok)->token_type == TOKEN_TYPE_COMMA) {
        token_free((parser->tok));
        lexer_next_token(parser->lexer, &(parser->tok));

        r = ident_ast_read(parser, &ident);
        if (r != PARSER_OK) {
            goto err1;
        }
        
        PUSH_BACK(idents, ident);            
    }

    (*formal_parameters_list) = create_formal_parameters_list_ast(idents, idents_len,
                                                                  (parser->tok)->frag.starting.line,
                                                                  (parser->tok)->frag.starting.pos);

    return PARSER_OK;

 err1:
    {
        size_t i;
        for (i = 0; i < idents_len; i++) {
            ident_ast_free(idents[i]);
        }
        SAFE_FREE(idents);
    }
 err0:
    (*formal_parameters_list) = NULL;
    return r;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x10(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x4190
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
je 0x4293
jmp 0x4541
jmp 0x4295
movq -0x30(%rbp), %rax
cmpq -0x38(%rbp), %rax
jne 0x4365
cmpq $0x0, -0x38(%rbp)
jne 0x4303
movq $0x1, -0x38(%rbp)
movq -0x38(%rbp), %rdi
shlq $0x3, %rdi
callq 0x1130
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0x42ff
movq 0x1ad20(%rip), %rax     # 0x1eff0
movq (%rax), %rdi
movq -0x38(%rbp), %r8
shlq $0x3, %r8
leaq 0x1432c(%rip), %rsi     # 0x1860e
leaq 0x1457f(%rip), %rdx     # 0x18868
movl $0xb4, %ecx
movb $0x0, %al
callq 0x1100
movl $0x1, %edi
callq 0x1170
jmp 0x4301
jmp 0x4363
movq -0x38(%rbp), %rax
shlq %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
shlq $0x3, %rsi
callq 0x1150
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0x435f
movq 0x1acc0(%rip), %rax     # 0x1eff0
movq (%rax), %rdi
movq -0x38(%rbp), %r8
shlq $0x3, %r8
leaq 0x14653(%rip), %rsi     # 0x18995
leaq 0x1451f(%rip), %rdx     # 0x18868
movl $0xb4, %ecx
movb $0x0, %al
callq 0x1100
movl $0x1, %edi
callq 0x1170
jmp 0x4361
jmp 0x4363
jmp 0x4365
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rax
movq -0x30(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x4383
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x22, (%rax)
jne 0x44c3
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x31b0
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x1fd0
movq -0x10(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x4190
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
je 0x43d0
jmp 0x44fb
jmp 0x43d2
movq -0x30(%rbp), %rax
cmpq -0x38(%rbp), %rax
jne 0x44a2
cmpq $0x0, -0x38(%rbp)
jne 0x4440
movq $0x1, -0x38(%rbp)
movq -0x38(%rbp), %rdi
shlq $0x3, %rdi
callq 0x1130
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0x443c
movq 0x1abe3(%rip), %rax     # 0x1eff0
movq (%rax), %rdi
movq -0x38(%rbp), %r8
shlq $0x3, %r8
leaq 0x141ef(%rip), %rsi     # 0x1860e
leaq 0x14442(%rip), %rdx     # 0x18868
movl $0xbf, %ecx
movb $0x0, %al
callq 0x1100
movl $0x1, %edi
callq 0x1170
jmp 0x443e
jmp 0x44a0
movq -0x38(%rbp), %rax
shlq %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
shlq $0x3, %rsi
callq 0x1150
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0x449c
movq 0x1ab83(%rip), %rax     # 0x1eff0
movq (%rax), %rdi
movq -0x38(%rbp), %r8
shlq $0x3, %r8
leaq 0x14516(%rip), %rsi     # 0x18995
leaq 0x143e2(%rip), %rdx     # 0x18868
movl $0xbf, %ecx
movb $0x0, %al
callq 0x1100
movl $0x1, %edi
callq 0x1170
jmp 0x449e
jmp 0x44a0
jmp 0x44a2
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rax
movq -0x30(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x4383
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rcx
callq 0x8c60
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movl $0x0, -0x4(%rbp)
jmp 0x4552
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x452c
movq -0x28(%rbp), %rax
movq -0x48(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x8b30
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x4503
jmp 0x452e
movq -0x28(%rbp), %rdi
callq 0x1030
movq $0x0, -0x28(%rbp)
jmp 0x4541
movq -0x18(%rbp), %rax
movq $0x0, (%rax)
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)