// File: /workspace/github_c_makefile_star2_O2/msteveb[P]autosetup/./jimsh0.c
// Function: Jim_DictCoreCommand
static int Jim_DictCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
    Jim_Obj *objPtr;
    int types = JIM_DICTMATCH_KEYS;

    enum {
        OPT_CREATE,
        OPT_GET,
        OPT_GETDEF,
        OPT_GETWITHDEFAULT,
        OPT_SET,
        OPT_UNSET,
        OPT_EXISTS,
        OPT_KEYS,
        OPT_SIZE,
        OPT_INFO,
        OPT_MERGE,
        OPT_WITH,
        OPT_APPEND,
        OPT_LAPPEND,
        OPT_INCR,
        OPT_REMOVE,
        OPT_VALUES,
        OPT_FOR,
        OPT_REPLACE,
        OPT_UPDATE,
        OPT_COUNT
    };
    static const jim_subcmd_type cmds[OPT_COUNT + 1] = {
        JIM_DEF_SUBCMD("create", "?key value ...?", 0, -2),
        JIM_DEF_SUBCMD("get", "dictionary ?key ...?", 1, -1),
        JIM_DEF_SUBCMD_HIDDEN("getdef", "dictionary ?key ...? key default", 3, -1),
        JIM_DEF_SUBCMD("getwithdefault", "dictionary ?key ...? key default", 3, -1),
        JIM_DEF_SUBCMD("set", "varName key ?key ...? value", 3, -1),
        JIM_DEF_SUBCMD("unset", "varName key ?key ...?", 2, -1),
        JIM_DEF_SUBCMD("exists", "dictionary key ?key ...?", 2, -1),
        JIM_DEF_SUBCMD("keys", "dictionary ?pattern?", 1, 2),
        JIM_DEF_SUBCMD("size", "dictionary", 1, 1),
        JIM_DEF_SUBCMD("info", "dictionary", 1, 1),
        JIM_DEF_SUBCMD("merge", "?...?", 0, -1),
        JIM_DEF_SUBCMD("with", "dictVar ?key ...? script", 2, -1),
        JIM_DEF_SUBCMD("append", "varName key ?value ...?", 2, -1),
        JIM_DEF_SUBCMD("lappend",  "varName key ?value ...?", 2, -1),
        JIM_DEF_SUBCMD("incr", "varName key ?increment?", 2, 3),
        JIM_DEF_SUBCMD("remove", "dictionary ?key ...?", 1, -1),
        JIM_DEF_SUBCMD("values", "dictionary ?pattern?", 1, 2),
        JIM_DEF_SUBCMD("for", "vars dictionary script", 3, 3),
        JIM_DEF_SUBCMD("replace", "dictionary ?key value ...?", 1, -1),
        JIM_DEF_SUBCMD("update", "varName ?arg ...? script", 2, -1),
        { NULL }
    };
    const jim_subcmd_type *ct = Jim_ParseSubCmd(interp, cmds, argc, argv);
    if (!ct) {
        return JIM_ERR;
    }
    if (ct->function) {

        return ct->function(interp, argc, argv);
    }


    switch (ct - cmds) {
        case OPT_GET:
            if (Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 3, &objPtr,
                    JIM_ERRMSG) != JIM_OK) {
                return JIM_ERR;
            }
            Jim_SetResult(interp, objPtr);
            return JIM_OK;

        case OPT_GETDEF:
        case OPT_GETWITHDEFAULT:{
            int rc = Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 4, &objPtr, JIM_ERRMSG);
            if (rc == -1) {

                return JIM_ERR;
            }
            if (rc == JIM_ERR) {
                Jim_SetResult(interp, argv[argc - 1]);
            }
            else {
                Jim_SetResult(interp, objPtr);
            }
            return JIM_OK;
        }

        case OPT_SET:
            return Jim_SetDictKeysVector(interp, argv[2], argv + 3, argc - 4, argv[argc - 1], JIM_ERRMSG);

        case OPT_EXISTS:{
                int rc = Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 3, &objPtr, JIM_NONE);
                if (rc < 0) {
                    return JIM_ERR;
                }
                Jim_SetResultBool(interp,  rc == JIM_OK);
                return JIM_OK;
            }

        case OPT_UNSET:
            if (Jim_SetDictKeysVector(interp, argv[2], argv + 3, argc - 3, NULL, JIM_NONE) != JIM_OK) {
                return JIM_ERR;
            }
            return JIM_OK;

        case OPT_VALUES:
            types = JIM_DICTMATCH_VALUES;

        case OPT_KEYS:
            return Jim_DictMatchTypes(interp, argv[2], argc == 4 ? argv[3] : NULL, types, types);

        case OPT_SIZE:
            if (Jim_DictSize(interp, argv[2]) < 0) {
                return JIM_ERR;
            }
            Jim_SetResultInt(interp, Jim_DictSize(interp, argv[2]));
            return JIM_OK;

        case OPT_MERGE:
            if (argc == 2) {
                return JIM_OK;
            }
            objPtr = Jim_DictMerge(interp, argc - 2, argv + 2);
            if (objPtr == NULL) {
                return JIM_ERR;
            }
            Jim_SetResult(interp, objPtr);
            return JIM_OK;

        case OPT_CREATE:
            objPtr = Jim_NewDictObj(interp, argv + 2, argc - 2);
            Jim_SetResult(interp, objPtr);
            return JIM_OK;

        case OPT_INFO:
            return Jim_DictInfo(interp, argv[2]);

        case OPT_WITH:
            return JimDictWith(interp, argv[2], argv + 3, argc - 4, argv[argc - 1]);

        case OPT_UPDATE:
            if (argc < 6 || argc % 2) {

                argc = 2;
            }

        default:
            return Jim_EvalEnsemble(interp, "dict", Jim_String(argv[1]), argc - 2, argv + 2);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rdx, %r15
movl %esi, %r14d
movq %rdi, %rbx
leaq 0x15e36(%rip), %r12     # 0x326e0
movq %r12, %rsi
movl %r14d, %edx
movq %r15, %rcx
callq 0x10775
testq %rax, %rax
je 0x1cac7
movq 0x10(%rax), %rcx
testq %rcx, %rcx
je 0x1c8e3
movq %rbx, %rdi
movl %r14d, %esi
movq %r15, %rdx
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rcx
subq %r12, %rax
sarq $0x5, %rax
cmpq $0x13, %rax
ja 0x1c98c
leaq 0x6bf1(%rip), %rcx      # 0x234ec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%r15), %rsi
leaq 0x18(%r15), %rdx
leal -0x4(%r14), %ecx
leaq -0x30(%rbp), %r8
pushq $0x1
popq %r12
movq %rbx, %rdi
movl %r12d, %r9d
callq 0xe70b
cmpl $-0x1, %eax
je 0x1cacb
cmpl $0x1, %eax
jne 0x1cc53
movslq %r14d, %rax
movq -0x8(%r15,%rax,8), %r14
incl 0x10(%r14)
movq (%rbx), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x2, %eax
jl 0x1cc6c
jmp 0x1cc74
movq 0x10(%r15), %rsi
movq %rbx, %rdi
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x103bc
testb $0x1, %r14b
pushq $0x2
popq %rax
movl %eax, %ecx
cmovel %r14d, %ecx
cmpl $0x6, %r14d
cmovll %eax, %ecx
movl %ecx, %r14d
movq 0x8(%r15), %rdi
callq 0x7340
movq %rax, %r12
addl $-0x2, %r14d
addq $0x10, %r15
leaq 0xb3e1(%rip), %rsi      # 0x27d88
pushq $-0x1
popq %rdx
movq %rbx, %rdi
callq 0x7363
movq %rax, %r13
leaq 0xcba8(%rip), %rdx      # 0x29564
pushq $0x1
popq %rcx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x823a
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
pushq $-0x1
popq %rcx
callq 0x823a
movq %rbx, %rdi
movq %r13, %rsi
movl %r14d, %edx
movq %r15, %rcx
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf68f
pushq $0x1
jmp 0x1cb13
xorl %r12d, %r12d
cmpl $0x2, %r14d
je 0x1cacb
addl $-0x2, %r14d
addq $0x10, %r15
movq %rbx, %rdi
movl %r14d, %esi
movq %r15, %rdx
callq 0x9448
testq %rax, %rax
je 0x1cac7
movq %rax, %r14
incl 0x10(%rax)
movq (%rbx), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x1, %eax
jg 0x1ca4c
movq %rbx, %rdi
callq 0x73bf
movq %r14, (%rbx)
jmp 0x1cacb
movq 0x10(%r15), %rsi
movq %rbx, %rdi
callq 0x10391
testl %eax, %eax
js 0x1cac7
movq 0x10(%r15), %rsi
movq %rbx, %rdi
callq 0x10391
movslq %eax, %rsi
jmp 0x1caba
movq 0x10(%r15), %rsi
addq $0x18, %r15
addl $-0x3, %r14d
movq %rbx, %rdi
movq %r15, %rdx
movl %r14d, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
jmp 0x1cafe
movq 0x10(%r15), %rsi
addq $0x18, %r15
addl $-0x3, %r14d
leaq -0x30(%rbp), %r8
movq %rbx, %rdi
movq %r15, %rdx
movl %r14d, %ecx
xorl %r9d, %r9d
callq 0xe70b
testl %eax, %eax
js 0x1cac7
sete %al
movzbl %al, %esi
movq %rbx, %rdi
callq 0x8212
jmp 0x1cc1e
pushq $0x1
popq %r12
movl %r12d, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x10(%r15), %rsi
movslq %r14d, %rax
addl $-0x4, %r14d
movq -0x8(%r15,%rax,8), %r8
addq $0x18, %r15
pushq $0x1
popq %r9
movq %rbx, %rdi
movq %r15, %rdx
movl %r14d, %ecx
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xe775
pushq $0x2
popq %rcx
movq 0x10(%r15), %rsi
cmpl $0x4, %r14d
jne 0x1cb24
movq 0x18(%r15), %rdx
jmp 0x1cb26
xorl %edx, %edx
movq %rbx, %rdi
movl %ecx, %r8d
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1027a
movq 0x10(%r15), %rsi
movslq %r14d, %rax
movq %rax, -0x38(%rbp)
movq -0x8(%r15,%rax,8), %r13
pushq $0x1
popq %r12
movq %rbx, %rdi
movq %rsi, -0x58(%rbp)
movl %r12d, %edx
callq 0x9378
testq %rax, %rax
je 0x1cacb
movq %r13, -0x40(%rbp)
addq $0x18, %r15
leal -0x4(%r14), %r13d
leaq -0x30(%rbp), %r8
pushq $0x1
popq %r12
movq %rbx, %rdi
movq %rax, %rsi
movq %r15, %rdx
movl %r13d, %ecx
movl %r12d, %r9d
callq 0xe70b
testl %eax, %eax
jne 0x1cacb
movl %r13d, -0x4c(%rbp)
movq -0x30(%rbp), %rsi
leaq -0x64(%rbp), %r13
movq %rbx, %rdi
movq %r13, %rdx
callq 0xe69c
movq %rax, %rdx
movslq (%r13), %rax
movq %rax, -0x60(%rbp)
testq %rax, %rax
setne %al
testq %rdx, %rdx
sete %cl
testb %cl, %al
jne 0x1cacb
xorl %r13d, %r13d
movq %rdx, -0x48(%rbp)
cmpq -0x60(%rbp), %r13
jge 0x1cc7f
movq (%rdx,%r13,8), %rsi
movq -0x48(%rbp), %rax
movq 0x8(%rax,%r13,8), %rdx
movq %rbx, %rdi
callq 0x8306
movq -0x48(%rbp), %rdx
addq $0x2, %r13
testl %eax, %eax
je 0x1cbd8
jmp 0x1cacb
addq $0x10, %r15
addl $-0x2, %r14d
movq %rbx, %rdi
movq %r15, %rsi
movl %r14d, %edx
callq 0xe3f7
movq %rax, %r14
incl 0x10(%rax)
jmp 0x1cc5b
movq 0x10(%r15), %rsi
addq $0x18, %r15
addl $-0x3, %r14d
leaq -0x30(%rbp), %r8
pushq $0x1
popq %r12
movq %rbx, %rdi
movq %r15, %rdx
movl %r14d, %ecx
movl %r12d, %r9d
callq 0xe70b
testl %eax, %eax
jne 0x1cacb
movq -0x30(%rbp), %r14
incl 0x10(%r14)
movq (%rbx), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x1, %eax
jg 0x1cc74
movq %rbx, %rdi
callq 0x73bf
movq %r14, (%rbx)
xorl %r12d, %r12d
jmp 0x1cacb
movq -0x40(%rbp), %r12
movq %r12, %rdi
callq 0xa61a
testl %eax, %eax
je 0x1cc77
movq %rbx, %rdi
movq %r12, %rsi
callq 0x8b54
movl %eax, %r12d
testl %eax, %eax
movq -0x58(%rbp), %r13
jne 0x1cacb
xorl %r12d, %r12d
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x9378
testq %rax, %rax
je 0x1cacb
addl $-0x3, %r14d
movq -0x38(%rbp), %rax
leaq -0x18(,%rax,8), %rsi
xorl %r12d, %r12d
xorl %edi, %edi
callq *0x165ab(%rip)          # 0x33288
movq %rax, -0x38(%rbp)
movl -0x4c(%rbp), %esi
testl %esi, %esi
movl $0x0, %eax
cmovgl %esi, %eax
movq -0x48(%rbp), %rdx
movq -0x38(%rbp), %rdi
cmpq %r12, %rax
je 0x1cd08
movq (%r15,%r12,8), %rcx
movq %rcx, (%rdi,%r12,8)
incq %r12
jmp 0x1ccf6
movslq %esi, %rax
movq %rax, -0x40(%rbp)
xorl %r15d, %r15d
movq -0x58(%rbp), %r13
cmpq -0x60(%rbp), %r15
jge 0x1cd6d
movq %rdx, %r12
movq (%rdx,%r15,8), %rdx
movq %r13, %rsi
xorl %ecx, %ecx
callq 0xaa82
testl %eax, %eax
je 0x1cd64
movq (%r12,%r15,8), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x9378
movq (%r12,%r15,8), %rcx
movq -0x38(%rbp), %rdx
movq -0x40(%rbp), %rsi
movq %rcx, (%rdx,%rsi,8)
movq %rbx, %rdi
movq %r13, %rsi
movl %r14d, %ecx
movq %rax, %r8
pushq $0x10
popq %r9
callq 0xe775
addq $0x2, %r15
movq %r12, %rdx
jmp 0x1cd16
xorl %r12d, %r12d
movq -0x38(%rbp), %rdi
xorl %esi, %esi
callq *0x1650c(%rip)          # 0x33288
jmp 0x1cacb