// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: do_tree_has_definers
static inline bool do_tree_has_definers(s7_scheme *sc, s7_pointer tree)
                {
                    /* we can't be very fancy here because quote gloms up everything: (cond '(define x 0) ...) etc, and the tree here can
                     *   be arbitrarily messed up, and we need to be reasonably fast.  So we accept some false positives: (case ((define)...)...) or '(define...)
                     * but what about ((f...)...) where (f...) returns a macro that defines something?
                     */
                    s7_pointer p;
                    for (p = tree; is_pair(p); p = cdr(p))
                    {
                        s7_pointer pp;
                        pp = car(p);
                        if (is_symbol(pp))
                        {
                            if ((is_definer(pp)) &&
                                    ((pp != sc->varlet_symbol) ||
                                     ((is_pair(cdr(p))) &&         /* if varlet, is target let local? */
                                      (is_symbol(cadr(p))) &&
                                      (!symbol_is_in_list(sc, cadr(p))))))
                            {
#if DO_PRINT
                                fprintf(stderr, "definer: %s\n", DISPLAY(pp));
#endif
                                return(true);
                            }
                        }
                        else
                        {
                            if ((is_pair(pp)) &&
                                    (do_tree_has_definers(sc, pp)))
                                return(true);
                        }
                    }
                    return(false);
                }

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x17461b
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, (%rsp)
movq (%rsp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x1745dd
movq (%rsp), %rax
movzwl 0x6(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x1745db
movq (%rsp), %rax
movq 0x18(%rsp), %rcx
cmpq 0x1640(%rcx), %rax
jne 0x1745d4
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x1745db
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x1745db
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movl 0x2c(%rax), %eax
movq 0x18(%rsp), %rcx
cmpl 0xa88(%rcx), %eax
jne 0x1745d4
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rax
movl 0xc(%rax), %eax
movq 0x18(%rsp), %rcx
cmpl 0xa8c(%rcx), %eax
je 0x1745db
movb $0x1, 0x27(%rsp)
jmp 0x174620
jmp 0x174606
movq (%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x174604
movq 0x18(%rsp), %rdi
movq (%rsp), %rsi
callq 0x174500
testb $0x1, %al
jne 0x1745fd
jmp 0x174604
movb $0x1, 0x27(%rsp)
jmp 0x174620
jmp 0x174606
jmp 0x174608
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x8(%rsp)
jmp 0x174518
movb $0x0, 0x27(%rsp)
movb 0x27(%rsp), %al
andb $0x1, %al
addq $0x28, %rsp
retq
nopl (%rax,%rax)