// File: /workspace/github_c_makefile_star2_O0/haxlang[P]hax/haxRegexp.c
// Function: RegAtom
static char *
RegAtom(
Hax_Interp *interp,
int *flagp)
{
	Interp *iPtr = (Interp *) interp;
	char *ret;
	int flags;

	*flagp = WORST;		/* Tentatively. */

	switch (*iPtr->regparse++) {
	case '^':
		ret = RegNode(interp, BOL);
		break;
	case '$':
		ret = RegNode(interp, EOL);
		break;
	case '.':
		ret = RegNode(interp, ANY);
		*flagp |= HASWIDTH|SIMPLE;
		break;
	case '[': {
			int clss;
			int classend;

			if (*iPtr->regparse == '^') {	/* Complement of range. */
				ret = RegNode(interp, ANYBUT);
				iPtr->regparse++;
			} else
				ret = RegNode(interp, ANYOF);
			if (*iPtr->regparse == ']' || *iPtr->regparse == '-')
				RegC(interp, *iPtr->regparse++);
			while (*iPtr->regparse != '\0' && *iPtr->regparse != ']') {
				if (*iPtr->regparse == '-') {
					iPtr->regparse++;
					if (*iPtr->regparse == ']' || *iPtr->regparse == '\0')
						RegC(interp, '-');
					else {
						clss = UCHARAT(iPtr->regparse-2)+1;
						classend = UCHARAT(iPtr->regparse);
						if (clss > classend+1)
							FAIL((char *) "invalid [] range");
						for (; clss <= classend; clss++)
							RegC(interp, clss);
						iPtr->regparse++;
					}
				} else
					RegC(interp, *iPtr->regparse++);
			}
			RegC(interp, '\0');
			if (*iPtr->regparse != ']')
				FAIL((char *) "unmatched []");
			iPtr->regparse++;
			*flagp |= HASWIDTH|SIMPLE;
		}
		break;
	case '(':
		ret = Reg(interp, 1, &flags);
		if (ret == NULL)
			return(NULL);
		*flagp |= flags&(HASWIDTH|SPSTART);
		break;
	case '\0':
	case '|':
	case ')':
		FAIL((char *) "internal urp");	/* Supposed to be caught earlier. */
		/* NOTREACHED */
		break;
	case '?':
	case '+':
	case '*':
		FAIL((char *) "?+* follows nothing");
		/* NOTREACHED */
		break;
	case '\\':
		if (*iPtr->regparse == '\0')
			FAIL((char *) "trailing \\");
		ret = RegNode(interp, EXACTLY);
		RegC(interp, *iPtr->regparse++);
		RegC(interp, '\0');
		*flagp |= HASWIDTH|SIMPLE;
		break;
	default: {
			int len;
			char ender;

			iPtr->regparse--;
			len = strcspn(iPtr->regparse, META);
			if (len <= 0)
				FAIL((char *) "internal disaster");
			ender = *(iPtr->regparse+len);
			if (len > 1 && ISMULT(ender))
				len--;		/* Back off clear of ?+* operand. */
			*flagp |= HASWIDTH;
			if (len == 1)
				*flagp |= SIMPLE;
			ret = RegNode(interp, EXACTLY);
			while (len > 0) {
				RegC(interp, *iPtr->regparse++);
				len--;
			}
			RegC(interp, '\0');
		}
		break;
	}

	return(ret);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movl $0x0, (%rax)
movq -0x20(%rbp), %rcx
movq 0x298(%rcx), %rax
movq %rax, %rdx
incq %rdx
movq %rdx, 0x298(%rcx)
movsbl (%rax), %eax
movl %eax, -0x40(%rbp)
testl %eax, %eax
je 0x5b75
jmp 0x580a
movl -0x40(%rbp), %eax
subl $0x24, %eax
je 0x58a7
jmp 0x5818
movl -0x40(%rbp), %eax
subl $0x28, %eax
je 0x5b38
jmp 0x5826
movl -0x40(%rbp), %eax
subl $0x29, %eax
je 0x5b75
jmp 0x5834
movl -0x40(%rbp), %eax
addl $-0x2a, %eax
subl $0x2, %eax
jb 0x5b94
jmp 0x5845
movl -0x40(%rbp), %eax
subl $0x2e, %eax
je 0x58be
jmp 0x584f
movl -0x40(%rbp), %eax
subl $0x3f, %eax
je 0x5b94
jmp 0x585d
movl -0x40(%rbp), %eax
subl $0x5b, %eax
je 0x58e0
jmp 0x5867
movl -0x40(%rbp), %eax
subl $0x5c, %eax
je 0x5bb3
jmp 0x5875
movl -0x40(%rbp), %eax
subl $0x5e, %eax
je 0x5890
jmp 0x587f
movl -0x40(%rbp), %eax
subl $0x7c, %eax
je 0x5b75
jmp 0x5c37
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
jmp 0x5d3a
movq -0x10(%rbp), %rdi
movl $0x2, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
jmp 0x5d3a
movq -0x10(%rbp), %rdi
movl $0x3, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movl (%rax), %ecx
orl $0x3, %ecx
movl %ecx, (%rax)
jmp 0x5d3a
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5e, %eax
jne 0x591d
movq -0x10(%rbp), %rdi
movl $0x5, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x298(%rax)
jmp 0x592f
movq -0x10(%rbp), %rdi
movl $0x4, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5d, %eax
je 0x5955
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x597a
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq 0x298(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x298(%rcx)
movsbl (%rax), %esi
callq 0x4a30
jmp 0x597c
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x41(%rbp)
je 0x59ab
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5d, %eax
setne %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x59b7
jmp 0x5ad5
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x5aab
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x298(%rax)
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5d, %eax
je 0x5a0a
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x5a1d
movq -0x10(%rbp), %rdi
movl $0x2d, %esi
callq 0x4a30
jmp 0x5aa9
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movzbl -0x2(%rax), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movzbl (%rax), %eax
movl %eax, -0x34(%rbp)
movl -0x30(%rbp), %eax
movl -0x34(%rbp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jle 0x5a6f
jmp 0x5a52
movq -0x10(%rbp), %rdi
leaq 0x176fc(%rip), %rsi     # 0x1d159
callq 0x4200
movq $0x0, -0x8(%rbp)
jmp 0x5d42
jmp 0x5a71
movl -0x30(%rbp), %eax
cmpl -0x34(%rbp), %eax
jg 0x5a93
movq -0x10(%rbp), %rdi
movl -0x30(%rbp), %eax
movsbl %al, %esi
callq 0x4a30
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x5a71
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x298(%rax)
jmp 0x5ad0
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq 0x298(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x298(%rcx)
movsbl (%rax), %esi
callq 0x4a30
jmp 0x597c
movq -0x10(%rbp), %rdi
xorl %esi, %esi
callq 0x4a30
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x5d, %eax
je 0x5b12
jmp 0x5af5
movq -0x10(%rbp), %rdi
leaq 0x1766a(%rip), %rsi     # 0x1d16a
callq 0x4200
movq $0x0, -0x8(%rbp)
jmp 0x5d42
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x298(%rax)
movq -0x18(%rbp), %rax
movl (%rax), %ecx
orl $0x3, %ecx
movl %ecx, (%rax)
jmp 0x5d3a
movq -0x10(%rbp), %rdi
movl $0x1, %esi
leaq -0x2c(%rbp), %rdx
callq 0x4aa0
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x5b62
movq $0x0, -0x8(%rbp)
jmp 0x5d42
movl -0x2c(%rbp), %ecx
andl $0x5, %ecx
movq -0x18(%rbp), %rax
orl (%rax), %ecx
movl %ecx, (%rax)
jmp 0x5d3a
jmp 0x5b77
movq -0x10(%rbp), %rdi
leaq 0x175f5(%rip), %rsi     # 0x1d177
callq 0x4200
movq $0x0, -0x8(%rbp)
jmp 0x5d42
jmp 0x5b96
movq -0x10(%rbp), %rdi
leaq 0x175e3(%rip), %rsi     # 0x1d184
callq 0x4200
movq $0x0, -0x8(%rbp)
jmp 0x5d42
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x5be5
jmp 0x5bc8
movq -0x10(%rbp), %rdi
leaq 0x175c5(%rip), %rsi     # 0x1d198
callq 0x4200
movq $0x0, -0x8(%rbp)
jmp 0x5d42
movq -0x10(%rbp), %rdi
movl $0x8, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq 0x298(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x298(%rcx)
movsbl (%rax), %esi
callq 0x4a30
movq -0x10(%rbp), %rdi
xorl %esi, %esi
callq 0x4a30
movq -0x18(%rbp), %rax
movl (%rax), %ecx
orl $0x3, %ecx
movl %ecx, (%rax)
jmp 0x5d3a
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x298(%rax)
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rdi
leaq 0x17544(%rip), %rsi     # 0x1d1a3
callq 0x42c0
movl %eax, -0x38(%rbp)
cmpl $0x0, -0x38(%rbp)
jg 0x5c8c
jmp 0x5c6f
movq -0x10(%rbp), %rdi
leaq 0x17535(%rip), %rsi     # 0x1d1af
callq 0x4200
movq $0x0, -0x8(%rbp)
jmp 0x5d42
movq -0x20(%rbp), %rax
movq 0x298(%rax), %rax
movslq -0x38(%rbp), %rcx
movb (%rax,%rcx), %al
movb %al, -0x39(%rbp)
cmpl $0x1, -0x38(%rbp)
jle 0x5ccb
movsbl -0x39(%rbp), %eax
cmpl $0x2a, %eax
je 0x5cc2
movsbl -0x39(%rbp), %eax
cmpl $0x2b, %eax
je 0x5cc2
movsbl -0x39(%rbp), %eax
cmpl $0x3f, %eax
jne 0x5ccb
movl -0x38(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movl (%rax), %ecx
orl $0x1, %ecx
movl %ecx, (%rax)
cmpl $0x1, -0x38(%rbp)
jne 0x5ce7
movq -0x18(%rbp), %rax
movl (%rax), %ecx
orl $0x2, %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rdi
movl $0x8, %esi
callq 0x50f0
movq %rax, -0x28(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x5d2f
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rcx
movq 0x298(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x298(%rcx)
movsbl (%rax), %esi
callq 0x4a30
movl -0x38(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x5cf9
movq -0x10(%rbp), %rdi
xorl %esi, %esi
callq 0x4a30
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)