// File: /workspace/github_cpp_makefile_star2_O2/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 %rdx, %r15
movq %rsi, 0x8(%rsp)
movq %rdi, %rbx
leaq 0x10(%rdi), %rax
movq %rax, (%rdi)
andq $0x0, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
xorl %r14d, %r14d
leaq 0x18(%rsp), %r13
xorl %ebp, %ebp
movslq %ebp, %r12
movq 0x8(%r15), %rcx
cmpq %r12, %rcx
jbe 0xd048
movl %r14d, %edx
movq (%r15), %rax
movzbl (%rax,%r12), %eax
cmpl $0x5c, %eax
sete %r14b
je 0xd041
testb $0x1, %dl
je 0xd036
leal -0x6e(%rax), %edx
cmpl $0xa, %edx
jbe 0xcefc
cmpl $0x22, %eax
je 0xd036
cmpl $0x27, %eax
je 0xd036
cmpl $0x30, %eax
je 0xd02c
cmpl $0x61, %eax
je 0xd030
cmpl $0x66, %eax
je 0xd034
cmpl $0x62, %eax
jne 0xcf13
movb $0x8, %al
jmp 0xd036
leaq 0x32a9(%rip), %rsi      # 0x101ac
movslq (%rsi,%rdx,4), %rax
addq %rsi, %rax
jmpq *%rax
movb $0xa, %al
jmp 0xd036
movq %r13, %rdx
leaq 0x58(%rsp), %rdi
leaq 0x3d8a(%rip), %rsi      # 0x10cac
callq 0x3a1e
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rax
leaq (%r12,%rax), %rcx
addq $-0x2, %rcx
movq 0x8(%rsp), %rdi
leaq 0x58(%rsp), %r12
movq %r12, %rsi
callq 0xaca2
movq %r12, %rdi
jmp 0xd025
movb $0xd, %al
jmp 0xd036
movb $0xb, %al
jmp 0xd036
movb $0x9, %al
jmp 0xd036
leal 0x1(%rbp), %eax
movslq %eax, %r12
cmpq %r12, %rcx
ja 0xcfb3
leaq 0x38(%rsp), %rdi
leaq 0x3d05(%rip), %rsi      # 0x10c87
movq %r13, %rdx
callq 0x3a1e
movq 0x10(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rcx
addq %r12, %rcx
movq 0x8(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xaca2
leaq 0x38(%rsp), %rdi
callq 0x2100
leaq 0x28(%rsp), %rax
movq %rax, 0x18(%rsp)
andq $0x0, 0x20(%rsp)
movb $0x0, 0x28(%rsp)
cmpq %r12, 0x8(%r15)
jbe 0xd00a
movq (%r15), %rax
movzbl (%rax,%r12), %eax
movl %eax, %ecx
addl $-0x41, %ecx
cmpl $0x25, %ecx
ja 0xd002
movabsq $0x3f0000003f, %rdx     # imm = 0x3F0000003F
btq %rcx, %rdx
jae 0xd002
incq %r12
incl %ebp
movsbl %al, %esi
movq %r13, %rdi
callq 0x21d0
jmp 0xcfc8
leal -0x30(%rax), %ecx
cmpb $0x9, %cl
jbe 0xcff0
movq %r13, %rdi
xorl %esi, %esi
pushq $0x10
popq %rdx
callq 0xd0f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x21d0
movq %r13, %rdi
callq 0x2100
jmp 0xd041
xorl %eax, %eax
jmp 0xd036
movb $0x7, %al
jmp 0xd036
movb $0xc, %al
movsbl %al, %esi
movq %rbx, %rdi
callq 0x21d0
incl %ebp
jmp 0xce8a
movq %rbx, %rax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq 0x38(%rsp), %rdi
jmp 0xd081
jmp 0xd074
jmp 0xd074
movq %rax, %r14
leaq 0x58(%rsp), %rdi
jmp 0xd081
jmp 0xd079
movq %rax, %r14
jmp 0xd086
movq %rax, %r14
leaq 0x18(%rsp), %rdi
callq 0x2100
movq %rbx, %rdi
callq 0x2100
movq %r14, %rdi
callq 0x2390