// File: /workspace/github_c_makefile_star2_O0/bobrippling[P]tim/list.c
// Function: list_iter_region
void list_iter_region(
		list_t *l, const region_t *r,
		enum list_iter_flags flags,
		list_iter_f fn, void *ctx)
{
	size_t i = 0;
	size_t end = r->end.y - r->begin.y + 1;

	for(l = list_seek(l, r->begin.y, false);
			l && i < end; l = l->next, i++)
	{
		const size_t y = i + r->begin.y;
		bool next = true;

		switch(r->type){
			case REGION_LINE:
				if(flags & LIST_ITER_WHOLE_LINE)
					next = fn(l->line, l, y, ctx);
				else
					next = line_iter(l, 0, l->len_line, y, fn, ctx);
				break;
			case REGION_COL:
				next = line_iter(l, r->begin.x, r->end.x, y, fn, ctx);
				break;
			case REGION_CHAR:
				next = line_iter(l,
						i == 0 ? r->begin.x : 0,
						i+1 == end ? (unsigned)r->end.x : l->len_line,
						y, fn, ctx);
				break;
		}
		if(flags & LIST_ITER_EVAL_NL)
			list_evalnewlines1(l);
		if(!next)
			break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0x4(%rcx), %eax
addl $0x1, %eax
cltq
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %esi
xorl %edx, %edx
callq 0xcd50
movq %rax, -0x8(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x8(%rbp)
movb %al, -0x42(%rbp)
je 0xe1ca
movq -0x30(%rbp), %rax
cmpq -0x38(%rbp), %rax
setb %al
movb %al, -0x42(%rbp)
movb -0x42(%rbp), %al
testb $0x1, %al
jne 0xe1d6
jmp 0xe34a
movq -0x30(%rbp), %rax
movq -0x10(%rbp), %rcx
movslq 0x4(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movb $0x1, -0x41(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x48(%rbp)
testl %eax, %eax
je 0xe29c
jmp 0xe201
movl -0x48(%rbp), %eax
subl $0x1, %eax
je 0xe271
jmp 0xe20b
movl -0x48(%rbp), %eax
subl $0x2, %eax
jne 0xe30f
jmp 0xe219
movl -0x14(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xe246
movq -0x20(%rbp), %rax
movq -0x8(%rbp), %rcx
movq (%rcx), %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rcx
movl %ecx, %edx
movq -0x28(%rbp), %rcx
callq *%rax
andb $0x1, %al
movb %al, -0x41(%rbp)
jmp 0xe26c
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x40(%rbp), %rcx
movq -0x20(%rbp), %r8
movq -0x28(%rbp), %r9
xorl %eax, %eax
movl %eax, %esi
callq 0xe350
andb $0x1, %al
movb %al, -0x41(%rbp)
jmp 0xe30f
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq (%rax), %rsi
movq -0x10(%rbp), %rax
movslq 0x8(%rax), %rdx
movq -0x40(%rbp), %rcx
movq -0x20(%rbp), %r8
movq -0x28(%rbp), %r9
callq 0xe350
andb $0x1, %al
movb %al, -0x41(%rbp)
jmp 0xe30f
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xe2b6
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
jmp 0xe2bd
xorl %eax, %eax
movl %eax, -0x54(%rbp)
jmp 0xe2bd
movl -0x54(%rbp), %eax
cltq
movq %rax, -0x60(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
cmpq -0x38(%rbp), %rax
jne 0xe2e1
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq %rax, -0x68(%rbp)
jmp 0xe2ed
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rsi
movq -0x50(%rbp), %rdi
movq -0x68(%rbp), %rdx
movq -0x40(%rbp), %rcx
movq -0x20(%rbp), %r8
movq -0x28(%rbp), %r9
callq 0xe350
andb $0x1, %al
movb %al, -0x41(%rbp)
movl -0x14(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0xe323
movq -0x8(%rbp), %rdi
callq 0xcdb0
testb $0x1, -0x41(%rbp)
jne 0xe32b
jmp 0xe34a
jmp 0xe32d
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x8(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0xe1b0
addq $0x70, %rsp
popq %rbp
retq