// File: /workspace/github_c_makefile_star2_O0/Ziddykins[P]Dawn/src/tokenlist.c
// Function: inc_token
void inc_token(TokenList l, char * c, int end) {
    if(!l) {
        return;
    }
    struct token_list * cl = l;
    struct token_node * tmp = cl->head;
    if(!tmp) { //list is empty
        CALLEXIT(!(cl->head = calloc(1, sizeof *cl->head)))
        cl->head->next = cl->head->prev = 0;
        CALLEXIT(!(cl->head->elem = malloc(strlen(c)+1)))
        strcpy(cl->head->elem, c);
        cl->head->num = 1; //c has one occurrence
        cl->head->end = end;
        cl->len = 1; //and the list is now of length 1
    } else { //list is not empty
        //search for the item
        struct token_node * prev = 0;
        while(tmp && strcmp(tmp->elem, c) != 0) {
            prev = tmp;
            tmp = tmp->next;
        }
        if(!tmp) { //c was not found, we've reached the end of the list
            //insert new element at the end of the list
            CALLEXIT(!(prev->next = calloc(1, sizeof *prev)))

            tmp = prev->next;
            CALLEXIT(!(tmp->elem = malloc(strlen(c)+1)))
            strcpy(tmp->elem, c);
            tmp->next = 0;
            tmp->prev = prev;
            tmp->num = 1;
            tmp->end = end,
            cl->len++; //list is now 1 entry longer
        } else {
            //c has been found, increment its value
            tmp->num++;
            tmp->end |= end;
            //swap with predecessors till sorted
            while(tmp->prev && tmp->prev->num < tmp->num) {
                swap(tmp->prev, tmp);
            }
        }
    }
    cl->num_total++;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0x17c1f
jmp 0x17e96
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x17d08
movl $0x1, %edi
movl $0x20, %esi
callq 0x2110
movq -0x20(%rbp), %rcx
movq %rax, (%rcx)
cmpq $0x0, %rax
jne 0x17c6f
leaq 0x9cfa(%rip), %rdi      # 0x2195a
callq 0x2190
movl $0x1, %edi
callq 0x2260
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq $0x0, 0x8(%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq $0x0, (%rax)
movq -0x10(%rbp), %rdi
callq 0x20c0
movq %rax, %rdi
addq $0x1, %rdi
callq 0x22b0
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
jne 0x17cc8
leaq 0x9cf2(%rip), %rdi      # 0x219ab
callq 0x2190
movl $0x1, %edi
callq 0x2260
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x21c0
movq -0x20(%rbp), %rax
movq (%rax), %rax
movl $0x1, 0x18(%rax)
movl -0x14(%rbp), %ecx
movq -0x20(%rbp), %rax
movq (%rax), %rax
movl %ecx, 0x1c(%rax)
movq -0x20(%rbp), %rax
movq $0x1, 0x8(%rax)
jmp 0x17e86
movq $0x0, -0x30(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x28(%rbp)
movb %al, -0x31(%rbp)
je 0x17d36
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22d0
cmpl $0x0, %eax
setne %al
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %al
testb $0x1, %al
jne 0x17d3f
jmp 0x17d54
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x17d10
cmpq $0x0, -0x28(%rbp)
jne 0x17e24
movl $0x1, %edi
movl $0x20, %esi
callq 0x2110
movq -0x30(%rbp), %rcx
movq %rax, (%rcx)
cmpq $0x0, %rax
jne 0x17d91
leaq 0x9c78(%rip), %rdi      # 0x219fa
callq 0x2190
movl $0x1, %edi
callq 0x2260
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
callq 0x20c0
movq %rax, %rdi
addq $0x1, %rdi
callq 0x22b0
movq -0x28(%rbp), %rcx
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
jne 0x17dd5
leaq 0x9c83(%rip), %rdi      # 0x21a49
callq 0x2190
movl $0x1, %edi
callq 0x2260
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x21c0
movq -0x28(%rbp), %rax
movq $0x0, (%rax)
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movl $0x1, 0x18(%rax)
movl -0x14(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x1c(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
jmp 0x17e84
movq -0x28(%rbp), %rax
movl 0x18(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movl -0x14(%rbp), %ecx
movq -0x28(%rbp), %rax
orl 0x1c(%rax), %ecx
movl %ecx, 0x1c(%rax)
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x8(%rcx)
movb %al, -0x32(%rbp)
je 0x17e66
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x18(%rax), %eax
movq -0x28(%rbp), %rcx
cmpl 0x18(%rcx), %eax
setb %al
movb %al, -0x32(%rbp)
movb -0x32(%rbp), %al
testb $0x1, %al
jne 0x17e6f
jmp 0x17e82
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x28(%rbp), %rsi
callq 0x17ea0
jmp 0x17e3e
jmp 0x17e84
jmp 0x17e86
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)