// File: /workspace/github_c_makefile_star2_O0/System-Glitch[P]ESGILinter-C/src/parsing_functions.c
// Function: parse_function_call
function_t *parse_function_call(int line_index, char *line) {
	//Line should be already subbed if call is assignation
	function_t  *function     = NULL;
	arraylist_t *param_list   = NULL;
	int start_index           = 0;
	int end_index             = 0;
	unsigned int index        = 0;
	char *name                = NULL;
	char *params              = NULL;
	char *expr                = NULL;
	int negate                = 0;
	size_t length             = 0;
	char c;

	line   = str_remove_comments(line);
	length = strlen(line);

	SKIP_WHITESPACES

	//Check ! operator
	while((c = line[index]) == '!' && index < length) {
		negate++;
		index++;
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movl %edi, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movq $0x0, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x18(%rbp), %rdi
callq 0xa2b0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2090
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
movb (%rax,%rcx), %al
movb %al, -0x61(%rbp)
movsbl %al, %edi
callq 0xa7d0
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x71(%rbp)
je 0xf907
movl -0x34(%rbp), %eax
cmpq -0x60(%rbp), %rax
setb %al
movb %al, -0x71(%rbp)
movb -0x71(%rbp), %al
testb $0x1, %al
jne 0xf910
jmp 0xf91b
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xf8d8
jmp 0xf91d
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
movb (%rax,%rcx), %al
movb %al, -0x61(%rbp)
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0x21, %ecx
movb %al, -0x72(%rbp)
jne 0xf944
movl -0x34(%rbp), %eax
cmpq -0x60(%rbp), %rax
setb %al
movb %al, -0x72(%rbp)
movb -0x72(%rbp), %al
testb $0x1, %al
jne 0xf94d
jmp 0xf961
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xf91d
movl -0x34(%rbp), %eax
movl %eax, -0x2c(%rbp)
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
movb (%rax,%rcx), %al
movb %al, -0x61(%rbp)
movsbl %al, %edi
callq 0xada0
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x73(%rbp)
je 0xf996
movl -0x34(%rbp), %eax
cmpq -0x60(%rbp), %rax
setb %al
movb %al, -0x73(%rbp)
movb -0x73(%rbp), %al
testb $0x1, %al
jne 0xf99f
jmp 0xf9aa
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xf967
movl -0x34(%rbp), %eax
movl %eax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
movl -0x2c(%rbp), %esi
movl -0x30(%rbp), %edx
subl -0x2c(%rbp), %edx
callq 0xa5e0
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0x8510
cmpb $0x0, %al
je 0xf9f2
movq -0x40(%rbp), %rdi
callq 0x2030
movq -0x18(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
jmp 0xfc45
jmp 0xf9f4
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
movb (%rax,%rcx), %al
movb %al, -0x61(%rbp)
movsbl %al, %edi
callq 0xa7d0
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x74(%rbp)
je 0xfa23
movl -0x34(%rbp), %eax
cmpq -0x60(%rbp), %rax
setb %al
movb %al, -0x74(%rbp)
movb -0x74(%rbp), %al
testb $0x1, %al
jne 0xfa2c
jmp 0xfa37
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xf9f4
movsbl -0x61(%rbp), %eax
cmpl $0x28, %eax
jne 0xfc2b
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
movq -0x18(%rbp), %rdi
movl $0x29, %esi
callq 0xa940
movl %eax, -0x30(%rbp)
cmpl $-0x1, -0x30(%rbp)
je 0xfc29
movl -0x30(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jl 0xfc29
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movq -0x18(%rbp), %rax
movl -0x34(%rbp), %ecx
movb (%rax,%rcx), %al
movb %al, -0x61(%rbp)
movsbl %al, %edi
callq 0xa7d0
movsbl %al, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x75(%rbp)
je 0xfaac
movl -0x34(%rbp), %eax
cmpq -0x60(%rbp), %rax
setb %al
movb %al, -0x75(%rbp)
movb -0x75(%rbp), %al
testb $0x1, %al
jne 0xfab5
jmp 0xfac0
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xfa7d
movl -0x34(%rbp), %eax
cmpq -0x60(%rbp), %rax
jae 0xfafe
movsbl -0x61(%rbp), %eax
cmpl $0x3b, %eax
je 0xfafe
movsbl -0x61(%rbp), %edi
callq 0xa7d0
cmpb $0x0, %al
jne 0xfafe
movq -0x40(%rbp), %rdi
callq 0x2030
movq -0x18(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
jmp 0xfc45
movq -0x18(%rbp), %rdi
movl -0x2c(%rbp), %esi
movl -0x30(%rbp), %edx
subl -0x2c(%rbp), %edx
callq 0xa5e0
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rdi
callq 0xfc60
movq %rax, -0x28(%rbp)
movq -0x48(%rbp), %rdi
callq 0x2030
cmpq $0x0, -0x28(%rbp)
je 0xfc27
movq -0x40(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq 0x4c62(%rip), %rdi      # 0x147a9
callq 0xa550
movq %rax, -0x80(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movl %eax, %edi
callq 0x8580
movq -0x88(%rbp), %rdi
movq -0x80(%rbp), %rdx
movq %rax, %r8
movl -0xc(%rbp), %r9d
xorl %ecx, %ecx
movl %ecx, %esi
callq 0xee00
movq %rax, -0x20(%rbp)
movl -0x54(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x2c(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rcx, 0x8(%rax)
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0xfc14
movq -0x28(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x8890
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x90(%rbp)
leaq 0x4bd4(%rip), %rdi      # 0x147a9
callq 0xa550
movq -0x90(%rbp), %rdi
movq %rax, %rsi
xorl %edx, %edx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x7600
movq %rax, %rdx
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movq -0x70(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0xfba4
movq -0x18(%rbp), %rdi
callq 0x2030
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xfc45
jmp 0xfc29
jmp 0xfc2b
movq -0x40(%rbp), %rdi
callq 0x2030
movq -0x18(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)