// File: /workspace/github_cpp_makefile_star2_O2/Nallantli[P]Rossa/main/rossa/symbol/symbol.cpp
// Function: symbol_t::toCodeString[abi:cxx11]() const
const std::string symbol_t::toCodeString() const
{
	if (type != ID_CASUAL)
	{
		return "symbol_t(static_cast<SymbolType>(" + std::to_string(type) + "))";
	}
	trace_t stack_trace;
	switch (d->type)
	{
	case value_type_enum::NIL:
		return "Nil@nil";
	case value_type_enum::NUMBER:
		return "Number@" + std::get<number_t>(d->value).toCodeString();
	case value_type_enum::STRING:
		return "String@\"" + std::get<std::string>(d->value) + "\"";
	case value_type_enum::FUNCTION:
		return "Function@" + getString(NULL, stack_trace);
	case value_type_enum::OBJECT:
		return "Object@" + std::get<object_t>(d->value).getKey();
	case value_type_enum::POINTER:
	{
		std::stringstream ss;
		ss << "Pointer@" << std::addressof(std::get<std::shared_ptr<void>>(d->value));
		return ss.str();
	}
	case value_type_enum::BOOLEAN_D:
		return "Boolean@" + std::string(std::get<bool>(d->value) ? KEYWORD_TRUE : KEYWORD_FALSE);
	case value_type_enum::ARRAY:
	{
		std::string ret = "Array@[";
		unsigned int i = 0;
		for (auto &d2 : std::get<std::vector<symbol_t>>(d->value))
		{
			if (i > 0)
			{
				ret += ", ";
			}
			ret += d2.toCodeString();
			i++;
		}
		return ret + "]";
	}
	case value_type_enum::DICTIONARY:
	{
		std::string ret = "Dictionary@[";
		unsigned int i = 0;
		for (auto &e : getDictionary(NULL, stack_trace))
		{
			if (i > 0)
			{
				ret += ", ";
			}
			ret += "\"" + e.first + "\" : " + e.second.toCodeString();
			i++;
		}
		return ret + "]";
	}
	case value_type_enum::TYPE_NAME:
		return "Type@" + std::get<parameter_t>(d->value).toString();
	default:
		return "<error-type>";
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x238, %rsp            # imm = 0x238
movq %rsi, %rbx
movq %rdi, %r15
movl 0x8(%rsi), %esi
cmpl $0x3, %esi
jne 0x3ab97
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
andq $0x0, 0x40(%rsp)
movq (%rbx), %rdi
movl (%rdi), %eax
addl $0xa, %eax
cmpl $0x9, %eax
ja 0x3ae75
leaq 0x3cb37(%rip), %rcx     # 0x77674
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x50(%rsp), %rdi
callq 0x102c0
leaq 0x60(%rsp), %rdi
leaq 0x3cd9a(%rip), %rsi     # 0x778f6
callq 0x103b0
movq %rax, %r14
movq (%rbx), %rdi
addq $0x8, %rdi
callq 0x3bc9b
movq %r14, %rdi
movq %rax, %rsi
callq 0x10300
leaq 0x68(%rsp), %rsi
movq %r15, %rdi
callq 0x10600
leaq 0x50(%rsp), %rdi
callq 0x102f0
jmp 0x3aef6
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x1cac0
leaq 0x3ccfb(%rip), %rsi     # 0x778a6
leaq 0x50(%rsp), %rdi
movq %rbx, %rdx
callq 0x1ca9c
leaq 0x3cd09(%rip), %rdx     # 0x778c8
leaq 0x50(%rsp), %rsi
movq %r15, %rdi
callq 0x1ca7d
leaq 0x50(%rsp), %rdi
callq 0x101d0
leaq 0x10(%rsp), %rdi
callq 0x101d0
jmp 0x3af00
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rcx
movq %rbx, %rsi
xorl %edx, %edx
callq 0x39aa6
leaq 0x3cce4(%rip), %rsi     # 0x778e4
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x1cb73
jmp 0x3aeec
leaq 0x3ccb2(%rip), %rsi     # 0x778cb
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x1c814
jmp 0x3aef6
addq $0x8, %rdi
callq 0x3bd3f
leaq 0x50(%rsp), %rdi
movq %rax, %rsi
callq 0x365e4
leaq 0x3cca6(%rip), %rsi     # 0x778ee
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x1cb73
jmp 0x3aeec
leaq 0x3ccaf(%rip), %rsi     # 0x77910
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1c814
movq %r15, 0x8(%rsp)
xorl %r14d, %r14d
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x397e6
movq 0x18(%rax), %r15
addq $0x8, %rax
movq %rax, 0x48(%rsp)
leaq 0x1f8(%rsp), %r13
leaq 0x218(%rsp), %rbx
leaq 0x1d8(%rsp), %r12
leaq 0x10(%rsp), %rbp
cmpq 0x48(%rsp), %r15
je 0x3aed3
subl $0x1, %r14d
jb 0x3acd3
leaq 0x50(%rsp), %rdi
leaq 0x3c94c(%rip), %rsi     # 0x7761a
callq 0x10760
leaq 0x20(%r15), %rdx
movq %r13, %rdi
leaq 0x3cc01(%rip), %rsi     # 0x778e2
callq 0x1cb73
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x3cb9e(%rip), %rdx     # 0x77891
callq 0x1ca7d
leaq 0x40(%r15), %rsi
movq %r12, %rdi
callq 0x3aaf4
movq %rbp, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x21f79
leaq 0x50(%rsp), %rdi
movq %rbp, %rsi
callq 0x10790
movq %rbp, %rdi
callq 0x101d0
movq %r12, %rdi
callq 0x101d0
movq %rbx, %rdi
callq 0x101d0
movq %r13, %rdi
callq 0x101d0
movq %r15, %rdi
callq 0x102b0
movq %rax, %r15
jmp 0x3acb1
addq $0x8, %rdi
callq 0x3bd22
leaq 0x3b32c(%rip), %rcx     # 0x7608b
leaq 0x3b476(%rip), %rsi     # 0x761dc
cmpb $0x0, (%rax)
cmovneq %rcx, %rsi
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1c814
leaq 0x3cb7c(%rip), %rsi     # 0x778ff
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x1ca9c
jmp 0x3aeec
addq $0x8, %rdi
callq 0x3bd5c
leaq 0x50(%rsp), %rdi
movq %rax, %rsi
callq 0x36f0a
leaq 0x3cb6b(%rip), %rsi     # 0x7791d
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x1cb73
jmp 0x3aeec
leaq 0x3cb3d(%rip), %rsi     # 0x77908
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1c814
movq %r15, 0x8(%rsp)
movq (%rbx), %rdi
addq $0x8, %rdi
callq 0x3bce8
movq (%rax), %rbx
movq 0x8(%rax), %r13
xorl %ebp, %ebp
leaq 0x10(%rsp), %r14
leaq 0x50(%rsp), %r15
leaq 0x3c815(%rip), %r12     # 0x7761a
cmpq %r13, %rbx
je 0x3aeb8
subl $0x1, %ebp
jb 0x3ae1e
movq %r15, %rdi
movq %r12, %rsi
callq 0x10760
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3aaf4
movq %r15, %rdi
movq %r14, %rsi
callq 0x10790
movq %r14, %rdi
callq 0x101d0
addq $0x10, %rbx
jmp 0x3ae05
addq $0x8, %rdi
callq 0x3bd05
leaq 0x3ca89(%rip), %rsi     # 0x778db
leaq 0x50(%rsp), %rdi
movq %rax, %rdx
callq 0x1cb73
leaq 0x3ca7c(%rip), %rdx     # 0x778e2
leaq 0x50(%rsp), %rsi
movq %r15, %rdi
callq 0x1ca7d
jmp 0x3aeec
leaq 0x3caa7(%rip), %rsi     # 0x77923
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x1c814
jmp 0x3aef6
addq $0x8, %rdi
callq 0x3bc13
leaq 0x50(%rsp), %rbx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x3f4dc
leaq 0x3ca28(%rip), %rsi     # 0x778d3
movq %r15, %rdi
movq %rbx, %rdx
callq 0x1cb73
jmp 0x3aeec
leaq 0x3b162(%rip), %rdx     # 0x76021
leaq 0x50(%rsp), %rsi
movq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x1cb3b
jmp 0x3aeec
leaq 0x3b147(%rip), %rdx     # 0x76021
leaq 0x50(%rsp), %rsi
movq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x1cb3b
leaq 0x50(%rsp), %rdi
callq 0x101d0
leaq 0x30(%rsp), %rdi
callq 0x1cb1a
movq %r15, %rax
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3af5d
jmp 0x3afdb
jmp 0x3afdb
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
jmp 0x3af5d
movq %rax, %rbx
jmp 0x3aff7
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x102f0
jmp 0x3aff7
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x101d0
jmp 0x3af89
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
jmp 0x3b001
jmp 0x3afdb
jmp 0x3afdb
movq %rax, %rbx
jmp 0x3afcf
movq %rax, %rbx
jmp 0x3afc2
movq %rax, %rbx
jmp 0x3afb5
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
leaq 0x1d8(%rsp), %rdi
callq 0x101d0
leaq 0x218(%rsp), %rdi
callq 0x101d0
leaq 0x1f8(%rsp), %rdi
jmp 0x3afe8
jmp 0x3afdb
movq %rax, %rbx
jmp 0x3afed
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
leaq 0x50(%rsp), %rdi
callq 0x101d0
leaq 0x30(%rsp), %rdi
callq 0x1cb1a
movq %rbx, %rdi
callq 0x106f0
nop