// File: /workspace/github_cpp_makefile_star2_O3/CobaltXII[P]cxcc/./semantic/semantic_analyzer.hpp
// Function: semantic_analyzer_t::expand_literal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, expression_t*)
std::string expand_literal(std::string literal, expression_t* expression) {
		std::string expanded;
		bool escaped = false;
		for (int i = 0; i < literal.size(); i++) {
			if (literal[i] == '\\') {
				escaped = true;
			} else {
				if (escaped) {
					if (literal[i] == 'a') {
						expanded += '\a';
					} else if (literal[i] == 'b') {
						expanded += '\b';
					} else if (literal[i] == 'f') {
						expanded += '\f';
					} else if (literal[i] == 'n') {
						expanded += '\n';
					} else if (literal[i] == 'r') {
						expanded += '\r';
					} else if (literal[i] == 't') {
						expanded += '\t';
					} else if (literal[i] == 'v') {
						expanded += '\v';
					} else if (literal[i] == '0') {
						expanded += '\0';
					} else if (literal[i] == 'x') {
						// Parse hexadecimal character literal.
						if (++i >= literal.size()) {
							die("\\x used with no following hex digits", expression->lineno, expression->colno + i);
						}
						std::string hex;
						while (i < literal.size() && char_is_hex(literal[i])) {
							hex += literal[i++];
						}
						i--;
						expanded += std::stoul(hex, nullptr, 16);
					} else if (literal[i] == '\\') {
						expanded += '\\';
					} else if (literal[i] == '\'') {
						expanded += '\'';
					} else if (literal[i] == '"') {
						expanded += '"';
					} else {
						die("unknown escape sequence", expression->lineno, expression->colno + i - 2);
					}
					escaped = false;
				} else {
					expanded += literal[i];
				}
			}
		}
		return expanded;
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movq %rcx, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq %rdi, %rbx
leaq 0x10(%rdi), %rax
movq %rax, 0x10(%rsp)
movq %rax, (%rdi)
movq $0x0, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
movq 0x8(%rdx), %rcx
testq %rcx, %rcx
je 0x14680
movq %rdx, %r15
xorl %r12d, %r12d
leaq 0x4da4(%rip), %rbp      # 0x191f4
xorl %r14d, %r14d
xorl %r13d, %r13d
movl %r13d, %edx
movq (%r15), %rax
movzbl (%rax,%r12), %eax
cmpl $0x5c, %eax
sete %r13b
je 0x1466d
testb $0x1, %dl
je 0x14662
cmpl $0x61, %eax
jle 0x14495
leal -0x6e(%rax), %edx
cmpl $0xa, %edx
ja 0x144c0
movslq (%rbp,%rdx,4), %rax
addq %rbp, %rax
jmpq *%rax
movb $0xa, %al
jmp 0x14662
cmpl $0x2f, %eax
jg 0x144ae
cmpl $0x22, %eax
je 0x14662
cmpl $0x27, %eax
je 0x14662
jmp 0x144dc
cmpl $0x30, %eax
je 0x144d5
cmpl $0x61, %eax
movb $0x7, %al
je 0x14662
jmp 0x144dc
cmpl $0x66, %eax
je 0x14660
cmpl $0x62, %eax
jne 0x144dc
movb $0x8, %al
jmp 0x14662
xorl %eax, %eax
jmp 0x14662
movq %rbx, 0x8(%rsp)
movq %rbp, %rbx
leaq 0x78(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0x68(%rsp), %rbp
movq %rbp, %rdi
leaq 0x5767(%rip), %rsi      # 0x19c64
leaq 0x5777(%rip), %rdx      # 0x19c7b
callq 0x8faa
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rax
leaq (%r12,%rax), %rcx
addq $-0x2, %rcx
movq 0x18(%rsp), %rdi
movq %rbp, %rsi
callq 0x10df6
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
movq %rbx, %rbp
je 0x1454a
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x3280
movq 0x8(%rsp), %rbx
jmp 0x1466d
leal 0x1(%r14), %eax
movslq %eax, %r12
cmpq %r12, %rcx
ja 0x145bd
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x48(%rsp), %rdi
leaq 0x56c9(%rip), %rsi      # 0x19c3f
leaq 0x56e6(%rip), %rdx      # 0x19c63
callq 0x8faa
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rcx
addq %r12, %rcx
movq 0x18(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x10df6
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x145bd
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x3280
leaq 0x38(%rsp), %rax
movq %rax, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
cmpq %r12, 0x8(%r15)
jbe 0x1461a
movq (%r15), %rax
movzbl (%rax,%r12), %eax
movl %eax, %ecx
addl $-0x41, %ecx
cmpl $0x25, %ecx
ja 0x14612
movabsq $0x3f0000003f, %rdx     # imm = 0x3F0000003F
btq %rcx, %rdx
jae 0x14612
incq %r12
incl %r14d
movsbl %al, %esi
leaq 0x28(%rsp), %rdi
callq 0x31f0
jmp 0x145d5
leal -0x30(%rax), %ecx
cmpb $0x9, %cl
jbe 0x145fd
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x14727
movsbl %al, %esi
movq %rbx, %rdi
callq 0x31f0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x1466d
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x3280
jmp 0x1466d
movb $0xb, %al
jmp 0x14662
movb $0x9, %al
jmp 0x14662
movb $0xd, %al
jmp 0x14662
movb $0xc, %al
movsbl %al, %esi
movq %rbx, %rdi
callq 0x31f0
incl %r14d
movslq %r14d, %r12
movq 0x8(%r15), %rcx
cmpq %r12, %rcx
ja 0x14456
movq %rbx, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, 0x8(%rsp)
movq %rax, %r14
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x14700
movq 0x58(%rsp), %rsi
jmp 0x146f8
jmp 0x146d2
movq %rax, %r14
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x14700
movq 0x78(%rsp), %rsi
jmp 0x146f8
jmp 0x146d7
jmp 0x146dc
movq %rbx, 0x8(%rsp)
movq %rax, %r14
jmp 0x14700
movq %rbx, 0x8(%rsp)
movq %rax, %r14
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x14700
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x3280
movq 0x8(%rsp), %rax
movq (%rax), %rdi
cmpq 0x10(%rsp), %rdi
je 0x1471f
movq 0x10(%rsp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x3280
movq %r14, %rdi
callq 0x33b0