// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: op_read_dot
static goto_t op_read_dot(s7_scheme *sc)
                {
                    token_t c;
                    c = token(sc);
                    if (c != TOKEN_RIGHT_PAREN) /* '(1 . (2) 3) -> '(1 2 3), Guile says "missing close paren" */
                    {
                        if (is_pair(sc->value))
                        {
                            s7_pointer p;
                            for (p = sc->value; is_pair(p); p = cdr(p))
                                sc->args = cons(sc, car(p), sc->args);
                            sc->tok = c;
                            return(goto_read_tok);
                        }
                        back_up_stack(sc);
                        read_error(sc, "stray dot?");            /* (+ 1 . 2 3) or (list . ) */
                    }
                    /* args = previously read stuff, value = thing just after the dot and before the ')':
                     *   (list 1 2 . 3) -> value: 3, args: (2 1 list)
                     *   '(1 . 2) ->       value: 2, args: (1)
                     * but we also get here in a lambda arg list:
                     *   (lambda (a b . c) #f) -> value: c, args: (b a)
                     * so we have to leave any error checks until later, I guess
                     *   -- in eval_args1, if we end with non-pair-not-nil then something is fishy
                     */
                    sc->value = reverse_in_place(sc, sc->value, sc->args);
                    pair_set_dotted(sc->value);
                    if (main_stack_op(sc) == OP_READ_LIST) return(goto_pop_read_list);
                    return(goto_start);
                }

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movq 0x38(%rsp), %rdi
callq 0xc9560
movl %eax, 0x34(%rsp)
cmpl $0x2, 0x34(%rsp)
je 0x159f90
movq 0x38(%rsp), %rax
movq 0x20(%rax), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x159f75
movq 0x38(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x159f5c
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x38(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x38(%rsp), %rax
movq 0x90(%rax), %rax
movq 0x38(%rsp), %rcx
cmpq 0x98(%rcx), %rax
ja 0x159ee6
movq 0x38(%rsp), %rdi
callq 0xc670
movq 0x38(%rsp), %rcx
movq 0x90(%rcx), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, 0x90(%rcx)
movq -0x8(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq $0x200001, (%rax)       # imm = 0x200001
movq 0x18(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x10(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x159e95
movl 0x34(%rsp), %ecx
movq 0x38(%rsp), %rax
movl %ecx, 0x30(%rax)
movl $0xf, 0x44(%rsp)
jmp 0x159ff5
movq 0x38(%rsp), %rdi
callq 0x1981f0
movq 0x38(%rsp), %rdi
leaq 0x96a63(%rip), %rsi     # 0x1f09ee
callq 0xdfe00
movq 0x38(%rsp), %rdi
movq 0x38(%rsp), %rax
movq 0x20(%rax), %rsi
movq 0x38(%rsp), %rax
movq 0x10(%rax), %rdx
callq 0x199140
movq %rax, %rcx
movq 0x38(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x38(%rsp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rcx
orq $0x20000000, %rcx       # imm = 0x20000000
movq %rcx, (%rax)
movq 0x38(%rsp), %rax
movq 0x50(%rax), %rax
movq -0x8(%rax), %rax
cmpq $0x1d1, %rax            # imm = 0x1D1
jne 0x159fed
movl $0xe, 0x44(%rsp)
jmp 0x159ff5
movl $0x0, 0x44(%rsp)
movl 0x44(%rsp), %eax
addq $0x48, %rsp
retq
nop