// File: Nallantli[P]Rossa/main/rossa/node_parser/node_parser.cpp
// Function: node_parser_t::parseParamTypeNode(std::vector<node_scope_t, std::allocator<node_scope_t>>*, std::vector<long long, std::allocator<long long>> const&)
parameter_t node_parser_t::parseParamTypeNode(std::vector<node_scope_t> *scopes, const aug_type_t &base)
{
	parameter_t pt({}, base);
	nextToken();

	int i = 0;
	while (currentToken.valueString != ">")
	{
		if (i++ > 0)
		{
			if (currentToken.type != ',')
				return logErrorPT(util::format(_EXPECTED_ERROR_, {","}), currentToken);
			nextToken();
		}
		aug_type_t qbase = {value_type_enum::ANY};
		switch (currentToken.type)
		{
		case TOK_BOOLEAN:
			qbase = {value_type_enum::BOOLEAN_D};
			nextToken();
			break;
		case TOK_NUMBER:
			qbase = {value_type_enum::NUMBER};
			nextToken();
			break;
		case TOK_ARRAY:
			qbase = {value_type_enum::ARRAY};
			nextToken();
			break;
		case TOK_STRING:
			qbase = {value_type_enum::STRING};
			nextToken();
			break;
		case TOK_DICTIONARY:
			qbase = {value_type_enum::DICTIONARY};
			nextToken();
			break;
		case TOK_OBJECT:
			qbase = {value_type_enum::OBJECT};
			nextToken();
			break;
		case TOK_FUNCTION:
			qbase = {value_type_enum::FUNCTION};
			nextToken();
			break;
		case TOK_POINTER:
			qbase = {value_type_enum::POINTER};
			nextToken();
			break;
		case TOK_ANY:
			nextToken();
			break;
		case TOK_TYPE_NAME:
			qbase = {value_type_enum::TYPE_NAME};
			nextToken();
			break;
		case TOK_IDF:
		{
			qbase = {};
			while (currentToken.type == TOK_IDF)
			{
				qbase.push_back(ROSSA_HASH(currentToken.valueString));
				nextToken();
				if (currentToken.type != TOK_INNER)
					break;
				nextToken();
			}
			break;
		}
		default:
			return logErrorPT(_EXPECTED_BASE_TYPE_, currentToken);
		}
		if (currentToken.valueString == "<")
		{
			pt.addQualifier(parseParamTypeNode(scopes, qbase));
		}
		else
		{
			pt.addQualifier(parameter_t({}, qbase));
		}
	}
	nextToken();
	return pt;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3f0, %rsp            # imm = 0x3F0
movq %rdi, -0x350(%rbp)
movq %rdi, %rax
movq %rax, -0x348(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x340(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x80(%rbp)
movq $0x0, -0x70(%rbp)
leaq -0x80(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x57bc0
movq -0x338(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x68(%rbp), %rdi
callq 0x801d0
jmp 0x4158c
leaq -0x80(%rbp), %rdi
callq 0x57be0
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x415a3
movl $0x0, -0x90(%rbp)
movq -0x340(%rbp), %rdi
addq $0xb0, %rdi
leaq 0x10ed9e(%rip), %rsi    # 0x150360
callq 0x2d7e0
movb %al, -0x351(%rbp)
jmp 0x415cf
movb -0x351(%rbp), %al
testb $0x1, %al
jne 0x415de
jmp 0x42020
movl -0x90(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x90(%rbp)
cmpl $0x0, %eax
jle 0x4195c
movq -0x340(%rbp), %rax
cmpl $0x2c, 0xd0(%rax)
je 0x4194c
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0x119d0
movq -0x360(%rbp), %rdx
leaq 0x10fb63(%rip), %rsi    # 0x151190
leaq -0xd0(%rbp), %rdi
callq 0x24740
jmp 0x4163b
movb $0x1, -0x12a(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x370(%rbp)
movq %rax, -0x128(%rbp)
leaq -0x129(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0x119d0
movq -0x370(%rbp), %rdi
movq -0x368(%rbp), %rdx
leaq 0x10fd71(%rip), %rsi    # 0x1513f0
callq 0x24740
jmp 0x41686
movb $0x0, -0x12a(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x100(%rbp)
movq $0x1, -0xf8(%rbp)
leaq -0x12b(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0x26e30
movq -0x378(%rbp), %rcx
movq -0x100(%rbp), %rsi
movq -0xf8(%rbp), %rdx
leaq -0xf0(%rbp), %rdi
callq 0x2d6a0
jmp 0x416dc
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
callq 0x9e250
jmp 0x416f8
movq -0x340(%rbp), %rsi
movq -0x350(%rbp), %rdi
movq %rsi, %rcx
addq $0x58, %rcx
leaq -0xb0(%rbp), %rdx
callq 0x42080
jmp 0x4171b
leaq -0xb0(%rbp), %rdi
callq 0x11360
leaq -0xf0(%rbp), %rdi
callq 0x25b00
leaq -0x12b(%rbp), %rdi
callq 0x279c0
leaq -0x120(%rbp), %rax
movq %rax, -0x388(%rbp)
addq $0x20, %rax
movq %rax, -0x380(%rbp)
movq -0x380(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x390(%rbp)
callq 0x11360
movq -0x388(%rbp), %rcx
movq -0x390(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x380(%rbp)
jne 0x41758
leaq -0x129(%rbp), %rdi
callq 0x11600
leaq -0xd0(%rbp), %rdi
callq 0x11360
leaq -0xd1(%rbp), %rdi
callq 0x11600
movl $0x1, -0x130(%rbp)
jmp 0x42048
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x57be0
jmp 0x4206a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x42061
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x4193b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x418cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x41873
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x41867
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x11360
leaq -0xf0(%rbp), %rdi
callq 0x25b00
leaq -0x12b(%rbp), %rdi
callq 0x279c0
leaq -0x120(%rbp), %rax
movq %rax, -0x3a0(%rbp)
addq $0x20, %rax
movq %rax, -0x398(%rbp)
movq -0x398(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x11360
movq -0x3a0(%rbp), %rcx
movq -0x3a8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x398(%rbp)
jne 0x41898
jmp 0x418cb
leaq -0x129(%rbp), %rdi
callq 0x11600
testb $0x1, -0x12a(%rbp)
jne 0x418e2
jmp 0x4192f
movq -0x128(%rbp), %rax
leaq -0x120(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x3b0(%rbp)
je 0x4192d
movq -0x3b0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x3b8(%rbp)
callq 0x11360
movq -0x3b8(%rbp), %rax
leaq -0x120(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x3b0(%rbp)
jne 0x418fc
jmp 0x4192f
leaq -0xd0(%rbp), %rdi
callq 0x11360
leaq -0xd1(%rbp), %rdi
callq 0x11600
jmp 0x42061
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x4195a
jmp 0x4195c
movq $-0xb, -0x160(%rbp)
leaq -0x160(%rbp), %rax
movq %rax, -0x158(%rbp)
movq $0x1, -0x150(%rbp)
leaq -0x161(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x57c40
movq -0x3c0(%rbp), %rcx
movq -0x158(%rbp), %rsi
movq -0x150(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57c60
jmp 0x419b6
leaq -0x161(%rbp), %rdi
callq 0x57ce0
movq -0x340(%rbp), %rax
movl 0xd0(%rax), %eax
addl $0x2e, %eax
movl %eax, %ecx
movq %rcx, -0x3c8(%rbp)
subl $0x2c, %eax
ja 0x41deb
movq -0x3c8(%rbp), %rax
leaq 0x10f066(%rip), %rcx    # 0x150a58
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x161(%rbp), %rdi
callq 0x57ce0
jmp 0x42061
movq $-0x3, -0x180(%rbp)
leaq -0x180(%rbp), %rax
movq %rax, -0x178(%rbp)
movq $0x1, -0x170(%rbp)
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41a5e
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41a6c
jmp 0x41ea7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x42012
movq $-0x2, -0x198(%rbp)
leaq -0x198(%rbp), %rax
movq %rax, -0x190(%rbp)
movq $0x1, -0x188(%rbp)
movq -0x190(%rbp), %rsi
movq -0x188(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41ac8
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41ad6
jmp 0x41ea7
movq $-0x5, -0x1b0(%rbp)
leaq -0x1b0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq $0x1, -0x1a0(%rbp)
movq -0x1a8(%rbp), %rsi
movq -0x1a0(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41b1b
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41b29
jmp 0x41ea7
movq $-0x4, -0x1c8(%rbp)
leaq -0x1c8(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq $0x1, -0x1b8(%rbp)
movq -0x1c0(%rbp), %rsi
movq -0x1b8(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41b6e
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41b7c
jmp 0x41ea7
movq $-0x7, -0x1e0(%rbp)
leaq -0x1e0(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq $0x1, -0x1d0(%rbp)
movq -0x1d8(%rbp), %rsi
movq -0x1d0(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41bc1
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41bcf
jmp 0x41ea7
movq $-0x8, -0x1f8(%rbp)
leaq -0x1f8(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq $0x1, -0x1e8(%rbp)
movq -0x1f0(%rbp), %rsi
movq -0x1e8(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41c14
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41c22
jmp 0x41ea7
movq $-0x6, -0x210(%rbp)
leaq -0x210(%rbp), %rax
movq %rax, -0x208(%rbp)
movq $0x1, -0x200(%rbp)
movq -0x208(%rbp), %rsi
movq -0x200(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41c67
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41c75
jmp 0x41ea7
movq $-0xa, -0x228(%rbp)
leaq -0x228(%rbp), %rax
movq %rax, -0x220(%rbp)
movq $0x1, -0x218(%rbp)
movq -0x220(%rbp), %rsi
movq -0x218(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41cba
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41cc8
jmp 0x41ea7
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41cdb
jmp 0x41ea7
movq $-0x9, -0x240(%rbp)
leaq -0x240(%rbp), %rax
movq %rax, -0x238(%rbp)
movq $0x1, -0x230(%rbp)
movq -0x238(%rbp), %rsi
movq -0x230(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41d20
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41d2e
jmp 0x41ea7
leaq -0x250(%rbp), %rdi
callq 0x57d50
movq -0x250(%rbp), %rsi
movq -0x248(%rbp), %rdx
leaq -0x148(%rbp), %rdi
callq 0x57d00
jmp 0x41d5b
jmp 0x41d5d
movq -0x340(%rbp), %rax
cmpl $-0x2, 0xd0(%rax)
jne 0x41de6
movq -0x340(%rbp), %rsi
addq $0xb0, %rsi
leaq 0x1a3d16(%rip), %rdi    # 0x1e5a98
callq 0x2cb10
movq %rax, -0x3d0(%rbp)
jmp 0x41d90
movq -0x3d0(%rbp), %rax
movq %rax, -0x258(%rbp)
leaq -0x148(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x57d70
jmp 0x41db3
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41dc1
movq -0x340(%rbp), %rax
cmpl $-0x27, 0xd0(%rax)
je 0x41dd3
jmp 0x41de6
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x41de1
jmp 0x41d5d
jmp 0x41ea7
leaq -0x279(%rbp), %rdi
movq %rdi, -0x3d8(%rbp)
callq 0x119d0
movq -0x3d8(%rbp), %rdx
leaq 0x10f3af(%rip), %rsi    # 0x1511bb
leaq -0x278(%rbp), %rdi
callq 0x24740
jmp 0x41e1a
movq -0x340(%rbp), %rsi
movq -0x350(%rbp), %rdi
movq %rsi, %rcx
addq $0x58, %rcx
leaq -0x278(%rbp), %rdx
callq 0x42080
jmp 0x41e3d
leaq -0x278(%rbp), %rdi
callq 0x11360
leaq -0x279(%rbp), %rdi
callq 0x11600
movl $0x1, -0x130(%rbp)
jmp 0x41ff5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x41e96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x11360
leaq -0x279(%rbp), %rdi
callq 0x11600
jmp 0x42012
movq -0x340(%rbp), %rdi
addq $0xb0, %rdi
leaq 0x10e4db(%rip), %rsi    # 0x150397
callq 0x24630
movb %al, -0x3d9(%rbp)
jmp 0x41ec9
movb -0x3d9(%rbp), %al
testb $0x1, %al
jne 0x41ed5
jmp 0x41f3b
movq -0x340(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x2c8(%rbp), %rdi
leaq -0x148(%rbp), %rcx
callq 0x41520
jmp 0x41ef5
leaq -0x68(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
callq 0x802e0
jmp 0x41f07
leaq -0x2c8(%rbp), %rdi
callq 0x57da0
jmp 0x41feb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x57da0
jmp 0x42012
xorps %xmm0, %xmm0
movaps %xmm0, -0x330(%rbp)
movq $0x0, -0x320(%rbp)
leaq -0x330(%rbp), %rdi
movq %rdi, -0x3e8(%rbp)
callq 0x57bc0
movq -0x3e8(%rbp), %rsi
leaq -0x310(%rbp), %rdi
leaq -0x148(%rbp), %rdx
callq 0x801d0
jmp 0x41f7f
leaq -0x68(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x802e0
jmp 0x41f91
leaq -0x310(%rbp), %rdi
callq 0x57da0
leaq -0x330(%rbp), %rdi
callq 0x57be0
jmp 0x41feb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x41fdd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x57da0
leaq -0x330(%rbp), %rdi
callq 0x57be0
jmp 0x42012
movl $0x0, -0x130(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x57de0
movl -0x130(%rbp), %eax
testl %eax, %eax
jne 0x42048
jmp 0x4200d
jmp 0x415ad
leaq -0x148(%rbp), %rdi
callq 0x57de0
jmp 0x42061
movq -0x340(%rbp), %rdi
callq 0x38fd0
jmp 0x4202e
movq -0x350(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x57e40
movl $0x1, -0x130(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x57da0
movq -0x348(%rbp), %rax
addq $0x3f0, %rsp            # imm = 0x3F0
popq %rbp
retq
leaq -0x68(%rbp), %rdi
callq 0x57da0
movq -0x88(%rbp), %rdi
callq 0x119c0
nopw %cs:(%rax,%rax)