// File: /workspace/github_c_makefile_star2_O0/hoobaa[P]ficl/tools.c
// Function: ficlPrimitiveSeeXT
static void ficlPrimitiveSeeXT(ficlVm *vm)
{
    ficlWord *word;
    ficlWordKind kind;

    word = (ficlWord *)ficlStackPopPointer(vm->dataStack);
    kind = ficlWordClassify(word);

    switch (kind)
    {
    case FICL_WORDKIND_COLON:
        sprintf(vm->pad, ": %.*s\n", word->length, word->name);
        ficlVmTextOut(vm, vm->pad);
        ficlDictionarySee(ficlVmGetDictionary(vm), word, &(vm->callback));
        break;

    case FICL_WORDKIND_DOES:
        ficlVmTextOut(vm, "does>\n");
        ficlDictionarySee(ficlVmGetDictionary(vm), (ficlWord *)word->param->p, &(vm->callback));
        break;

    case FICL_WORDKIND_CREATE:
        ficlVmTextOut(vm, "create\n");
        break;

    case FICL_WORDKIND_VARIABLE:
        sprintf(vm->pad, "variable = %ld (%#lx)\n", word->param->i, word->param->u);
        ficlVmTextOut(vm, vm->pad);
        break;

#if FICL_WANT_USER
    case FICL_WORDKIND_USER:
        sprintf(vm->pad, "user variable %ld (%#lx)\n", word->param->i, word->param->u);
        ficlVmTextOut(vm, vm->pad);
        break;
#endif

    case FICL_WORDKIND_CONSTANT:
        sprintf(vm->pad, "constant = %ld (%#lx)\n", word->param->i, word->param->u);
        ficlVmTextOut(vm, vm->pad);
		break;

    case FICL_WORDKIND_2CONSTANT:
        sprintf(vm->pad, "constant = %ld %ld (%#lx %#lx)\n", word->param[1].i, word->param->i, word->param[1].u, word->param->u);
        ficlVmTextOut(vm, vm->pad);
		break;

    default:
        sprintf(vm->pad, "%.*s is a primitive\n", word->length, word->name);
        ficlVmTextOut(vm, vm->pad);
        break;
    }

    if (word->flags & FICL_WORD_IMMEDIATE)
    {
        ficlVmTextOut(vm, "immediate\n");
    }

    if (word->flags & FICL_WORD_COMPILE_ONLY)
    {
        ficlVmTextOut(vm, "compile-only\n");
    }

    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x4b30
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x10720
movl %eax, -0x14(%rbp)
movl -0x14(%rbp), %eax
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0x11, %eax
ja 0x6269
movq -0x20(%rbp), %rax
leaq 0xf267(%rip), %rcx      # 0x15310
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
movq -0x10(%rbp), %rax
movzbl 0xb(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
leaq 0xf55f(%rip), %rsi      # 0x15633
movb $0x0, %al
callq 0x32d0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x95e0
movq -0x8(%rbp), %rdi
callq 0x8f80
movq %rax, %rdi
movq -0x10(%rbp), %rsi
movq -0x8(%rbp), %rdx
callq 0x11d30
jmp 0x62a6
movq -0x8(%rbp), %rdi
leaq 0xf523(%rip), %rsi      # 0x1563b
callq 0x95e0
movq -0x8(%rbp), %rdi
callq 0x8f80
movq %rax, %rdi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
movq -0x8(%rbp), %rdx
callq 0x11d30
jmp 0x62a6
movq -0x8(%rbp), %rdi
leaq 0xf4f8(%rip), %rsi      # 0x15642
callq 0x95e0
jmp 0x62a6
movq -0x8(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
leaq 0xf4d4(%rip), %rsi      # 0x1564a
movb $0x0, %al
callq 0x32d0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x95e0
jmp 0x62a6
movq -0x8(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
leaq 0xf4a9(%rip), %rsi      # 0x15661
movb $0x0, %al
callq 0x32d0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x95e0
jmp 0x62a6
movq -0x8(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
leaq 0xf481(%rip), %rsi      # 0x1567b
movb $0x0, %al
callq 0x32d0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x95e0
jmp 0x62a6
movq -0x8(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %r8
movq -0x10(%rbp), %rax
movq 0x28(%rax), %r9
leaq 0xf446(%rip), %rsi      # 0x15692
movb $0x0, %al
callq 0x32d0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x95e0
jmp 0x62a6
movq -0x8(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
movq -0x10(%rbp), %rax
movzbl 0xb(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
leaq 0xf427(%rip), %rsi      # 0x156b2
movb $0x0, %al
callq 0x32d0
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rsi
addq $0x118, %rsi            # imm = 0x118
callq 0x95e0
movq -0x10(%rbp), %rax
movzbl 0xa(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x62c6
movq -0x8(%rbp), %rdi
leaq 0xf406(%rip), %rsi      # 0x156c7
callq 0x95e0
movq -0x10(%rbp), %rax
movzbl 0xa(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x62e6
movq -0x8(%rbp), %rdi
leaq 0xf3f1(%rip), %rsi      # 0x156d2
callq 0x95e0
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)