// File: arnoldrobbins[P]mcilroy-regex/sed3.cpp
// Function: recomp(Text*, Text*, int)
int
recomp(Text *rebuf, Text *t, int delim)
{
	static int lastre;
	uchar *w;
	vacate(&retemp);
	for(w=t->w; ; retemp.w++,w++) {
		assure(&retemp, 2)
		*retemp.w = *w;
		if(*w == delim)
			break;
		else if(*w==0 || *w=='\n')
			syntax("unterminated address");
		else if(*w != '\\')
			continue;
		else if(*++w==delim)
			*retemp.w = delim;
		else if(*w == 'n')
			*retemp.w = '\n';
		else if(*w==0 || *w=='\n')
			syntax("unterminated regular expression");
		else {
			assure(&retemp, 2);
			*++retemp.w = *w;
		}
	}
	*retemp.w = 0;

	assure(rebuf, sizeof(regex_t));
	if(*retemp.s != 0) {
		if(regcomp((regex_t*)rebuf->w,(char*)retemp.s,options) != 0)
			syntax("bad regular expression");
		lastre = rebuf->w - rebuf->s;
		rebuf->w += sizeof(regex_t);
	} else if(rebuf->w == rebuf->s)
		syntax("no previous regular expression");
	t->w = w + 1;
	return lastre;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
leaq 0xf7a6(%rip), %rdi      # 0x18220
callq 0x7910
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, 0xf79e(%rip)      # 0x18230
je 0x8aaf
movq 0xf785(%rip), %rax      # 0x18220
movq 0xf786(%rip), %rcx      # 0x18228
addq $-0x2, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x8ac2
leaq 0xf76a(%rip), %rdi      # 0x18220
movl $0x2, %esi
callq 0x5ae0
jmp 0x8ad1
movq -0x20(%rbp), %rax
movb (%rax), %cl
movq 0xf751(%rip), %rax      # 0x18220
movb %cl, (%rax)
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl -0x14(%rbp), %eax
jne 0x8ae2
jmp 0x8c0f
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x8afa
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x8b0b
leaq 0x8aba(%rip), %rdi      # 0x115bb
callq 0x6220
jmp 0x8be8
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x5c, %eax
je 0x8b1c
jmp 0x8bec
movq -0x20(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x20(%rbp)
movzbl 0x1(%rax), %eax
cmpl -0x14(%rbp), %eax
jne 0x8b47
movl -0x14(%rbp), %eax
movb %al, %cl
movq 0xf6e0(%rip), %rax      # 0x18220
movb %cl, (%rax)
jmp 0x8be4
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x6e, %eax
jne 0x8b62
movq 0xf6c6(%rip), %rax      # 0x18220
movb $0xa, (%rax)
jmp 0x8be2
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x8b7a
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x8b88
leaq 0x8a4f(%rip), %rdi      # 0x115d0
callq 0x6220
jmp 0x8be0
cmpq $0x0, 0xf6a0(%rip)      # 0x18230
je 0x8bad
movq 0xf687(%rip), %rax      # 0x18220
movq 0xf688(%rip), %rcx      # 0x18228
addq $-0x2, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x8bc0
leaq 0xf66c(%rip), %rdi      # 0x18220
movl $0x2, %esi
callq 0x5ae0
jmp 0x8bc2
jmp 0x8bc2
movq -0x20(%rbp), %rax
movb (%rax), %cl
movq 0xf651(%rip), %rax      # 0x18220
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xf643(%rip)      # 0x18220
movb %cl, 0x1(%rax)
jmp 0x8be2
jmp 0x8be4
jmp 0x8be6
jmp 0x8be8
jmp 0x8bea
jmp 0x8bec
movq 0xf62d(%rip), %rax      # 0x18220
addq $0x1, %rax
movq %rax, 0xf622(%rip)      # 0x18220
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x8a8a
movq 0xf60a(%rip), %rax      # 0x18220
movb $0x0, (%rax)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x8c40
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x8(%rcx), %rcx
addq $-0x28, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x8c50
movq -0x8(%rbp), %rdi
movl $0x28, %esi
callq 0x5ae0
jmp 0x8c52
jmp 0x8c52
movq 0xf5d7(%rip), %rax      # 0x18230
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0x8cb6
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq 0xf5c1(%rip), %rsi      # 0x18230
leaq 0xf4b6(%rip), %rax      # 0x1812c
movl (%rax), %edx
callq 0xdc60
cmpl $0x0, %eax
je 0x8c8e
leaq 0x8967(%rip), %rdi      # 0x115f0
callq 0x6220
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq %rcx, %rax
movl %eax, 0xf592(%rip)      # 0x18238
movq -0x8(%rbp), %rax
movq (%rax), %rcx
addq $0x28, %rcx
movq %rcx, (%rax)
jmp 0x8cd5
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x8cd3
leaq 0x8939(%rip), %rdi      # 0x11607
callq 0x6220
jmp 0x8cd5
movq -0x20(%rbp), %rcx
addq $0x1, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movl 0xf54e(%rip), %eax      # 0x18238
addq $0x20, %rsp
popq %rbp
retq