// File: Nallantli[P]Rossa/main/rossa/instruction/instruction.cpp
// Function: CharSI::evaluate(object_t const*, std::vector<std::pair<token_t, function_t>, std::allocator<std::pair<token_t, function_t>>>&) const
const symbol_t CharSI::evaluate(const object_t *scope, trace_t &stack_trace) const
{
	const symbol_t evalA = a->evaluate(scope, stack_trace);
	switch (evalA.getValueType())
	{
	case value_type_enum::NUMBER:
		return symbol_t::String(std::string(1, static_cast<char>(evalA.getNumber(&token, stack_trace).getLong())));
	case value_type_enum::ARRAY:
	{
		std::string ret = "";
		const std::vector<symbol_t> v = evalA.getVector(&token, stack_trace);
		for (const symbol_t &e : v)
			ret.push_back(static_cast<char>(e.getNumber(&token, stack_trace).getLong()));
		return symbol_t::String(ret);
	}
	default:
		throw rossa_error_t(_FAILURE_TO_STR_, token, stack_trace);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq %rdi, -0x110(%rbp)
movq %rdi, %rax
movq %rax, -0x108(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x100(%rbp)
addq $0x90, %rdi
callq 0x2d300
movq %rax, %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x30(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq *%rax
movq -0xf8(%rbp), %rdi
callq 0x883e0
movl %eax, -0xf0(%rbp)
jmp 0x132d05
movl -0xf0(%rbp), %eax
subl $-0x5, %eax
je 0x132dfb
jmp 0x132d16
movl -0xf0(%rbp), %eax
subl $-0x2, %eax
je 0x132d37
jmp 0x132faf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x1330a1
movq -0x100(%rbp), %rsi
addq $0x8, %rsi
movq -0x20(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x87a00
movq %rax, -0x118(%rbp)
jmp 0x132d58
movq -0x118(%rbp), %rdi
callq 0x9c780
movl %eax, -0x124(%rbp)
leaq -0x61(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x119d0
movl -0x124(%rbp), %eax
movq -0x120(%rbp), %rcx
movsbl %al, %edx
leaq -0x60(%rbp), %rdi
movl $0x1, %esi
callq 0x28900
jmp 0x132d9a
movq -0x110(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x86d20
jmp 0x132dac
leaq -0x60(%rbp), %rdi
callq 0x11360
leaq -0x61(%rbp), %rdi
callq 0x11600
movl $0x1, -0x68(%rbp)
jmp 0x133088
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x132ded
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x11360
leaq -0x61(%rbp), %rdi
callq 0x11600
jmp 0x1330a1
leaq -0x89(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x119d0
movq -0x130(%rbp), %rdx
leaq 0x1d376(%rip), %rsi     # 0x150192
leaq -0x88(%rbp), %rdi
callq 0x24740
jmp 0x132e2a
leaq -0x89(%rbp), %rdi
callq 0x11600
movq -0x100(%rbp), %rsi
addq $0x8, %rsi
movq -0x20(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x87fe0
movq %rax, -0x138(%rbp)
jmp 0x132e57
movq -0x138(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0x8c650
jmp 0x132e6c
leaq -0xa8(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rdi
callq 0x24ba0
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
callq 0x24bd0
movq %rax, -0xc0(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x24c00
testb $0x1, %al
jne 0x132ebc
jmp 0x132f65
leaq -0xb8(%rbp), %rdi
callq 0x24c40
movq -0x100(%rbp), %rsi
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rdi
addq $0x8, %rsi
movq -0x20(%rbp), %rdx
callq 0x87a00
movq %rax, -0x140(%rbp)
jmp 0x132ef3
movq -0x140(%rbp), %rdi
callq 0x9c780
movsbl %al, %esi
leaq -0x88(%rbp), %rdi
callq 0x114a0
jmp 0x132f10
jmp 0x132f12
leaq -0xb8(%rbp), %rdi
callq 0x24e20
jmp 0x132ea0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x89(%rbp), %rdi
callq 0x11600
jmp 0x1330a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x132f9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x2cf10
jmp 0x132f9e
movq -0x110(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x86d20
jmp 0x132f7a
movl $0x1, -0x68(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x2cf10
leaq -0x88(%rbp), %rdi
callq 0x11360
jmp 0x133088
leaq -0x88(%rbp), %rdi
callq 0x11360
jmp 0x1330a1
movb $0x1, -0xea(%rbp)
movl $0xa8, %edi
callq 0x112b0
movq %rax, -0x150(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x148(%rbp)
callq 0x119d0
movq -0x148(%rbp), %rdx
leaq 0x22240(%rip), %rsi     # 0x155228
leaq -0xe8(%rbp), %rdi
callq 0x24740
jmp 0x132ff6
movq -0x150(%rbp), %rdi
movq -0x100(%rbp), %rdx
addq $0x8, %rdx
movq -0x20(%rbp), %rcx
leaq -0xe8(%rbp), %rsi
callq 0x9c360
jmp 0x13301a
movq -0x150(%rbp), %rdi
movb $0x0, -0xea(%rbp)
leaq 0xadc51(%rip), %rsi     # 0x1e0c80
leaq -0xd8696(%rip), %rdx    # 0x5a9a0
callq 0x11970
jmp 0x1330b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x133063
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x11360
leaq -0xe9(%rbp), %rdi
callq 0x11600
testb $0x1, -0xea(%rbp)
jne 0x13307a
jmp 0x133086
movq -0x150(%rbp), %rdi
callq 0x11420
jmp 0x1330a1
leaq -0x30(%rbp), %rdi
callq 0x86dc0
movq -0x108(%rbp), %rax
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0x86dc0
movq -0x38(%rbp), %rdi
callq 0x119c0
nopw %cs:(%rax,%rax)