// File: /workspace/github_c_makefile_star2_O0/theovosse[P]llgen/regexp.c
// Function: character
static char *character(RegExp start, char *pattern, RegExp *end) {
	char *rest = pattern;
	int i;
	char ch;
	Boolean special;

	ch = chardenot(&rest, &special, false);
	if (special) {
		if (ch == '.') {
			/* Beetje inefficient */
			*end = MakeRegExp(NULL, NULL, NULL);
			for (i = 0; i != charSetSize; i++) {
				if (isInDot[i]) {
					start->transitions = MakeTransition(i, *end, start->transitions);
				}
			}
		} else if (ch == '[') {
			rest = charlist(start, rest, end);
		} else if (ch == '(') {
			rest = choice(start, rest, end);
			ch = chardenot(&rest, &special, false);
			if (!special || ch != ')') {
				if (errorInExpression == 0) errorInExpression = 3; /* "\\)" expected */
			}
		} else {
			*end = MakeRegExp(NULL, NULL, NULL);
			start->transitions = MakeTransition(ch, *end, start->transitions);
			errorInExpression = 1; /* Illegal escape character */
		}
	} else if (*pattern == '\0') {
		if (errorInExpression == 0) errorInExpression = 2; /* Unexpected end of expression */
	} else {
		*end = MakeRegExp(NULL, NULL, NULL);
		start->transitions = MakeTransition(ch, *end, start->transitions);
		if (!caseSens) {
			if ('a' <= ch && ch <= 'z') {
				start->transitions = MakeTransition(ch - 'a' + 'A', *end, start->transitions);
			} else if ('A' <= *pattern && *pattern <= 'Z') {
				start->transitions = MakeTransition(ch - 'A' + 'a', *end, start->transitions);
			}
		}
	}
	return (rest);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x28(%rbp), %rsi
xorl %edx, %edx
callq 0x15e50
movb %al, -0x25(%rbp)
cmpw $0x0, -0x28(%rbp)
je 0x162a8
movsbl -0x25(%rbp), %eax
cmpl $0x2e, %eax
jne 0x161e1
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rdi
movq %rdx, %rsi
callq 0x11ab0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl 0xa109(%rip), %eax      # 0x202a4
je 0x161dc
movslq -0x24(%rbp), %rcx
leaq 0xa108(%rip), %rax      # 0x202b0
cmpw $0x0, (%rax,%rcx,2)
je 0x161cf
movl -0x24(%rbp), %edi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq (%rax), %rdx
callq 0x11be0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
jmp 0x161d1
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x16192
jmp 0x162a3
movsbl -0x25(%rbp), %eax
cmpl $0x5b, %eax
jne 0x16204
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x163b0
movq %rax, -0x20(%rbp)
jmp 0x162a1
movsbl -0x25(%rbp), %eax
cmpl $0x28, %eax
jne 0x1625b
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x12270
movq %rax, -0x20(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x28(%rbp), %rsi
xorl %edx, %edx
callq 0x15e50
movb %al, -0x25(%rbp)
cmpw $0x0, -0x28(%rbp)
je 0x16244
movsbl -0x25(%rbp), %eax
cmpl $0x29, %eax
je 0x16259
cmpl $0x0, 0xcd15(%rip)      # 0x22f60
jne 0x16257
movl $0x3, 0xcd09(%rip)      # 0x22f60
jmp 0x16259
jmp 0x1629f
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rdi
movq %rdx, %rsi
callq 0x11ab0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movsbl -0x25(%rbp), %edi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq (%rax), %rdx
callq 0x11be0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, 0xccc1(%rip)      # 0x22f60
jmp 0x162a1
jmp 0x162a3
jmp 0x1639e
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x162cc
cmpl $0x0, 0xcca5(%rip)      # 0x22f60
jne 0x162c7
movl $0x2, 0xcc99(%rip)      # 0x22f60
jmp 0x1639c
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rdi
movq %rdx, %rsi
callq 0x11ab0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movsbl -0x25(%rbp), %edi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq (%rax), %rdx
callq 0x11be0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
cmpw $0x0, 0x9f92(%rip)      # 0x202a0
jne 0x1639a
movsbl -0x25(%rbp), %ecx
movl $0x61, %eax
cmpl %ecx, %eax
jg 0x16353
movsbl -0x25(%rbp), %eax
cmpl $0x7a, %eax
jg 0x16353
movsbl -0x25(%rbp), %edi
subl $0x61, %edi
addl $0x41, %edi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq (%rax), %rdx
callq 0x11be0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
jmp 0x16398
movq -0x10(%rbp), %rax
movsbl (%rax), %ecx
movl $0x41, %eax
cmpl %ecx, %eax
jg 0x16396
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5a, %eax
jg 0x16396
movsbl -0x25(%rbp), %edi
subl $0x41, %edi
addl $0x61, %edi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq (%rax), %rdx
callq 0x11be0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
jmp 0x16398
jmp 0x1639a
jmp 0x1639c
jmp 0x1639e
movq -0x20(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)