// File: /workspace/github_c_makefile_star2_O1/uhlin[P]enhanced-duc/source/interpreter.cpp
// Function: Interpreter
void
Interpreter(const struct Interpreter_in *in)
{
	char	*id = nullptr;
	char	*arg = nullptr;

	if (in == nullptr)
		fatal(EINVAL, "%s", __func__);

	try {
		const char *cp = addrof(in->line[0]);

		if (!isalnum(*cp) && *cp != '_')
			throw std::runtime_error("unexpected leading "
			    "character");
		id = copy_identifier(cp);
		eatwhite(&cp);
		if (*cp++ != '=') {
			throw std::runtime_error("expected assignment "
			    "operator");
		}

		eatwhite(&cp);
		if (*cp++ != ArgBegin)
			throw std::runtime_error("expected arg begin");
		else if ((arg = copy_argument(cp)) == nullptr)
			throw std::runtime_error("unterminated argument");

		eatwhite(&cp);
		if (*cp++ != ';')
			throw std::runtime_error("no line terminator!");

		eatwhite(&cp);
		if (*cp && *cp != CommentChar) {
			throw std::runtime_error("implicit data after "
			    "line terminator!");
		} else if (!(in->validator_func(id))) {
#if IGNORE_UNRECOGNIZED_IDENTIFIERS
			/* ignore */;
#else
			throw std::runtime_error("no such identifier");
#endif
		} else if ((errno = in->install_func(id, arg)) != 0) {
			throw std::runtime_error("install error");
		}
	} catch (const std::bad_alloc &e) {
		std::cerr << "out of memory: " << e.what() << '\n';
		clean_up(id, arg);
		abort();
	} catch (const std::runtime_error &e) {
		std::cerr << '\t' << in->line << '\n';

		if (strings_match(e.what(), "install error")) {
			log_warn(errno, "%s:%ld: error: "
			    "install_func returned %d", in->path, in->line_num,
			    errno);
		} else {
			log_warn(0, "%s:%ld: error: %s", in->path, in->line_num,
			    e.what());
		}

		clean_up(id, arg);
		abort();
	} catch (...) {
		std::cerr << "unknown exception  --  should not be reached\n";
		clean_up(id, arg);
		abort();
	}

	clean_up(id, arg);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x5185
movq %rdi, %r14
movq 0x8(%rdi), %r12
movsbl (%r12), %ebx
movl %ebx, %edi
callq 0x4440
cmpl $0x5f, %ebx
je 0x4f9c
testl %eax, %eax
je 0x519f
xorl %r15d, %r15d
movl $0x41, %edi
xorl %ebx, %ebx
callq 0x4030
movq %rax, %rbx
movl $0x40, %r13d
xorl %r15d, %r15d
movb (%r12,%r15), %bpl
movsbl %bpl, %edi
callq 0x4440
testl %eax, %eax
je 0x4fd0
cmpq $0x2, %r13
jae 0x4fdc
jmp 0x4fe8
cmpb $0x5f, %bpl
jne 0x4fe8
cmpq $0x1, %r13
jbe 0x4fe8
movb %bpl, (%rbx,%r15)
decq %r13
incq %r15
jmp 0x4fb7
movb $0x0, (%rbx,%r15)
cmpq $0x3f, %r15
je 0x51d6
addq %r15, %r12
movsbl (%r12), %edi
callq 0x4080
testl %eax, %eax
je 0x5013
movsbl 0x1(%r12), %edi
incq %r12
jmp 0x4fff
cmpb $0x3d, (%r12)
jne 0x51f5
movsbl 0x1(%r12), %edi
incq %r12
callq 0x4080
testl %eax, %eax
jne 0x501e
cmpb $0x22, (%r12)
jne 0x5213
xorl %r15d, %r15d
movl $0x201, %edi            # imm = 0x201
callq 0x4030
leaq 0x1(%r12), %r13
movb (%r13), %sil
testb %sil, %sil
sete %dl
movl $0x200, %ecx            # imm = 0x200
je 0x5069
cmpb $0x22, %sil
jne 0x506e
movq %rax, %rdi
jmp 0x50b5
movq %rax, %rdi
jmp 0x50cd
movl $0x1ff, %ecx            # imm = 0x1FF
xorl %esi, %esi
movb 0x1(%r12,%rsi), %dl
movb %dl, (%rax,%rsi)
movb 0x2(%r12,%rsi), %dil
testb %dil, %dil
sete %r8b
cmpq $0x2, %rcx
setb %dl
orb %r8b, %dl
cmpb $0x1, %dl
je 0x50be
incq %rsi
decq %rcx
cmpb $0x22, %dil
jne 0x5075
addq %rsi, %r12
movl $0x200, %ecx            # imm = 0x200
subq %rsi, %rcx
movq %rax, %rdi
addq %rsi, %rdi
addq $0x2, %r12
movq %r12, %r13
jmp 0x50cd
leaq (%r12,%rsi), %r13
addq $0x2, %r13
leaq (%rax,%rsi), %rdi
incq %rdi
movb $0x0, (%rdi)
testb %dl, %dl
je 0x50de
cmpq $0x1, %rcx
je 0x5231
testb %dl, %dl
je 0x50ef
movq %rax, %rdi
callq 0x45b0
xorl %r15d, %r15d
jmp 0x50f2
movq %rax, %r15
testq %r15, %r15
je 0x524e
movsbl (%r13), %edi
callq 0x4080
testl %eax, %eax
je 0x5113
movsbl 0x1(%r13), %edi
incq %r13
jmp 0x5100
cmpb $0x3b, (%r13)
jne 0x5283
movsbl 0x1(%r13), %edi
incq %r13
callq 0x4080
testl %eax, %eax
jne 0x511e
movzbl (%r13), %eax
testl %eax, %eax
je 0x5141
cmpl $0x23, %eax
jne 0x52a1
movq %rbx, %rdi
callq *0x18(%r14)
testb %al, %al
je 0x5167
movq %rbx, %rdi
movq %r15, %rsi
callq *0x20(%r14)
movl %eax, %ebp
callq 0x4050
movl %ebp, (%rax)
testl %ebp, %ebp
jne 0x52bf
movq %rbx, %rdi
callq 0x45b0
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x45b0
leaq 0x4ca1(%rip), %rsi      # 0x9e2d
leaq 0x4113(%rip), %rdx      # 0x92a6
movl $0x16, %edi
xorl %eax, %eax
callq 0x563c
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x40ff(%rip), %rsi      # 0x92b2
movq %rax, %rdi
callq 0x4190
xorl %r15d, %r15d
movq 0x8e23(%rip), %rsi      # 0xdfe8
movq 0x8de4(%rip), %rdx      # 0xdfb0
xorl %ebx, %ebx
movq %rbp, %rdi
callq 0x4760
xorl %r15d, %r15d
leaq 0x41f4(%rip), %rsi      # 0x93d4
leaq 0x420d(%rip), %rdx      # 0x93f4
xorl %ebx, %ebx
movl $0x4b, %edi
xorl %eax, %eax
callq 0x563c
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x40c6(%rip), %rsi      # 0x92cf
movq %rax, %rdi
callq 0x4190
jmp 0x526a
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x40c5(%rip), %rsi      # 0x92ec
movq %rax, %rdi
callq 0x4190
jmp 0x526a
xorl %r15d, %r15d
leaq 0x4199(%rip), %rsi      # 0x93d4
leaq 0x41c2(%rip), %rdx      # 0x9404
movl $0x4b, %edi
xorl %eax, %eax
callq 0x563c
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x409d(%rip), %rsi      # 0x92ff
movq %rax, %rdi
callq 0x4190
xorl %r15d, %r15d
movq 0x8d74(%rip), %rsi      # 0xdfe8
movq 0x8d35(%rip), %rdx      # 0xdfb0
movq %rbp, %rdi
callq 0x4760
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x407e(%rip), %rsi      # 0x9315
movq %rax, %rdi
callq 0x4190
jmp 0x52db
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x4074(%rip), %rsi      # 0x9329
movq %rax, %rdi
callq 0x4190
jmp 0x52db
movl $0x10, %edi
callq 0x41f0
movq %rax, %rbp
leaq 0x407b(%rip), %rsi      # 0x934e
movq %rax, %rdi
callq 0x4190
movq 0x8d06(%rip), %rsi      # 0xdfe8
movq 0x8cc7(%rip), %rdx      # 0xdfb0
movq %rbp, %rdi
callq 0x4760
jmp 0x52f7
jmp 0x52f7
jmp 0x5333
movq %rdx, %r12
movq %rax, %r13
movq %rbp, %rdi
callq 0x42f0
jmp 0x5339
jmp 0x530b
jmp 0x530b
movq %rdx, %r12
movq %rax, %r13
movq %rbp, %rdi
callq 0x42f0
xorl %r15d, %r15d
jmp 0x5339
movq %rdx, %r12
movq %rax, %r13
movq %rbp, %rdi
callq 0x42f0
xorl %r15d, %r15d
xorl %ebx, %ebx
jmp 0x5339
movq %rdx, %r12
movq %rax, %r13
movq %r13, %rdi
cmpl $0x3, %r12d
jne 0x538c
callq 0x41a0
movq %rax, %r14
movq 0x8c8f(%rip), %rdi      # 0xdfe0
leaq 0x406c(%rip), %rsi      # 0x93c4
movl $0xf, %edx
callq 0x4500
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
movq 0x8c6e(%rip), %rdi      # 0xdfe0
movq %rax, %rsi
callq 0x4400
movq %rax, %rdi
movl $0xa, %esi
callq 0x4510
jmp 0x5425
callq 0x41a0
cmpl $0x2, %r12d
jne 0x5412
movq %rax, %r13
leaq 0x6(%rsp), %rsi
movb $0x9, (%rsi)
movq 0x8c37(%rip), %rdi      # 0xdfe0
movl $0x1, %edx
callq 0x4500
movq 0x8(%r14), %rsi
movq %rax, %rdi
callq 0x4400
leaq 0x7(%rsp), %rsi
movb $0xa, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x4500
movq (%r13), %rax
movq %r13, %rdi
callq *0x10(%rax)
leaq 0x3f69(%rip), %rsi      # 0x934e
movq %rax, %rdi
callq 0x4640
testl %eax, %eax
jne 0x5435
callq 0x4050
movl (%rax), %edi
movq (%r14), %rdx
movq 0x10(%r14), %rcx
leaq 0x3f84(%rip), %rsi      # 0x938a
movl %edi, %r8d
xorl %eax, %eax
callq 0x591f
jmp 0x5425
movq 0x8bc7(%rip), %rdi      # 0xdfe0
leaq 0x3f3c(%rip), %rsi      # 0x935c
callq 0x4400
movq %rbx, %rdi
movq %r15, %rsi
callq 0x548d
callq 0x4230
movq (%r14), %r12
movq 0x10(%r14), %r14
movq (%r13), %rax
movq %r13, %rdi
callq *0x10(%rax)
leaq 0x3f65(%rip), %rsi      # 0x93b2
xorl %edi, %edi
movq %r12, %rdx
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x591f
jmp 0x5425
movq %rax, %rbx
callq 0x4730
jmp 0x547d
movq %rax, %rbx
callq 0x4730
jmp 0x547d
movq %rax, %rbx
callq 0x4730
movq %rbx, %rdi
callq 0x4790
movq %rax, %rdi
callq 0x55a0