// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq $0x0, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0x54b0
movl $0x16, %edi
leaq 0x6b0b(%rip), %rsi      # 0xbfad
leaq 0x5e7d(%rip), %rdx      # 0xb326
movb $0x0, %al
callq 0x5fa0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movsbl (%rax), %edi
callq 0x4430
cmpl $0x0, %eax
jne 0x5542
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5f, %eax
je 0x5542
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x48(%rbp)
leaq 0x5e3e(%rip), %rsi      # 0xb332
callq 0x4180
jmp 0x54fb
movq -0x48(%rbp), %rdi
movq 0xaae2(%rip), %rsi      # 0xffe8
movq 0xaaa3(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x48(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
jmp 0x586c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x586c
leaq -0x20(%rbp), %rdi
callq 0x5af0
movq %rax, -0x50(%rbp)
jmp 0x5551
movq -0x50(%rbp), %rax
movq %rax, -0x10(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x5bc0
jmp 0x5564
movq -0x20(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x20(%rbp)
movsbl (%rax), %eax
cmpl $0x3d, %eax
je 0x55d3
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x58(%rbp)
leaq 0x5db9(%rip), %rsi      # 0xb34f
callq 0x4180
jmp 0x559d
movq -0x58(%rbp), %rdi
movq 0xaa40(%rip), %rsi      # 0xffe8
movq 0xaa01(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x58(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
jmp 0x586c
leaq -0x20(%rbp), %rdi
callq 0x5bc0
jmp 0x55de
movq -0x20(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x20(%rbp)
movsbl (%rax), %eax
cmpl $0x22, %eax
je 0x564d
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x60(%rbp)
leaq 0x5d5c(%rip), %rsi      # 0xb36c
callq 0x4180
jmp 0x5617
movq -0x60(%rbp), %rdi
movq 0xa9c6(%rip), %rsi      # 0xffe8
movq 0xa987(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x60(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
jmp 0x586c
leaq -0x20(%rbp), %rdi
callq 0x5c00
movq %rax, -0x68(%rbp)
jmp 0x565c
movq -0x68(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
jne 0x56c2
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x70(%rbp)
leaq 0x5cfa(%rip), %rsi      # 0xb37f
callq 0x4180
jmp 0x568c
movq -0x70(%rbp), %rdi
movq 0xa951(%rip), %rsi      # 0xffe8
movq 0xa912(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x70(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
jmp 0x586c
jmp 0x56c4
leaq -0x20(%rbp), %rdi
callq 0x5bc0
jmp 0x56cf
movq -0x20(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x20(%rbp)
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0x573e
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x78(%rbp)
leaq 0x5c94(%rip), %rsi      # 0xb395
callq 0x4180
jmp 0x5708
movq -0x78(%rbp), %rdi
movq 0xa8d5(%rip), %rsi      # 0xffe8
movq 0xa896(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x78(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
jmp 0x586c
leaq -0x20(%rbp), %rdi
callq 0x5bc0
jmp 0x5749
movq -0x20(%rbp), %rax
cmpb $0x0, (%rax)
je 0x57b6
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
je 0x57b6
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x80(%rbp)
leaq 0x5c30(%rip), %rsi      # 0xb3a9
callq 0x4180
jmp 0x5780
movq -0x80(%rbp), %rdi
movq 0xa85d(%rip), %rsi      # 0xffe8
movq 0xa81e(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x80(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
jmp 0x586c
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x10(%rbp), %rdi
callq *%rax
movb %al, -0x81(%rbp)
jmp 0x57cc
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0x57dd
jmp 0x57d8
jmp 0x5a1b
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq *%rax
movl %eax, -0x88(%rbp)
jmp 0x57f7
callq 0x4050
movq %rax, %rcx
movl -0x88(%rbp), %eax
movl %eax, (%rcx)
cmpl $0x0, %eax
je 0x5a19
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x90(%rbp)
leaq 0x5ba0(%rip), %rsi      # 0xb3ce
callq 0x4180
jmp 0x5835
movq -0x90(%rbp), %rdi
movq 0xa7a5(%rip), %rsi      # 0xffe8
movq 0xa766(%rip), %rdx      # 0xffb0
callq 0x4740
jmp 0x5aeb
movq -0x90(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x42e0
movl -0x2c(%rbp), %eax
movl %eax, -0x94(%rbp)
movl $0x3, %ecx
cmpl %ecx, %eax
jne 0x58f3
movq -0x28(%rbp), %rdi
callq 0x4190
movq %rax, -0x40(%rbp)
movq 0xa74e(%rip), %rdi      # 0xffe0
leaq 0x5bab(%rip), %rsi      # 0xb444
callq 0x43f0
movq %rax, -0xa0(%rbp)
jmp 0x58a7
movq -0x40(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x43f0
movq %rax, -0xa8(%rbp)
jmp 0x58cc
movq -0xa8(%rbp), %rdi
movl $0xa, %esi
callq 0x44e0
jmp 0x58df
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5d20
jmp 0x58ee
callq 0x4220
movl -0x94(%rbp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0x59e7
movq -0x28(%rbp), %rdi
callq 0x4190
movq %rax, -0x38(%rbp)
movq 0xa6c6(%rip), %rdi      # 0xffe0
movl $0x9, %esi
callq 0x44e0
movq %rax, -0xb0(%rbp)
jmp 0x592d
movq -0xb0(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x43f0
movq %rax, -0xb8(%rbp)
jmp 0x594a
movq -0xb8(%rbp), %rdi
movl $0xa, %esi
callq 0x44e0
jmp 0x595d
movq -0x38(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq %rax, %rdi
leaq 0x5a5a(%rip), %rsi      # 0xb3ce
callq 0x5d70
movb %al, -0xb9(%rbp)
jmp 0x5981
movb -0xb9(%rbp), %al
testb $0x1, %al
jne 0x5990
jmp 0x5a4d
callq 0x4050
movl (%rax), %eax
movl %eax, -0xd4(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0xd0(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0xc8(%rbp)
callq 0x4050
movl -0xd4(%rbp), %edi
movq -0xd0(%rbp), %rdx
movq -0xc8(%rbp), %rcx
movl (%rax), %r8d
leaq 0x5a31(%rip), %rsi      # 0xb40a
xorl %eax, %eax
callq 0x6300
jmp 0x59e2
jmp 0x5a99
movq -0x28(%rbp), %rdi
callq 0x4190
movq 0xa5e9(%rip), %rdi      # 0xffe0
leaq 0x59de(%rip), %rsi      # 0xb3dc
callq 0x43f0
jmp 0x5a05
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5d20
jmp 0x5a14
callq 0x4220
jmp 0x5a1b
jmp 0x5a1d
jmp 0x5ac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x4710
jmp 0x5a35
jmp 0x5ada
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x4710
jmp 0x5aad
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0xe8(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0xe0(%rbp)
movq -0x38(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq -0xe8(%rbp), %rdx
movq -0xe0(%rbp), %rcx
movq %rax, %r8
leaq 0x59a7(%rip), %rsi      # 0xb432
xorl %edi, %edi
movb %dil, %al
callq 0x6300
jmp 0x5a97
jmp 0x5a99
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5d20
jmp 0x5aa8
callq 0x4220
jmp 0x5ada
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
callq 0x4710
jmp 0x5ac2
jmp 0x5ada
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5d20
addq $0xf0, %rsp
popq %rbp
retq
movq -0x28(%rbp), %rdi
callq 0x4770
movq %rax, %rdi
callq 0x5ee0
nopl (%rax,%rax)