// File: /workspace/github_cpp_makefile_star2_O3/Nallantli[P]Rossa/main/rossa/node/node.cpp
// Function: CallBuiltNode::genParser() const
ptr_instruction_t CallBuiltNode::genParser() const
{
	trace_t stack_trace;
	switch (t)
	{
	case TOK_LENGTH:
		if (args.size() > 1)
		{
			throw rossa_error_t(util::format(_TOO_MANY_ARGUMENTS_, {KEYWORD_LENGTH}), token, stack_trace);
		}
		return std::make_shared<LengthI>(args[0]->genParser(), token);
	case TOK_ALLOC:
		if (args.size() > 2)
		{
			throw rossa_error_t(util::format(_TOO_MANY_ARGUMENTS_, {KEYWORD_ALLOC}), token, stack_trace);
		}
		return std::make_shared<AllocI>(args[0]->genParser(), args.size() > 1 ? args[1]->genParser() : nullptr, token);
	case TOK_PARSE:
		if (args.size() > 1)
		{
			throw rossa_error_t(util::format(_TOO_MANY_ARGUMENTS_, {KEYWORD_PARSE}), token, stack_trace);
		}
		return std::make_shared<ParseI>(args[0]->genParser(), token);
	case TOK_CHARN:
		if (args.size() > 1)
		{
			throw rossa_error_t(util::format(_TOO_MANY_ARGUMENTS_, {KEYWORD_CHAR_N}), token, stack_trace);
		}
		return std::make_shared<CharNI>(args[0]->genParser(), token);
	case TOK_CHARS:
		if (args.size() > 1)
		{
			throw rossa_error_t(util::format(_TOO_MANY_ARGUMENTS_, {KEYWORD_CHAR_S}), token, stack_trace);
		}
		return std::make_shared<CharSI>(args[0]->genParser(), token);
	default:
		break;
	}

	throw rossa_error_t(util::format(_UNKNOWN_BUILT_CALL_, {std::to_string(t)}), token, stack_trace);
	return nullptr;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xb0, %rsp
movq %rsi, %rbx
movq %rdi, %r14
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
movl 0xa8(%rsi), %eax
cmpl $-0x35, %eax
jle 0x5d595
cmpl $-0x34, %eax
je 0x5d5fc
cmpl $-0x26, %eax
je 0x5d651
cmpl $-0x1a, %eax
jne 0x5d79d
movq 0xb0(%rbx), %rax
movq 0xb8(%rbx), %rcx
subq %rax, %rcx
cmpq $0x11, %rcx
jae 0x5d9b6
movq (%rax), %rsi
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
addq $0x28, %rbx
leaq 0x38(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
movq %rbx, %r8
callq 0x68daa
jmp 0x5d6f7
cmpl $-0x39, %eax
je 0x5d6a7
cmpl $-0x35, %eax
jne 0x5d79d
movq 0xb0(%rbx), %rax
movq 0xb8(%rbx), %rcx
subq %rax, %rcx
cmpq $0x11, %rcx
jae 0x5db28
movq (%rax), %rsi
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
addq $0x28, %rbx
leaq 0x38(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
movq %rbx, %r8
callq 0x6912e
jmp 0x5d6f7
movq 0xb0(%rbx), %rax
movq 0xb8(%rbx), %rcx
subq %rax, %rcx
cmpq $0x11, %rcx
jae 0x5d844
movq (%rax), %rsi
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
addq $0x28, %rbx
leaq 0x38(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
movq %rbx, %r8
callq 0x69050
jmp 0x5d6f7
movq 0xb0(%rbx), %rax
movq 0xb8(%rbx), %rcx
subq %rax, %rcx
cmpq $0x21, %rcx
jae 0x5d8fd
movq (%rax), %rsi
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
movq 0xb0(%rbx), %rax
movq 0xb8(%rbx), %rcx
subq %rax, %rcx
cmpq $0x11, %rcx
jb 0x5d73b
movq 0x10(%rax), %rsi
movq (%rsi), %rax
leaq 0x50(%rsp), %rdi
callq *(%rax)
jmp 0x5d743
movq 0xb0(%rbx), %rax
movq 0xb8(%rbx), %rcx
subq %rax, %rcx
cmpq $0x11, %rcx
jae 0x5da6f
movq (%rax), %rsi
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
addq $0x28, %rbx
leaq 0x38(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
movq %rbx, %r8
callq 0x68f72
movaps 0x30(%rsp), %xmm0
xorl %eax, %eax
movq %rax, 0x38(%rsp)
movups %xmm0, (%r14)
movq %rax, 0x30(%rsp)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x5d71b
callq 0x1e5bc
leaq 0x90(%rsp), %rdi
callq 0x1d632
movq %r14, %rax
addq $0xb0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
addq $0x28, %rbx
leaq 0x38(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x30(%rsp), %rsi
leaq 0x78(%rsp), %rdx
leaq 0x10(%rsp), %rcx
leaq 0x50(%rsp), %r8
movq %rbx, %r9
callq 0x68e88
movaps 0x30(%rsp), %xmm0
xorl %eax, %eax
movq %rax, 0x38(%rsp)
movups %xmm0, (%r14)
movq %rax, 0x30(%rsp)
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x5d70c
callq 0x1e5bc
jmp 0x5d70c
movl $0xa8, %edi
callq 0x101e0
movq %rax, %r14
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x284ca(%rip), %rsi     # 0x85c84
leaq 0x284e1(%rip), %rdx     # 0x85ca2
leaq 0x10(%rsp), %rdi
callq 0x1e698
movl 0xa8(%rbx), %esi
leaq 0x50(%rsp), %rdi
callq 0x66ae4
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0xf(%rsp), %rcx
movl $0x1, %edx
callq 0x20b38
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x47db4
addq $0x28, %rbx
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x46e88
xorl %ebp, %ebp
leaq 0x534f0(%rip), %rsi     # 0xb0d20
leaq -0x26593(%rip), %rdx    # 0x372a4
movq %r14, %rdi
callq 0x106d0
jmp 0x5dbdc
movl $0xa8, %edi
callq 0x101e0
movq %rax, %r14
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x283f0(%rip), %rsi     # 0x85c51
leaq 0x2841b(%rip), %rdx     # 0x85c83
leaq 0x10(%rsp), %rdi
callq 0x1e698
leaq 0x60(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x25d0a(%rip), %rsi     # 0x8358d
leaq 0x25d08(%rip), %rdx     # 0x83592
leaq 0x50(%rsp), %rdi
callq 0x1e698
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0xf(%rsp), %rcx
movl $0x1, %edx
callq 0x20b38
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x47db4
addq $0x28, %rbx
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x46e88
xorl %ebp, %ebp
leaq 0x53437(%rip), %rsi     # 0xb0d20
leaq -0x2664c(%rip), %rdx    # 0x372a4
movq %r14, %rdi
callq 0x106d0
jmp 0x5dbdc
movl $0xa8, %edi
callq 0x101e0
movq %rax, %r14
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x28337(%rip), %rsi     # 0x85c51
leaq 0x28362(%rip), %rdx     # 0x85c83
leaq 0x10(%rsp), %rdi
callq 0x1e698
leaq 0x60(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x25c10(%rip), %rsi     # 0x8354c
leaq 0x25c0e(%rip), %rdx     # 0x83551
leaq 0x50(%rsp), %rdi
callq 0x1e698
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0xf(%rsp), %rcx
movl $0x1, %edx
callq 0x20b38
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x47db4
addq $0x28, %rbx
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x46e88
xorl %ebp, %ebp
leaq 0x5337e(%rip), %rsi     # 0xb0d20
leaq -0x26705(%rip), %rdx    # 0x372a4
movq %r14, %rdi
callq 0x106d0
jmp 0x5dbdc
movl $0xa8, %edi
callq 0x101e0
movq %rax, %r14
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2827e(%rip), %rsi     # 0x85c51
leaq 0x282a9(%rip), %rdx     # 0x85c83
leaq 0x10(%rsp), %rdi
callq 0x1e698
leaq 0x60(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x2592d(%rip), %rsi     # 0x83322
leaq 0x25929(%rip), %rdx     # 0x83325
leaq 0x50(%rsp), %rdi
callq 0x1e698
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0xf(%rsp), %rcx
movl $0x1, %edx
callq 0x20b38
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x47db4
addq $0x28, %rbx
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x46e88
xorl %ebp, %ebp
leaq 0x532c5(%rip), %rsi     # 0xb0d20
leaq -0x267be(%rip), %rdx    # 0x372a4
movq %r14, %rdi
callq 0x106d0
jmp 0x5dbdc
movl $0xa8, %edi
callq 0x101e0
movq %rax, %r14
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x281c5(%rip), %rsi     # 0x85c51
leaq 0x281f0(%rip), %rdx     # 0x85c83
leaq 0x10(%rsp), %rdi
callq 0x1e698
leaq 0x60(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x25af0(%rip), %rsi     # 0x8359e
leaq 0x25aee(%rip), %rdx     # 0x835a3
leaq 0x50(%rsp), %rdi
callq 0x1e698
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0xf(%rsp), %rcx
movl $0x1, %edx
callq 0x20b38
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x47db4
addq $0x28, %rbx
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x46e88
xorl %ebp, %ebp
leaq 0x5320c(%rip), %rsi     # 0xb0d20
leaq -0x26877(%rip), %rdx    # 0x372a4
movq %r14, %rdi
callq 0x106d0
jmp 0x5dbdc
movl $0xa8, %edi
callq 0x101e0
movq %rax, %r14
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2810c(%rip), %rsi     # 0x85c51
leaq 0x28137(%rip), %rdx     # 0x85c83
leaq 0x10(%rsp), %rdi
callq 0x1e698
leaq 0x60(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x25a2c(%rip), %rsi     # 0x83593
leaq 0x25a2a(%rip), %rdx     # 0x83598
leaq 0x50(%rsp), %rdi
callq 0x1e698
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
leaq 0xf(%rsp), %rcx
movl $0x1, %edx
callq 0x20b38
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x47db4
addq $0x28, %rbx
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x90(%rsp), %rcx
movq %r14, %rdi
movq %rbx, %rdx
callq 0x46e88
xorl %ebp, %ebp
leaq 0x53153(%rip), %rsi     # 0xb0d20
leaq -0x26930(%rip), %rdx    # 0x372a4
movq %r14, %rdi
callq 0x106d0
jmp 0x5dbec
jmp 0x5dc0c
jmp 0x5dbec
jmp 0x5dc0c
jmp 0x5dbec
jmp 0x5dc0c
jmp 0x5dbec
jmp 0x5dc0c
movq %rax, %rbx
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5dc12
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x103d0
jmp 0x5dc12
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x78(%rsp), %rdi
callq 0x1db60
jmp 0x5dc5e
movq %rax, %rbx
leaq 0x40(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5dc44
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x103d0
jmp 0x5dc44
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x78(%rsp), %rdi
callq 0x1db60
jmp 0x5dc9c
jmp 0x5dc58
jmp 0x5dc58
jmp 0x5dc58
jmp 0x5dc58
movq %rax, %rbx
movb $0x1, %bpl
movq 0x50(%rsp), %rdi
cmpq %r12, %rdi
je 0x5dc75
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x103d0
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x5dc8c
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x103d0
testb %bpl, %bpl
jne 0x5dce1
jmp 0x5dd24
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x5dc68
jmp 0x5dc75
jmp 0x5dcb6
jmp 0x5dcb6
jmp 0x5dcb6
jmp 0x5dcb6
jmp 0x5dcb6
movq %rax, %rbx
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x5dce1
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x103d0
jmp 0x5dce1
jmp 0x5dd05
jmp 0x5dcde
jmp 0x5dcde
jmp 0x5dcde
jmp 0x5dcde
jmp 0x5dcde
movq %rax, %rbx
movq %r14, %rdi
callq 0x102d0
jmp 0x5dd24
movq %rax, %rbx
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x5dd08
callq 0x1e5bc
jmp 0x5dd08
jmp 0x5dd05
jmp 0x5dd05
jmp 0x5dd05
movq %rax, %rbx
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x5dd24
callq 0x1e5bc
jmp 0x5dd24
jmp 0x5dd21
jmp 0x5dd21
jmp 0x5dd21
jmp 0x5dd21
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x1d632
movq %rbx, %rdi
callq 0x106f0
nop