// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]Uno/Src/uno_fcts.c
// Function: do_fct_call
static void
do_fct_call(BFct *f, Node *sys)
{	Rstack *r, *or;
	BFct *g;
	BSym *s;
	Node *n;

	f->visited = 1;	/* prevent fct call cycles */

	if (free_rstack)
	{	r = free_rstack;
		free_rstack = free_rstack->nxt;
		memset(r, 0, sizeof(Rstack));
	} else
		r = (Rstack *) emalloc(sizeof(Rstack));

	r->f = f;
	r->n = sys;	/* continuation point for return from fct in end_of_path */
	r->nxt = rstack;
	rstack = r;

	stack->fc = f;	/* remember for error trace */

	n = find_node(f, 0);
	if (n && n->succ)
	{	if (debug) printf("%3d: dive in\n", depth);
		check_prop(n->succ);
		if (debug) printf("%3d: undive\n", depth);
	} else
	{	if (debug) printf("%3d: no visible operations (calls: %p)\n", depth, f->calls);

		/* if we're here, then probably f->calls is also nil, or else
		 * there would be an abstract call graph for this fct with the
		 * call points recorded...
		 */

		if (!f->calls)	/* expected */
		{	end_of_path();	/* continuation with sys */
		} else
		{	fprintf(stderr, "%3d: unexpected...\n", depth);
			for (s = f->calls; s; s = s->nxt)
			{	g = find_function(s->s);
				if (g && !g->visited)
				{	if (debug) printf("	ByPass Call on %s\n", s->s);
					do_fct_call(g, (Node *) 0); /* no continuation within this fct */
					if (debug) printf("	Return from ByPass Call on %s\n", s->s);
	}	}	}	}

	stack->fc = (BFct *) 0;

	or = rstack;
	rstack = rstack->nxt;
	or->nxt = free_rstack;
	free_rstack = or;

	f->visited = 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movw $0x1, 0x18(%rax)
cmpq $0x0, 0x897e(%rip)      # 0xc440
je 0x3af3
movq 0x8975(%rip), %rax      # 0xc440
movq %rax, -0x18(%rbp)
movq 0x896a(%rip), %rax      # 0xc440
movq 0x10(%rax), %rax
movq %rax, 0x895f(%rip)      # 0xc440
movq -0x18(%rbp), %rdi
xorl %esi, %esi
movl $0x18, %edx
callq 0x10a0
jmp 0x3b01
movl $0x18, %edi
callq 0x1270
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq 0x8929(%rip), %rcx      # 0xc448
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq %rax, 0x8916(%rip)      # 0xc448
movq -0x8(%rbp), %rcx
movq 0x787b(%rip), %rax      # 0xb3b8
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0x4290
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x3bae
movq -0x38(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x3bae
cmpl $0x0, 0x7857(%rip)      # 0xb3c0
je 0x3b7f
movl 0x88df(%rip), %esi      # 0xc450
leaq 0x3fef(%rip), %rdi      # 0x7b67
movb $0x0, %al
callq 0x1080
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4320
cmpl $0x0, 0x782d(%rip)      # 0xb3c0
je 0x3ba9
movl 0x88b5(%rip), %esi      # 0xc450
leaq 0x3fd3(%rip), %rdi      # 0x7b75
movb $0x0, %al
callq 0x1080
jmp 0x3ca1
cmpl $0x0, 0x780b(%rip)      # 0xb3c0
je 0x3bd3
movl 0x8893(%rip), %esi      # 0xc450
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdx
leaq 0x3fb6(%rip), %rdi      # 0x7b82
movb $0x0, %al
callq 0x1080
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3be8
callq 0x4700
jmp 0x3c9f
movq 0x7409(%rip), %rax      # 0xaff8
movq (%rax), %rdi
movl 0x8858(%rip), %edx      # 0xc450
leaq 0x3fab(%rip), %rsi      # 0x7baa
movb $0x0, %al
callq 0x10d0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x3c9d
movq -0x30(%rbp), %rax
movq (%rax), %rdi
callq 0x3570
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x3c8a
movq -0x28(%rbp), %rax
cmpw $0x0, 0x18(%rax)
jne 0x3c8a
cmpl $0x0, 0x777a(%rip)      # 0xb3c0
je 0x3c5d
movq -0x30(%rbp), %rax
movq (%rax), %rsi
leaq 0x3f68(%rip), %rdi      # 0x7bbe
movb $0x0, %al
callq 0x1080
movq -0x28(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3aa0
cmpl $0x0, 0x774f(%rip)      # 0xb3c0
je 0x3c88
movq -0x30(%rbp), %rax
movq (%rax), %rsi
leaq 0x3f51(%rip), %rdi      # 0x7bd2
movb $0x0, %al
callq 0x1080
jmp 0x3c8a
jmp 0x3c8c
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x3c12
jmp 0x3c9f
jmp 0x3ca1
movq 0x7710(%rip), %rax      # 0xb3b8
movq $0x0, 0x28(%rax)
movq 0x8791(%rip), %rax      # 0xc448
movq %rax, -0x20(%rbp)
movq 0x8786(%rip), %rax      # 0xc448
movq 0x10(%rax), %rax
movq %rax, 0x877b(%rip)      # 0xc448
movq 0x876c(%rip), %rcx      # 0xc440
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x20(%rbp), %rax
movq %rax, 0x8759(%rip)      # 0xc440
movq -0x8(%rbp), %rax
movw $0x0, 0x18(%rax)
addq $0x40, %rsp
popq %rbp
retq
nopw (%rax,%rax)