// File: /workspace/github_c_makefile_star2_O0/gaultier[P]lox-c/hashtab.c
// Function: ht_iter_inc
void ht_iter_inc(hashtab_iter_t * ii)
{
    hashtab_t *hashtable = ii->internal.hashtable;
    int index = ii->internal.index;

    /* attempt to grab the next node */
    if (ii->internal.node == NULL || ii->internal.node->next == NULL)
	index++;
    else {
	/* next node in the list */
	ii->internal.node = ii->internal.node->next;
	ii->key = ii->internal.node->key;
	ii->value = ii->internal.node->value;
	ii->keylen = ii->internal.node->keylen;
	ii->vallen = ii->internal.node->vallen;
	return;
    }

    /* find next node */
    while (hashtable->arr[index] == NULL && index < (int) hashtable->size)
	index++;

    if (index >= (int) hashtable->size) {
	/* end of hashtable */
	ii->internal.node = NULL;
	ii->internal.index = (int) hashtable->size;

	ii->key = NULL;
	ii->value = NULL;
	ii->keylen = 0;
	ii->vallen = 0;
	return;
    }

    /* point to the next item in the hashtable */
    ii->internal.node = hashtable->arr[index];
    ii->internal.index = index;
    ii->key = ii->internal.node->key;
    ii->value = ii->internal.node->value;
    ii->keylen = ii->internal.node->keylen;
    ii->vallen = ii->internal.node->vallen;
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq -0x8(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x10(%rsp)
movq -0x8(%rsp), %rax
movl 0x30(%rax), %eax
movl %eax, -0x14(%rsp)
movq -0x8(%rsp), %rax
cmpq $0x0, 0x28(%rax)
je 0x1aab
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
cmpq $0x0, 0x20(%rax)
jne 0x1ab8
movl -0x14(%rsp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rsp)
jmp 0x1b29
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x28(%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq (%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, (%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x8(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x18(%rax)
jmp 0x1c54
jmp 0x1b2b
movq -0x10(%rsp), %rax
movq (%rax), %rcx
movslq -0x14(%rsp), %rdx
xorl %eax, %eax
cmpq $0x0, (%rcx,%rdx,8)
movb %al, -0x15(%rsp)
jne 0x1b5b
movl -0x14(%rsp), %eax
movq -0x10(%rsp), %rcx
movq 0x8(%rcx), %rcx
cmpl %ecx, %eax
setl %al
movb %al, -0x15(%rsp)
movb -0x15(%rsp), %al
testb $0x1, %al
jne 0x1b65
jmp 0x1b72
movl -0x14(%rsp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rsp)
jmp 0x1b2b
movl -0x14(%rsp), %eax
movq -0x10(%rsp), %rcx
movq 0x8(%rcx), %rcx
cmpl %ecx, %eax
jl 0x1bd8
movq -0x8(%rsp), %rax
movq $0x0, 0x28(%rax)
movq -0x10(%rsp), %rax
movq 0x8(%rax), %rax
movl %eax, %ecx
movq -0x8(%rsp), %rax
movl %ecx, 0x30(%rax)
movq -0x8(%rsp), %rax
movq $0x0, (%rax)
movq -0x8(%rsp), %rax
movq $0x0, 0x8(%rax)
movq -0x8(%rsp), %rax
movq $0x0, 0x10(%rax)
movq -0x8(%rsp), %rax
movq $0x0, 0x18(%rax)
jmp 0x1c54
movq -0x10(%rsp), %rax
movq (%rax), %rax
movslq -0x14(%rsp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x28(%rax)
movl -0x14(%rsp), %ecx
movq -0x8(%rsp), %rax
movl %ecx, 0x30(%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq (%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, (%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x8(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x18(%rax)
retq
nopw %cs:(%rax,%rax)
nop