// File: /workspace/github_cpp_makefile_star2_O1/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 $0x78, %rsp
movq %rcx, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movq %rdi, %rbx
leaq 0x10(%rdi), %rax
movq %rax, (%rsp)
movq %rax, (%rdi)
movq $0x0, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
movq 0x8(%rdx), %rcx
testq %rcx, %rcx
je 0x14c55
movq %rdx, %r15
xorl %r13d, %r13d
leaq 0x18(%rsp), %rbp
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%r15), %rax
movzbl (%rax,%r13), %eax
cmpl $0x5c, %eax
jne 0x14a45
movb $0x1, %r12b
jmp 0x14c42
testb $0x1, %r12b
je 0x14a6f
cmpl $0x61, %eax
jle 0x14a7f
leal -0x6e(%rax), %edx
cmpl $0xa, %edx
ja 0x14aaa
leaq 0x4765(%rip), %rsi      # 0x191c4
movslq (%rsi,%rdx,4), %rax
addq %rsi, %rax
jmpq *%rax
movb $0xa, %al
jmp 0x14c34
movsbl %al, %esi
movq %rbx, %rdi
callq 0x31f0
jmp 0x14c42
cmpl $0x2f, %eax
jg 0x14a98
cmpl $0x22, %eax
je 0x14c34
cmpl $0x27, %eax
je 0x14c34
jmp 0x14ac6
cmpl $0x30, %eax
je 0x14abf
cmpl $0x61, %eax
movb $0x7, %al
je 0x14c34
jmp 0x14ac6
cmpl $0x66, %eax
je 0x14c32
cmpl $0x62, %eax
jne 0x14ac6
movb $0x8, %al
jmp 0x14c34
xorl %eax, %eax
jmp 0x14c34
leaq 0x68(%rsp), %rax
movq %rax, 0x58(%rsp)
leaq 0x58(%rsp), %r12
movq %r12, %rdi
leaq 0x5155(%rip), %rsi      # 0x19c34
leaq 0x5165(%rip), %rdx      # 0x19c4b
callq 0x9052
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rax
leaq (%rax,%r13), %rcx
addq $-0x2, %rcx
movq 0x8(%rsp), %rdi
movq %r12, %rsi
callq 0x11372
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x14c3f
movq 0x68(%rsp), %rsi
jmp 0x14c1c
leal 0x1(%r14), %eax
movslq %eax, %r13
cmpq %r13, %rcx
movabsq $0x3f0000003f, %r12     # imm = 0x3F0000003F
ja 0x14b9d
leaq 0x48(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x38(%rsp), %rdi
leaq 0x50b9(%rip), %rsi      # 0x19c0f
leaq 0x50d6(%rip), %rdx      # 0x19c33
callq 0x9052
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rcx
addq %r13, %rcx
movq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x11372
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x14b9d
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x3280
leaq 0x28(%rsp), %rax
movq %rax, 0x18(%rsp)
movq $0x0, 0x20(%rsp)
movb $0x0, 0x28(%rsp)
cmpq %r13, 0x8(%r15)
jbe 0x14bee
movq (%r15), %rax
movzbl (%rax,%r13), %eax
movl %eax, %ecx
addl $-0x41, %ecx
cmpl $0x25, %ecx
ja 0x14be6
btq %rcx, %r12
jae 0x14be6
incq %r13
incl %r14d
movsbl %al, %esi
movq %rbp, %rdi
callq 0x31f0
jmp 0x14bb5
leal -0x30(%rax), %ecx
cmpb $0x9, %cl
jbe 0x14bd3
movq %rbp, %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x14ce3
movsbl %al, %esi
movq %rbx, %rdi
callq 0x31f0
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x14c3f
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3280
jmp 0x14c3f
movb $0xb, %al
jmp 0x14c34
movb $0x9, %al
jmp 0x14c34
movb $0xd, %al
jmp 0x14c34
movb $0xc, %al
movsbl %al, %esi
movq %rbx, %rdi
callq 0x31f0
xorl %r12d, %r12d
incl %r14d
movslq %r14d, %r13
movq 0x8(%r15), %rcx
cmpq %r13, %rcx
ja 0x14a30
movq %rbx, %rax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x14cc3
movq 0x48(%rsp), %rsi
jmp 0x14cbb
jmp 0x14c9f
movq %rax, %r14
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x14cc3
movq 0x68(%rsp), %rsi
jmp 0x14cbb
jmp 0x14c9f
jmp 0x14ca4
movq %rax, %r14
jmp 0x14cc3
movq %rax, %r14
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x14cc3
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3280
movq (%rbx), %rdi
cmpq (%rsp), %rdi
je 0x14cdb
movq (%rsp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x3280
movq %r14, %rdi
callq 0x33b0