Lines Matching +full:bat +full:- +full:temp

105 	#define LLONG_MIN    (-LLONG_MAX - 1I64)
207 # define LLONG_MIN (-LLONG_MAX - 1LL)
323 if ((ht)->type->valDestructor) \
324 (ht)->type->valDestructor((ht)->privdata, (entry)->u.val)
327 if ((ht)->type->valDup) \
328 (entry)->u.val = (ht)->type->valDup((ht)->privdata, (_val_)); \
330 (entry)->u.val = (_val_); \
333 #define Jim_SetHashIntVal(ht, entry, _val_) (entry)->u.intval = (_val_)
336 if ((ht)->type->keyDestructor) \
337 (ht)->type->keyDestructor((ht)->privdata, (entry)->key)
340 if ((ht)->type->keyDup) \
341 (entry)->key = (ht)->type->keyDup((ht)->privdata, (_key_)); \
343 (entry)->key = (void *)(_key_); \
347 (((ht)->type->keyCompare) ? \
348 (ht)->type->keyCompare((ht)->privdata, (key1), (key2)) : \
351 #define Jim_HashKey(ht, key) ((ht)->type->hashFunction(key) + (ht)->uniq)
353 #define Jim_GetHashEntryKey(he) ((he)->key)
354 #define Jim_GetHashEntryVal(he) ((he)->u.val)
355 #define Jim_GetHashEntryIntVal(he) ((he)->u.intval)
356 #define Jim_GetHashTableCollisions(ht) ((ht)->collisions)
357 #define Jim_GetHashTableSize(ht) ((ht)->size)
358 #define Jim_GetHashTableUsed(ht) ((ht)->used)
438 ++(objPtr)->refCount
440 if (--(objPtr)->refCount <= 0) Jim_FreeObj(interp, objPtr)
442 ((objPtr)->refCount > 1)
448 if ((o)->typePtr && (o)->typePtr->freeIntRepProc) \
449 (o)->typePtr->freeIntRepProc(i, o)
452 #define Jim_GetIntRepPtr(o) (o)->internalRep.ptr
456 (o)->internalRep.ptr = (p)
645 #define Jim_SetEmptyResult(i) Jim_SetResult(i, (i)->emptyObj)
646 #define Jim_GetResult(i) ((i)->result)
647 #define Jim_CmdPrivData(i) ((i)->cmdPrivData)
652 Jim_DecrRefCount(i,(i)->result); \
653 (i)->result = _resultObjPtr_; \
657 #define Jim_GetId(i) (++(i)->id)
660 #define JIM_REFERENCE_TAGLEN 7 /* The tag is fixed-length, because the reference
716 #define Jim_EvalPrefix(i, p, oc, ov) Jim_EvalObjPrefix((i), Jim_NewStringObj((i), (p), -1), (oc), (…
987 #define Jim_CheckSignal(i) ((i)->signal_level && (i)->sigmask)
1240 #define JIM_BAD_PHANDLE -1
1354 " if {[set space [string first \" \" $prefix]] != -1} {\n" in Jim_initjimshInit()
1355 " set cmd [string range $prefix 0 $space-1]\n" in Jim_initjimshInit()
1359 " return [lmap p [$cmd -commands] {\n" in Jim_initjimshInit()
1368 " return [lmap p [glob -nocomplain \"${path}*\"] {\n" in Jim_initjimshInit()
1415 " set help [$cmd -help $arg]\n" in Jim_initjimshInit()
1493 " if {$ob < $cb && $ob != -1} {\n" in Jim_globInit()
1494 " set mid [string range $pattern 0 $ob-1]\n" in Jim_globInit()
1508 " } elseif {$cb != -1} {\n" in Jim_globInit()
1509 " set suf [string range $pattern 0 $cb-1]\n" in Jim_globInit()
1579 " switch -glob -- $arg {\n" in Jim_globInit()
1580 " -d* {\n" in Jim_globInit()
1584 " -n* {\n" in Jim_globInit()
1587 " -ta* {\n" in Jim_globInit()
1590 " -- {\n" in Jim_globInit()
1594 " -* {\n" in Jim_globInit()
1595 " return -code error \"bad option \\\"$arg\\\": must be -directory, -nocomplain, -tails, or --\"… in Jim_globInit()
1604 " return -code error \"missing argument to \\\"$switch\\\"\"\n" in Jim_globInit()
1607 " return -code error \"wrong # args: should be \\\"glob ?options? pattern ?pattern ...?\\\"\"\n" in Jim_globInit()
1619 " return -code error \"unmatched close brace in glob pattern\"\n" in Jim_globInit()
1638 " return -code error \"no files matched glob pattern$s \\\"[join $args]\\\"\"\n" in Jim_globInit()
1653 "if {![exists -command ref]} {\n" in Jim_stdlibInit()
1703 " set cmd [string range $cmd 0 $nl-1]...\n" in Jim_stdlibInit()
1817 " return -code error \"must have exactly two variable names\"\n" in Jim_stdlibInit()
1841 "if {[exists -command stdout]} {\n" in Jim_tclcompatInit()
1852 " proc puts {{-nonewline {}} {chan stdout} msg} {\n" in Jim_tclcompatInit()
1853 " if {${-nonewline} ni {-nonewline {}}} {\n" in Jim_tclcompatInit()
1854 " tailcall ${-nonewline} puts $msg\n" in Jim_tclcompatInit()
1856 " tailcall $chan puts {*}${-nonewline} $msg\n" in Jim_tclcompatInit()
1863 " proc read {{-nonewline {}} chan} {\n" in Jim_tclcompatInit()
1864 " if {${-nonewline} ni {-nonewline {}}} {\n" in Jim_tclcompatInit()
1865 " tailcall ${-nonewline} read {*}${chan}\n" in Jim_tclcompatInit()
1867 " tailcall $chan read {*}${-nonewline}\n" in Jim_tclcompatInit()
1872 " switch -glob -- $n {\n" in Jim_tclcompatInit()
1873 " -bl* {\n" in Jim_tclcompatInit()
1876 " -bu* {\n" in Jim_tclcompatInit()
1879 " -tr* {\n" in Jim_tclcompatInit()
1883 " return -code error \"fconfigure: unknown option $n\"\n" in Jim_tclcompatInit()
1909 " $puts [format \"%-${max}s = %s\" $arrayname\\($name\\) $a($name)]\n" in Jim_tclcompatInit()
1916 " if {$force ni {{} -force}} {\n" in Jim_tclcompatInit()
1917 " error \"bad option \\\"$force\\\": should be -force\"\n" in Jim_tclcompatInit()
1942 " incr opts(-level)\n" in Jim_tclcompatInit()
1974 " lassign [wait $p] status - rc\n" in Jim_tclcompatInit()
1983 " set retopts [list -code error -errorcode [list $status $p $rc] $msg]\n" in Jim_tclcompatInit()
2002 " return -code error \"can not find channel named \\\"$channelId\\\"\"\n" in Jim_tclcompatInit()
2013 " return -code $code $msg\n" in Jim_tclcompatInit()
2019 " file delete -force $path/$e\n" in Jim_tclcompatInit()
2158 int ret = write(af->fd, buf, len); in stdio_writer()
2160 aio_consume(af->writebuf, Jim_Length(af->writebuf)); in stdio_writer()
2167 if (nb || af->timeout == 0 || JimReadableTimeout(af->fd, af->timeout) == JIM_OK) { in stdio_reader()
2172 ret = read(af->fd, buf, len); in stdio_reader()
2174 af->flags |= AIO_EOF; in stdio_reader()
2179 return -1; in stdio_reader()
2184 if (af->flags & AIO_EOF) { in stdio_error()
2221 int old = !!(af->flags & AIO_NONBLOCK); in aio_set_nonblocking()
2223 int fmode = fcntl(af->fd, F_GETFL); in aio_set_nonblocking()
2226 af->flags |= AIO_NONBLOCK; in aio_set_nonblocking()
2230 af->flags &= ~AIO_NONBLOCK; in aio_set_nonblocking()
2232 (void)fcntl(af->fd, F_SETFL, fmode); in aio_set_nonblocking()
2239 int old = !!(af->flags & AIO_NONBLOCK); in aio_start_nonblocking()
2240 if (af->timeout) { in aio_start_nonblocking()
2253 if (af && af->fops) in JimAioErrorString()
2254 return af->fops->strerror(af); in JimAioErrorString()
2267 Jim_SetResultString(interp, JimAioErrorString(af), -1); in JimAioSetError()
2273 return af->flags & AIO_EOF; in aio_eof()
2280 ret = af->fops->error(af); in JimCheckStreamError()
2282 JimAioSetError(interp, af->filename); in JimCheckStreamError()
2290 assert(objPtr->bytes); in aio_consume()
2291 assert(n <= objPtr->length); in aio_consume()
2294 memmove(objPtr->bytes, objPtr->bytes + n, objPtr->length - n + 1); in aio_consume()
2295 objPtr->length -= n; in aio_consume()
2307 if (Jim_Length(af->writebuf) == 0) { in aio_autoflush()
2309 return -1; in aio_autoflush()
2319 const char *pt = Jim_GetString(af->writebuf, &len); in aio_flush()
2321 int ret = af->fops->writer(af, pt, len); in aio_flush()
2324 aio_consume(af->writebuf, ret); in aio_flush()
2329 if (Jim_Length(af->writebuf)) { in aio_flush()
2331 void *handler = Jim_FindFileHandler(interp, af->fd, JIM_EVENT_WRITABLE); in aio_flush()
2333 Jim_CreateFileHandler(interp, af->fd, JIM_EVENT_WRITABLE, aio_autoflush, af, NULL); in aio_flush()
2342 Jim_SetResultString(interp, "send buffer is full", -1); in aio_flush()
2351 if (!af->readbuf) { in aio_read_len()
2352 af->readbuf = Jim_NewStringObj(interp, NULL, 0); in aio_read_len()
2356 neededLen -= Jim_Length(af->readbuf); in aio_read_len()
2366 if (neededLen == -1) { in aio_read_len()
2367 readlen = af->rbuf_len; in aio_read_len()
2370 readlen = (neededLen > af->rbuf_len ? af->rbuf_len : neededLen); in aio_read_len()
2373 if (!af->rbuf) { in aio_read_len()
2374 af->rbuf = Jim_Alloc(af->rbuf_len); in aio_read_len()
2376 retval = af->fops->reader(af, af->rbuf, readlen, flags & AIO_NONBLOCK); in aio_read_len()
2379 Jim_AppendString(interp, af->readbuf, af->rbuf, retval); in aio_read_len()
2381 if (neededLen != -1) { in aio_read_len()
2382 neededLen -= retval; in aio_read_len()
2402 if (neededLen < 0 || af->readbuf == NULL || Jim_Length(af->readbuf) <= neededLen) { in aio_read_consume()
2403 objPtr = af->readbuf; in aio_read_consume()
2404 af->readbuf = NULL; in aio_read_consume()
2406 else if (af->readbuf) { in aio_read_consume()
2409 const char *pt = Jim_GetString(af->readbuf, &len); in aio_read_consume()
2412 aio_consume(af->readbuf, neededLen); in aio_read_consume()
2426 Jim_DecrRefCount(interp, af->writebuf); in JimAioDelProc()
2429 if (af->addr_family == PF_UNIX && (af->flags & AIO_NODELETE) == 0) { in JimAioDelProc()
2431 Jim_Obj *filenameObj = aio_sockname(interp, af->fd); in JimAioDelProc()
2441 Jim_DecrRefCount(interp, af->filename); in JimAioDelProc()
2445 …Jim_DeleteFileHandler(interp, af->fd, JIM_EVENT_READABLE | JIM_EVENT_WRITABLE | JIM_EVENT_EXCEPTIO… in JimAioDelProc()
2449 if (af->ssl != NULL) { in JimAioDelProc()
2450 SSL_free(af->ssl); in JimAioDelProc()
2453 if (!(af->flags & AIO_KEEPOPEN)) { in JimAioDelProc()
2454 close(af->fd); in JimAioDelProc()
2456 if (af->readbuf) { in JimAioDelProc()
2457 Jim_FreeNewObj(interp, af->readbuf); in JimAioDelProc()
2460 Jim_Free(af->rbuf); in JimAioDelProc()
2468 jim_wide neededLen = -1; in aio_cmd_read()
2469 static const char * const options[] = { "-pending", "-nonewline", NULL }; in aio_cmd_read()
2476 if (*Jim_String(argv[0]) == '-') { in aio_cmd_read()
2493 Jim_SetResultString(interp, "invalid parameter: negative len", -1); in aio_cmd_read()
2497 argc--; in aio_cmd_read()
2501 return -1; in aio_cmd_read()
2520 if (len > 0 && s[len - 1] == '\n') { in aio_cmd_read()
2521 objPtr->length--; in aio_cmd_read()
2522 objPtr->bytes[objPtr->length] = '\0'; in aio_cmd_read()
2538 if (cmdPtr && !cmdPtr->isproc && cmdPtr->u.native.cmdProc == JimAioSubCmdProc) { in Jim_AioFilehandle()
2539 return ((AioFile *) cmdPtr->u.native.privData)->fd; in Jim_AioFilehandle()
2542 return -1; in Jim_AioFilehandle()
2552 Jim_SetResultInt(interp, af->fd); in aio_cmd_getfd()
2572 objv[1] = Jim_NewStringObj(interp, "flush", -1); in aio_cmd_copy()
2580 objv[1] = Jim_NewStringObj(interp, "puts", -1); in aio_cmd_copy()
2581 objv[2] = Jim_NewStringObj(interp, "-nonewline", -1); in aio_cmd_copy()
2586 jim_wide len = maxlen - count; in aio_cmd_copy()
2587 if (len > af->rbuf_len) { in aio_cmd_copy()
2588 len = af->rbuf_len; in aio_cmd_copy()
2603 if (count >= 16384 && af->rbuf_len < 65536) { in aio_cmd_copy()
2605 af->rbuf_len = 65536; in aio_cmd_copy()
2606 af->rbuf = Jim_Realloc(af->rbuf, af->rbuf_len); in aio_cmd_copy()
2641 if (af->readbuf) { in aio_cmd_gets()
2642 const char *pt = Jim_GetString(af->readbuf, &len); in aio_cmd_gets()
2643 nl = memchr(pt + offset, '\n', len - offset); in aio_cmd_gets()
2646 objPtr = Jim_NewStringObj(interp, pt, nl - pt); in aio_cmd_gets()
2648 aio_consume(af->readbuf, nl - pt + 1); in aio_cmd_gets()
2655 if (aio_read_len(interp, af, flags, -1) != JIM_OK) { in aio_cmd_gets()
2662 if (!nl && aio_eof(af) && af->readbuf) { in aio_cmd_gets()
2664 objPtr = af->readbuf; in aio_cmd_gets()
2665 af->readbuf = NULL; in aio_cmd_gets()
2681 len = -1; in aio_cmd_gets()
2701 if (!Jim_CompareStringImmediate(interp, argv[0], "-nonewline")) { in aio_cmd_puts()
2702 return -1; in aio_cmd_puts()
2712 if (Jim_IsShared(af->writebuf)) { in aio_cmd_puts()
2713 Jim_DecrRefCount(interp, af->writebuf); in aio_cmd_puts()
2714 af->writebuf = Jim_DuplicateObj(interp, af->writebuf); in aio_cmd_puts()
2715 Jim_IncrRefCount(af->writebuf); in aio_cmd_puts()
2718 Jim_AppendObj(interp, af->writebuf, strObj); in aio_cmd_puts()
2720 Jim_AppendString(interp, af->writebuf, "\n", 1); in aio_cmd_puts()
2724 wdata = Jim_GetString(af->writebuf, &wlen); in aio_cmd_puts()
2725 switch (af->wbuft) { in aio_cmd_puts()
2739 if (wlen >= af->wbuf_limit) { in aio_cmd_puts()
2755 Jim_SetResultInt(interp, isatty(af->fd)); in aio_cmd_isatty()
2782 int option = -1; in aio_cmd_close()
2784 static const char * const options[] = { "r", "w", "-nodelete", NULL }; in aio_cmd_close()
2795 if (shutdown(af->fd, option == OPT_R ? SHUT_RD : SHUT_WR) == 0) { in aio_cmd_close()
2803 if (af->addr_family == PF_UNIX) { in aio_cmd_close()
2804 af->flags |= AIO_NODELETE; in aio_cmd_close()
2810 Jim_SetResultString(interp, "not supported", -1); in aio_cmd_close()
2816 af->flags &= ~AIO_KEEPOPEN; in aio_cmd_close()
2835 return -1; in aio_cmd_seek()
2845 if (Jim_Lseek(af->fd, offset, orig) == -1) { in aio_cmd_seek()
2846 JimAioSetError(interp, af->filename); in aio_cmd_seek()
2849 if (af->readbuf) { in aio_cmd_seek()
2850 Jim_FreeNewObj(interp, af->readbuf); in aio_cmd_seek()
2851 af->readbuf = NULL; in aio_cmd_seek()
2853 af->flags &= ~AIO_EOF; in aio_cmd_seek()
2861 Jim_SetResultInt(interp, Jim_Lseek(af->fd, 0, SEEK_CUR)); in aio_cmd_tell()
2869 Jim_SetResult(interp, af->filename); in aio_cmd_filename()
2886 Jim_SetResultInt(interp, (af->flags & AIO_NONBLOCK) ? 1 : 0); in aio_cmd_ndelay()
2900 fsync(af->fd); in aio_cmd_sync()
2918 if (Jim_GetEnum(interp, argv[0], options, &af->wbuft, NULL, JIM_ERRMSG) != JIM_OK) { in aio_cmd_buffering()
2922 if (af->wbuft == WBUF_OPT_FULL && argc == 2) { in aio_cmd_buffering()
2927 af->wbuf_limit = l; in aio_cmd_buffering()
2930 if (af->wbuft == WBUF_OPT_NONE) { in aio_cmd_buffering()
2939 Jim_ListAppendElement(interp, resultObj, Jim_NewStringObj(interp, options[af->wbuft], -1)); in aio_cmd_buffering()
2940 if (af->wbuft == WBUF_OPT_FULL) { in aio_cmd_buffering()
2941 Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, af->wbuf_limit)); in aio_cmd_buffering()
2964 Jim_SetMode(af->fd, opt == OPT_BINARY ? O_BINARY : O_TEXT); in aio_cmd_translation()
2979 af->rbuf_len = l; in aio_cmd_readsize()
2980 if (af->rbuf) { in aio_cmd_readsize()
2981 af->rbuf = Jim_Realloc(af->rbuf, af->rbuf_len); in aio_cmd_readsize()
2984 Jim_SetResultInt(interp, af->rbuf_len); in aio_cmd_readsize()
2995 if (Jim_GetLong(interp, argv[0], &af->timeout) != JIM_OK) { in aio_cmd_timeout()
2999 Jim_SetResultInt(interp, af->timeout); in aio_cmd_timeout()
3002 Jim_SetResultString(interp, "timeout not supported", -1); in aio_cmd_timeout()
3012 Jim_Obj *objPtr = Jim_FindFileHandler(interp, af->fd, mask); in aio_eventinfo()
3020 Jim_DeleteFileHandler(interp, af->fd, mask); in aio_eventinfo()
3024 Jim_CreateScriptFileHandler(interp, af->fd, mask, argv[0]); in aio_eventinfo()
3058 if (Jim_FileStat(af->fd, &sb) == -1) { in aio_cmd_stat()
3071 "?-nonewline|len?",
3099 "?-nonewline? str",
3205 "?readable-script?",
3212 "?writable-script?",
3219 "?exception-script?",
3260 return -1; in parse_posix_open_mode()
3286 return -1; in parse_open_mode()
3337 int fd = -1; in JimAioOpenCommand()
3341 if (argc > 2 && Jim_CompareStringImmediate(interp, argv[2], "-noclose")) { in JimAioOpenCommand()
3346 Jim_WrongNumArgs(interp, 1, argv, "filename ?-noclose? ?mode?"); in JimAioOpenCommand()
3360 evalObj[i++] = Jim_NewStringObj(interp, "::popen", -1); in JimAioOpenCommand()
3361 evalObj[i++] = Jim_NewStringObj(interp, filename + 1, -1); in JimAioOpenCommand()
3372 if (openflags == -1) { in JimAioOpenCommand()
3397 cmdname = Jim_NewStringObj(interp, buf, -1); in JimMakeChannel()
3406 af->filename = filename; in JimMakeChannel()
3407 af->fd = fd; in JimMakeChannel()
3408 af->addr_family = family; in JimMakeChannel()
3409 af->fops = &stdio_fops; in JimMakeChannel()
3410 af->ssl = NULL; in JimMakeChannel()
3412 af->wbuft = WBUF_OPT_NONE; in JimMakeChannel()
3416 af->wbuft = isatty(af->fd) ? WBUF_OPT_LINE : WBUF_OPT_FULL; in JimMakeChannel()
3418 af->wbuft = WBUF_OPT_FULL; in JimMakeChannel()
3424 (void)fcntl(af->fd, F_SETFD, FD_CLOEXEC); in JimMakeChannel()
3429 af->flags |= flags; in JimMakeChannel()
3431 af->writebuf = Jim_NewStringObj(interp, NULL, 0); in JimMakeChannel()
3432 Jim_IncrRefCount(af->writebuf); in JimMakeChannel()
3433 af->wbuf_limit = AIO_DEFAULT_WBUF_LIMIT; in JimMakeChannel()
3434 af->rbuf_len = AIO_DEFAULT_RBUF_LEN; in JimMakeChannel()
3507 return JimMakeChannelPair(interp, p, Jim_NewStringObj(interp, path, -1), "aio.pty%ld", 0, 0); in JimAioOpenPtyCommand()
3508 return JimMakeChannelPair(interp, p, Jim_NewStringObj(interp, path, -1), "aio.pty%ld", 0, 0); in JimAioOpenPtyCommand()
3555 if (argc == 3 && Jim_CompareStringImmediate(interp, argv[1], "-nocomplain")) { in Jim_ReaddirCmd()
3559 Jim_WrongNumArgs(interp, 1, argv, "?-nocomplain? dirPath"); in Jim_ReaddirCmd()
3570 Jim_SetResultString(interp, strerror(errno), -1); in Jim_ReaddirCmd()
3577 if (entryPtr->d_name[0] == '.') { in Jim_ReaddirCmd()
3578 if (entryPtr->d_name[1] == '\0') { in Jim_ReaddirCmd()
3581 if ((entryPtr->d_name[1] == '.') && (entryPtr->d_name[2] == '\0')) in Jim_ReaddirCmd()
3584 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, entryPtr->d_name, -1)); in Jim_ReaddirCmd()
3615 jim_regfree(objPtr->internalRep.ptrIntValue.ptr); in FreeRegexpInternalRep()
3616 Jim_Free(objPtr->internalRep.ptrIntValue.ptr); in FreeRegexpInternalRep()
3634 if (objPtr->typePtr == &regexpObjType && in SetRegexpFromAny()
3635 objPtr->internalRep.ptrIntValue.ptr && objPtr->internalRep.ptrIntValue.int1 == flags) { in SetRegexpFromAny()
3637 return objPtr->internalRep.ptrIntValue.ptr; in SetRegexpFromAny()
3658 objPtr->typePtr = &regexpObjType; in SetRegexpFromAny()
3659 objPtr->internalRep.ptrIntValue.int1 = flags; in SetRegexpFromAny()
3660 objPtr->internalRep.ptrIntValue.ptr = compre; in SetRegexpFromAny()
3688 "-indices", "-nocase", "-line", "-all", "-inline", "-start", "--", NULL in Jim_RegexpCmd()
3694 "?-switch ...? exp string ?matchVar? ?subMatchVar ...?"); in Jim_RegexpCmd()
3701 if (*opt != '-') { in Jim_RegexpCmd()
3742 if (argc - i < 2) { in Jim_RegexpCmd()
3754 num_vars = argc - i - 2; in Jim_RegexpCmd()
3758 Jim_SetResultString(interp, "regexp match variables not allowed when using -inline", in Jim_RegexpCmd()
3759 -1); in Jim_RegexpCmd()
3763 num_vars = regex->re_nsub + 1; in Jim_RegexpCmd()
3819 if (pmatch[j].rm_so == -1) { in Jim_RegexpCmd()
3821 Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, -1)); in Jim_RegexpCmd()
3822 Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, -1)); in Jim_RegexpCmd()
3831 Jim_ListAppendElement(interp, resultObj, Jim_NewIntObj(interp, offset + eo - 1)); in Jim_RegexpCmd()
3834 …Jim_AppendString(interp, resultObj, source_str + pmatch[j].rm_so, pmatch[j].rm_eo - pmatch[j].rm_s… in Jim_RegexpCmd()
3912 "-nocase", "-line", "-all", "-start", "-command", "--", NULL in Jim_RegsubCmd()
3918 "?-switch ...? exp string subSpec ?varName?"); in Jim_RegsubCmd()
3925 if (*opt != '-') { in Jim_RegsubCmd()
3962 if (argc - i != 3 && argc - i != 4) { in Jim_RegsubCmd()
3980 … Jim_SetResultString(interp, "command prefix must be a list of at least one element", -1); in Jim_RegsubCmd()
4012 n = source_len - offset; in Jim_RegsubCmd()
4036 if (pmatch[j].rm_so == -1) { in Jim_RegsubCmd()
4040 …Jim_Obj *srcObj = Jim_NewStringObj(interp, p + pmatch[j].rm_so, pmatch[j].rm_eo - pmatch[j].rm_so); in Jim_RegsubCmd()
4051 Jim_AppendString(interp, resultObj, Jim_String(Jim_GetResult(interp)), -1); in Jim_RegsubCmd()
4065 idx = c - '0'; in Jim_RegsubCmd()
4072 … Jim_AppendString(interp, resultObj, replace_str + j - 1, (j == replace_len) ? 1 : 2); in Jim_RegsubCmd()
4080 if ((idx < MAX_SUB_MATCHES) && pmatch[idx].rm_so != -1 && pmatch[idx].rm_eo != -1) { in Jim_RegsubCmd()
4082 pmatch[idx].rm_eo - pmatch[idx].rm_so); in Jim_RegsubCmd()
4088 n -= pmatch[0].rm_eo; in Jim_RegsubCmd()
4105 n--; in Jim_RegsubCmd()
4118 Jim_AppendString(interp, resultObj, p, -1); in Jim_RegsubCmd()
4123 if (argc - i == 4) { in Jim_RegsubCmd()
4246 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, key, -1)); in AppendStatElement()
4255 AppendStatElement(interp, listObj, "dev", sb->st_dev); in Jim_FileStoreStatData()
4256 AppendStatElement(interp, listObj, "ino", sb->st_ino); in Jim_FileStoreStatData()
4257 AppendStatElement(interp, listObj, "mode", sb->st_mode); in Jim_FileStoreStatData()
4258 AppendStatElement(interp, listObj, "nlink", sb->st_nlink); in Jim_FileStoreStatData()
4259 AppendStatElement(interp, listObj, "uid", sb->st_uid); in Jim_FileStoreStatData()
4260 AppendStatElement(interp, listObj, "gid", sb->st_gid); in Jim_FileStoreStatData()
4261 AppendStatElement(interp, listObj, "size", sb->st_size); in Jim_FileStoreStatData()
4262 AppendStatElement(interp, listObj, "atime", sb->st_atime); in Jim_FileStoreStatData()
4263 AppendStatElement(interp, listObj, "mtime", sb->st_mtime); in Jim_FileStoreStatData()
4264 AppendStatElement(interp, listObj, "ctime", sb->st_ctime); in Jim_FileStoreStatData()
4268 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "type", -1)); in Jim_FileStoreStatData()
4269 …ListAppendElement(interp, listObj, Jim_NewStringObj(interp, JimGetFileType((int)sb->st_mode), -1)); in Jim_FileStoreStatData()
4307 for (i = len; i > 1 && path[i - 1] == '/'; i--) { in JimPathLenNoTrailingSlashes()
4309 if (ISWINDOWS && path[i - 2] == ':') { in JimPathLenNoTrailingSlashes()
4336 Jim_SetResultString(interp, ".", -1); in file_cmd_dirname()
4343 Jim_SetResultString(interp, "/", -1); in file_cmd_dirname()
4345 else if (ISWINDOWS && p[-1] == ':') { in file_cmd_dirname()
4347 Jim_SetResultString(interp, path, p - path + 1); in file_cmd_dirname()
4351 int len = JimPathLenNoTrailingSlashes(path, p - path); in file_cmd_dirname()
4375 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, path, pt - path)); in file_cmd_split()
4379 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, path, -1)); in file_cmd_split()
4397 Jim_SetResultString(interp, path, p - path); in file_cmd_rootname()
4412 Jim_SetResultString(interp, p, -1); in file_cmd_extension()
4424 Jim_SetResultString(interp, lastSlash + 1, -1); in file_cmd_tail()
4455 Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, newname, -1)); in file_cmd_normalize()
4487 len -= 2; in file_cmd_join()
4496 if (last != newname && last[-1] != '/') { in file_cmd_join()
4501 if (last + len - newname >= MAXPATHLEN) { in file_cmd_join()
4503 Jim_SetResultString(interp, "Path too long", -1); in file_cmd_join()
4511 if (last > newname + 1 && last[-1] == '/') { in file_cmd_join()
4513 if (!ISWINDOWS || !(last > newname + 2 && last[-2] == ':')) { in file_cmd_join()
4514 *--last = 0; in file_cmd_join()
4523 Jim_SetResult(interp, Jim_NewStringObjNoAlloc(interp, newname, last - newname)); in file_cmd_join()
4530 Jim_SetResultBool(interp, access(Jim_String(filename), mode) != -1); in file_access()
4563 int force = Jim_CompareStringImmediate(interp, argv[0], "-force"); in file_cmd_delete()
4565 if (force || Jim_CompareStringImmediate(interp, argv[0], "--")) { in file_cmd_delete()
4566 argc--; in file_cmd_delete()
4570 while (argc--) { in file_cmd_delete()
4573 if (unlink(path) == -1 && errno != ENOENT) { in file_cmd_delete()
4574 if (rmdir(path) == -1) { in file_cmd_delete()
4601 while (ok--) { in mkdir_all()
4609 return -1; in mkdir_all()
4635 return -1; in mkdir_all()
4640 while (argc--) { in file_cmd_mkdir()
4674 if (!Jim_CompareStringImmediate(interp, argv[0], "-force")) { in file_cmd_rename()
4675 return -1; in file_cmd_rename()
4679 argc--; in file_cmd_rename()
4711 static const char * const options[] = { "-hard", "-symbolic", NULL }; in file_cmd_link()
4720 argc--; in file_cmd_link()
4747 if (Jim_Stat(path, sb) == -1) { in file_stat()
4759 if (Jim_LinkStat(path, sb) == -1) { in file_lstat()
4794 Jim_SetResultString(interp, "Not implemented", -1); in JimSetFileTimes()
4899 if (linkLength == -1) { in file_cmd_readlink()
4917 Jim_SetResultString(interp, JimGetFileType((int)sb.st_mode), -1); in file_cmd_type()
4970 "?-force? source dest",
5022 -1,
5054 "?-force|--? name ...",
5057 -1,
5064 -1,
5075 "?-force? source dest",
5083 "?-symbolic|-hard? newname target",
5179 Jim_SetResultString(interp, "Failed to get pwd", -1); in Jim_PwdCmd()
5184 Jim_SetResultString(interp, cwd, -1); in Jim_PwdCmd()
5239 Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); in Jim_ExecCmd()
5282 if (len > 0 && s[len - 1] == '\n') { in Jim_RemoveTrailingNewline()
5283 objPtr->length--; in Jim_RemoveTrailingNewline()
5284 objPtr->bytes[objPtr->length] = '\0'; in Jim_RemoveTrailingNewline()
5327 num--; in JimBuildEnv()
5367 Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "NONE", -1)); in JimMakeErrorCode()
5369 Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, -1)); in JimMakeErrorCode()
5372 Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); in JimMakeErrorCode()
5392 Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, type, -1)); in JimMakeErrorCode()
5399 Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, signame, -1)); in JimMakeErrorCode()
5439 if (--table->refcount == 0) { in JimFreeWaitInfoTable()
5440 Jim_Free(table->info); in JimFreeWaitInfoTable()
5448 table->info = NULL; in JimAllocWaitInfoTable()
5449 table->size = table->used = 0; in JimAllocWaitInfoTable()
5450 table->refcount = 1; in JimAllocWaitInfoTable()
5460 for (i = 0; i < table->used; i++) { in JimWaitRemove()
5461 if (phandle == table->info[i].phandle) { in JimWaitRemove()
5462 if (i != table->used - 1) { in JimWaitRemove()
5463 table->info[i] = table->info[table->used - 1]; in JimWaitRemove()
5465 table->used--; in JimWaitRemove()
5469 return -1; in JimWaitRemove()
5483 if (argc > 1 && Jim_CompareStringImmediate(interp, argv[argc - 1], "&")) { in Jim_ExecCmd()
5487 argc--; in Jim_ExecCmd()
5488 numPids = JimCreatePipeline(interp, argc - 1, argv + 1, &pidPtr, NULL, NULL, NULL); in Jim_ExecCmd()
5504 JimCreatePipeline(interp, argc - 1, argv + 1, &pidPtr, NULL, &outputId, &errorId); in Jim_ExecCmd()
5515 if (outputId != -1) { in Jim_ExecCmd()
5530 if (errorId != -1) { in Jim_ExecCmd()
5567 return -1; in JimWaitForProcess()
5577 for (i = 0; i < table->used; i++) { in JimDetachPids()
5578 if (pidPtr[j] == table->info[i].phandle) { in JimDetachPids()
5579 table->info[i].flags |= WI_DETACHED; in JimDetachPids()
5590 objv[0] = Jim_NewStringObj(interp, name, -1); in JimGetChannelFd()
5591 objv[1] = Jim_NewStringObj(interp, "getfd", -1); in JimGetChannelFd()
5599 return -1; in JimGetChannelFd()
5612 waitPtr = table->info; in JimReapDetachedPids()
5614 for (count = table->used; count > 0; waitPtr++, count--) { in JimReapDetachedPids()
5615 if (waitPtr->flags & WI_DETACHED) { in JimReapDetachedPids()
5617 long pid = waitpid(waitPtr->phandle, &status, WNOHANG); in JimReapDetachedPids()
5620 table->used--; in JimReapDetachedPids()
5624 if (waitPtr != &table->info[dest]) { in JimReapDetachedPids()
5625 table->info[dest] = *waitPtr; in JimReapDetachedPids()
5646 if (argc > 1 && Jim_CompareStringImmediate(interp, argv[1], "-nohang")) { in Jim_WaitCommand()
5650 Jim_WrongNumArgs(interp, 1, argv, "?-nohang? ?pid?"); in Jim_WaitCommand()
5660 pid = -1; in Jim_WaitCommand()
5693 phandle_t *pidPtr = NULL; /* Points to alloc-ed array holding all in JimCreatePipeline()
5728 int inputId = -1; in JimCreatePipeline()
5729 int outputId = -1; in JimCreatePipeline()
5730 int errorId = -1; in JimCreatePipeline()
5731 int lastOutputId = -1; in JimCreatePipeline()
5749 *inPipePtr = -1; in JimCreatePipeline()
5752 *outPipePtr = -1; in JimCreatePipeline()
5755 *errFilePtr = -1; in JimCreatePipeline()
5757 pipeIds[0] = pipeIds[1] = -1; in JimCreatePipeline()
5760 lastBar = -1; in JimCreatePipeline()
5769 input_len = Jim_Length(argv[i]) - 2; in JimCreatePipeline()
5826 if (i == lastBar + 1 || i == argc - 1) { in JimCreatePipeline()
5827 Jim_SetResultString(interp, "illegal use of | or |& in command", -1); in JimCreatePipeline()
5845 Jim_SetResultString(interp, "didn't specify command to execute", -1); in JimCreatePipeline()
5848 return -1; in JimCreatePipeline()
5857 if (inputId == -1) { in JimCreatePipeline()
5861 Jim_SetResultErrno(interp, "couldn't write temp file"); in JimCreatePipeline()
5877 if (inputId == -1) { in JimCreatePipeline()
5890 pipeIds[0] = pipeIds[1] = -1; in JimCreatePipeline()
5903 if (lastOutputId == -1) { in JimCreatePipeline()
5916 pipeIds[0] = pipeIds[1] = -1; in JimCreatePipeline()
5923 if (lastOutputId != -1) { in JimCreatePipeline()
5931 if (errorId == -1) { in JimCreatePipeline()
5941 if (errorId == -1) { in JimCreatePipeline()
5949 if (errorId == -1) { in JimCreatePipeline()
5972 Jim_SetResultString(interp, "missing command to exec", -1); in JimCreatePipeline()
5980 lastOutputId = -1; in JimCreatePipeline()
6021 if (inputId != -1 && inputId != fileno(stdin)) { in JimCreatePipeline()
6025 if (outputId != -1 && outputId != fileno(stdout)) { in JimCreatePipeline()
6031 if (errorId != -1 && errorId != fileno(stderr)) { in JimCreatePipeline()
6036 if (outPipePtr && *outPipePtr != -1) { in JimCreatePipeline()
6039 if (errFilePtr && *errFilePtr != -1) { in JimCreatePipeline()
6042 if (pipeIds[0] != -1) { in JimCreatePipeline()
6045 if (lastOutputId != -1) { in JimCreatePipeline()
6069 if (table->used == table->size) { in JimCreatePipeline()
6070 table->size += WAIT_TABLE_GROW_BY; in JimCreatePipeline()
6071 table->info = Jim_Realloc(table->info, table->size * sizeof(*table->info)); in JimCreatePipeline()
6074 table->info[table->used].phandle = phandle; in JimCreatePipeline()
6075 table->info[table->used].flags = 0; in JimCreatePipeline()
6076 table->used++; in JimCreatePipeline()
6084 if (inputId != -1) { in JimCreatePipeline()
6087 if (outputId != -1) { in JimCreatePipeline()
6091 pipeIds[0] = pipeIds[1] = -1; in JimCreatePipeline()
6097 if (inputId != -1) { in JimCreatePipeline()
6100 if (lastOutputId != -1) { in JimCreatePipeline()
6103 if (errorId != -1) { in JimCreatePipeline()
6114 if ((inPipePtr != NULL) && (*inPipePtr != -1)) { in JimCreatePipeline()
6116 *inPipePtr = -1; in JimCreatePipeline()
6118 if ((outPipePtr != NULL) && (*outPipePtr != -1)) { in JimCreatePipeline()
6120 *outPipePtr = -1; in JimCreatePipeline()
6122 if ((errFilePtr != NULL) && (*errFilePtr != -1)) { in JimCreatePipeline()
6124 *errFilePtr = -1; in JimCreatePipeline()
6126 if (pipeIds[0] != -1) { in JimCreatePipeline()
6129 if (pipeIds[1] != -1) { in JimCreatePipeline()
6140 numPids = -1; in JimCreatePipeline()
6174 waitinfo->refcount++; in Jim_execInit()
6188 static char extensions[][5] = {".exe", "", ".bat"}; in JimWinFindExecutable()
6202 return -1; in JimWinFindExecutable()
6253 Jim_AppendString(interp, strObj, start, special - start); in JimWinBuildCommandLine()
6259 Jim_AppendString(interp, strObj, start, special - start); in JimWinBuildCommandLine()
6266 Jim_AppendString(interp, strObj, start, special - start); in JimWinBuildCommandLine()
6274 Jim_AppendString(interp, strObj, start, special - start); in JimWinBuildCommandLine()
6284 Jim_AppendString(interp, strObj, start, special - start); in JimWinBuildCommandLine()
6319 if (inputId == -1) { in JimStartWinProcess()
6328 if (outputId == -1) { in JimStartWinProcess()
6338 if (errorId == -1) { in JimStartWinProcess()
6423 static const char * const options[] = { "-gmt", "-format", NULL }; in parse_clock_options()
6434 if (Jim_GetBoolean(interp, argv[i + 1], &opts->gmt) != JIM_OK) { in parse_clock_options()
6439 opts->format = Jim_String(argv[i + 1]); in parse_clock_options()
6459 return -1; in clock_cmd_format()
6461 if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { in clock_cmd_format()
6469 Jim_SetResultString(interp, "format string too long or invalid time", -1); in clock_cmd_format()
6473 Jim_SetResultString(interp, buf, -1); in clock_cmd_format()
6481 int m = tm->tm_mon + 1; in jim_timegm()
6482 int y = 1900 + tm->tm_year - (m <= 2); in jim_timegm()
6483 int era = (y >= 0 ? y : y - 399) / 400; in jim_timegm()
6484 unsigned yoe = (unsigned)(y - era * 400); in jim_timegm()
6485 unsigned doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + tm->tm_mday - 1; in jim_timegm()
6486 unsigned doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; in jim_timegm()
6487 long days = (era * 146097 + (int)doe - 719468); in jim_timegm()
6488 int secs = tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; in jim_timegm()
6502 return -1; in clock_cmd_scan()
6505 if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { in clock_cmd_scan()
6509 return -1; in clock_cmd_scan()
6516 Jim_SetResultString(interp, "Failed to parse time according to format", -1); in clock_cmd_scan()
6521 tm.tm_isdst = options.gmt ? 0 : -1; in clock_cmd_scan()
6561 "seconds ?-format string? ?-gmt boolean?",
6583 "str -format format ?-gmt boolean?",
6618 Jim_SetResultInt(interp, dictObj && Jim_DictSize(interp, dictObj) != -1); in array_cmd_exists()
6680 Jim_SetResultString(interp, "", -1); in array_cmd_unset()
6737 Jim_SetResultString(interp, "list must have an even number of elements", -1); in array_cmd_set()
6959 #define JimWideValue(objPtr) (objPtr)->internalRep.wideValue
6961 #define JimObjTypeName(O) ((O)->typePtr ? (O)->typePtr->name : "none")
7004 plen--; in JimCharsetMatch()
7019 plen -= n; in JimCharsetMatch()
7028 plen -= n; in JimCharsetMatch()
7029 if (pattern[0] == '-' && plen > 1) { in JimCharsetMatch()
7033 plen -= n; in JimCharsetMatch()
7068 plen--; in JimGlobMatch()
7071 plen--; in JimGlobMatch()
7081 slen -= n; in JimGlobMatch()
7088 slen -= n; in JimGlobMatch()
7094 slen -= n; in JimGlobMatch()
7095 p = JimCharsetMatch(pattern + 1, plen - 1, c, nocase ? JIM_NOCASE : 0); in JimGlobMatch()
7099 plen -= p - pattern; in JimGlobMatch()
7111 plen--; in JimGlobMatch()
7117 slen -= n; in JimGlobMatch()
7126 plen -= n; in JimGlobMatch()
7130 plen--; in JimGlobMatch()
7152 return JimSign(c1 - c2); in JimStringCompareUtf8()
7154 minlen--; in JimStringCompareUtf8()
7158 return -1; in JimStringCompareUtf8()
7172 return -1; in JimStringFirst()
7180 for (i = idx; i <= l2 - l1; i++) { in JimStringFirst()
7187 return -1; in JimStringFirst()
7195 return -1; in JimStringLast()
7198 for (p = s2 + l2 - 1; p != s2 - 1; p--) { in JimStringLast()
7200 return p - s2; in JimStringLast()
7203 return -1; in JimStringLast()
7244 if (str[i] == '-') { in JimNumberBase()
7245 *sign = -1; in JimNumberBase()
7270 if (str[i] != '-' && str[i] != '+' && !isspace(UCHAR(str[i]))) { in JimNumberBase()
7354 if (b != -1) { in JimPowWide()
7357 e = -e; in JimPowWide()
7486 while (length--) { in Jim_GenHashFunction()
7487 result += (result << 3) + (unsigned char)(*--string); in Jim_GenHashFunction()
7496 ht->table = NULL; in JimResetHashTable()
7497 ht->size = 0; in JimResetHashTable()
7498 ht->sizemask = 0; in JimResetHashTable()
7499 ht->used = 0; in JimResetHashTable()
7500 ht->collisions = 0; in JimResetHashTable()
7502 ht->uniq = (rand() ^ time(NULL) ^ clock()); in JimResetHashTable()
7504 ht->uniq = 0; in JimResetHashTable()
7510 iter->ht = ht; in JimInitHashTableIterator()
7511 iter->index = -1; in JimInitHashTableIterator()
7512 iter->entry = NULL; in JimInitHashTableIterator()
7513 iter->nextEntry = NULL; in JimInitHashTableIterator()
7520 ht->type = type; in Jim_InitHashTable()
7521 ht->privdata = privDataPtr; in Jim_InitHashTable()
7531 if (size <= ht->used) in Jim_ExpandHashTable()
7534 Jim_InitHashTable(&n, ht->type, ht->privdata); in Jim_ExpandHashTable()
7536 n.sizemask = realsize - 1; in Jim_ExpandHashTable()
7539 n.uniq = ht->uniq; in Jim_ExpandHashTable()
7544 n.used = ht->used; in Jim_ExpandHashTable()
7545 for (i = 0; ht->used > 0; i++) { in Jim_ExpandHashTable()
7548 if (ht->table[i] == NULL) in Jim_ExpandHashTable()
7552 he = ht->table[i]; in Jim_ExpandHashTable()
7556 nextHe = he->next; in Jim_ExpandHashTable()
7558 h = Jim_HashKey(ht, he->key) & n.sizemask; in Jim_ExpandHashTable()
7559 he->next = n.table[h]; in Jim_ExpandHashTable()
7561 ht->used--; in Jim_ExpandHashTable()
7566 assert(ht->used == 0); in Jim_ExpandHashTable()
7567 Jim_Free(ht->table); in Jim_ExpandHashTable()
7592 if (entry->key) { in Jim_ReplaceHashEntry()
7593 if (ht->type->valDestructor && ht->type->valDup) { in Jim_ReplaceHashEntry()
7594 void *newval = ht->type->valDup(ht->privdata, val); in Jim_ReplaceHashEntry()
7595 ht->type->valDestructor(ht->privdata, entry->u.val); in Jim_ReplaceHashEntry()
7596 entry->u.val = newval; in Jim_ReplaceHashEntry()
7616 if (ht->used) { in Jim_DeleteHashEntry()
7617 unsigned int h = Jim_HashKey(ht, key) & ht->sizemask; in Jim_DeleteHashEntry()
7619 Jim_HashEntry *he = ht->table[h]; in Jim_DeleteHashEntry()
7622 if (Jim_CompareHashKeys(ht, key, he->key)) { in Jim_DeleteHashEntry()
7625 prevHe->next = he->next; in Jim_DeleteHashEntry()
7627 ht->table[h] = he->next; in Jim_DeleteHashEntry()
7628 ht->used--; in Jim_DeleteHashEntry()
7635 he = he->next; in Jim_DeleteHashEntry()
7647 for (i = 0; ht->used > 0; i++) { in Jim_ClearHashTable()
7650 he = ht->table[i]; in Jim_ClearHashTable()
7652 nextHe = he->next; in Jim_ClearHashTable()
7656 ht->used--; in Jim_ClearHashTable()
7659 ht->table[i] = NULL; in Jim_ClearHashTable()
7667 Jim_Free(ht->table); in Jim_FreeHashTable()
7678 if (ht->used == 0) in Jim_FindHashEntry()
7680 h = Jim_HashKey(ht, key) & ht->sizemask; in Jim_FindHashEntry()
7681 he = ht->table[h]; in Jim_FindHashEntry()
7683 if (Jim_CompareHashKeys(ht, key, he->key)) in Jim_FindHashEntry()
7685 he = he->next; in Jim_FindHashEntry()
7700 if (iter->entry == NULL) { in Jim_NextHashEntry()
7701 iter->index++; in Jim_NextHashEntry()
7702 if (iter->index >= (signed)iter->ht->size) in Jim_NextHashEntry()
7704 iter->entry = iter->ht->table[iter->index]; in Jim_NextHashEntry()
7707 iter->entry = iter->nextEntry; in Jim_NextHashEntry()
7709 if (iter->entry) { in Jim_NextHashEntry()
7710 iter->nextEntry = iter->entry->next; in Jim_NextHashEntry()
7711 return iter->entry; in Jim_NextHashEntry()
7722 if (ht->size == 0) in JimExpandHashTableIfNeeded()
7724 if (ht->size == ht->used) in JimExpandHashTableIfNeeded()
7725 Jim_ExpandHashTable(ht, ht->size * 2); in JimExpandHashTableIfNeeded()
7751 h = Jim_HashKey(ht, key) & ht->sizemask; in JimInsertHashEntry()
7753 he = ht->table[h]; in JimInsertHashEntry()
7755 if (Jim_CompareHashKeys(ht, key, he->key)) in JimInsertHashEntry()
7757 he = he->next; in JimInsertHashEntry()
7762 he->next = ht->table[h]; in JimInsertHashEntry()
7763 ht->table[h] = he; in JimInsertHashEntry()
7764 ht->used++; in JimInsertHashEntry()
7765 he->key = NULL; in JimInsertHashEntry()
7811 if (assocPtr->delProc != NULL) in JimAssocDataHashTableValueDestructor()
7812 assocPtr->delProc((Jim_Interp *)privdata, assocPtr->data); in JimAssocDataHashTableValueDestructor()
7827 stack->len = 0; in Jim_InitStack()
7828 stack->maxlen = 0; in Jim_InitStack()
7829 stack->vector = NULL; in Jim_InitStack()
7834 Jim_Free(stack->vector); in Jim_FreeStack()
7839 return stack->len; in Jim_StackLen()
7844 int neededLen = stack->len + 1; in Jim_StackPush()
7846 if (neededLen > stack->maxlen) { in Jim_StackPush()
7847 stack->maxlen = neededLen < 20 ? 20 : neededLen * 2; in Jim_StackPush()
7848 stack->vector = Jim_Realloc(stack->vector, sizeof(void *) * stack->maxlen); in Jim_StackPush()
7850 stack->vector[stack->len] = element; in Jim_StackPush()
7851 stack->len++; in Jim_StackPush()
7856 if (stack->len == 0) in Jim_StackPop()
7858 stack->len--; in Jim_StackPop()
7859 return stack->vector[stack->len]; in Jim_StackPop()
7864 if (stack->len == 0) in Jim_StackPeek()
7866 return stack->vector[stack->len - 1]; in Jim_StackPeek()
7873 for (i = 0; i < stack->len; i++) in Jim_FreeStackElements()
7874 freeFunc(stack->vector[i]); in Jim_FreeStackElements()
7948 pc->p = prg; in JimParserInit()
7949 pc->len = len; in JimParserInit()
7950 pc->tstart = NULL; in JimParserInit()
7951 pc->tend = NULL; in JimParserInit()
7952 pc->tline = 0; in JimParserInit()
7953 pc->tt = JIM_TT_NONE; in JimParserInit()
7954 pc->eof = 0; in JimParserInit()
7955 pc->inquote = 0; in JimParserInit()
7956 pc->linenr = linenr; in JimParserInit()
7957 pc->comment = 1; in JimParserInit()
7958 pc->missing.ch = ' '; in JimParserInit()
7959 pc->missing.line = linenr; in JimParserInit()
7965 if (!pc->len) { in JimParseScript()
7966 pc->tstart = pc->p; in JimParseScript()
7967 pc->tend = pc->p - 1; in JimParseScript()
7968 pc->tline = pc->linenr; in JimParseScript()
7969 pc->tt = JIM_TT_EOL; in JimParseScript()
7970 if (pc->inquote) { in JimParseScript()
7971 pc->missing.ch = '"'; in JimParseScript()
7973 pc->eof = 1; in JimParseScript()
7976 switch (*(pc->p)) { in JimParseScript()
7978 if (*(pc->p + 1) == '\n' && !pc->inquote) { in JimParseScript()
7981 pc->comment = 0; in JimParseScript()
7987 if (!pc->inquote) in JimParseScript()
7989 pc->comment = 0; in JimParseScript()
7993 pc->comment = 1; in JimParseScript()
7994 if (!pc->inquote) in JimParseScript()
7998 pc->comment = 0; in JimParseScript()
8001 pc->comment = 0; in JimParseScript()
8004 pc->tstart = pc->tend = pc->p++; in JimParseScript()
8005 pc->len--; in JimParseScript()
8006 pc->tt = JIM_TT_ESC; in JimParseScript()
8010 if (pc->comment) { in JimParseScript()
8016 pc->comment = 0; in JimParseScript()
8025 pc->tstart = pc->p; in JimParseSep()
8026 pc->tline = pc->linenr; in JimParseSep()
8027 while (isspace(UCHAR(*pc->p)) || (*pc->p == '\\' && *(pc->p + 1) == '\n')) { in JimParseSep()
8028 if (*pc->p == '\n') { in JimParseSep()
8031 if (*pc->p == '\\') { in JimParseSep()
8032 pc->p++; in JimParseSep()
8033 pc->len--; in JimParseSep()
8034 pc->linenr++; in JimParseSep()
8036 pc->p++; in JimParseSep()
8037 pc->len--; in JimParseSep()
8039 pc->tend = pc->p - 1; in JimParseSep()
8040 pc->tt = JIM_TT_SEP; in JimParseSep()
8046 pc->tstart = pc->p; in JimParseEol()
8047 pc->tline = pc->linenr; in JimParseEol()
8048 while (isspace(UCHAR(*pc->p)) || *pc->p == ';') { in JimParseEol()
8049 if (*pc->p == '\n') in JimParseEol()
8050 pc->linenr++; in JimParseEol()
8051 pc->p++; in JimParseEol()
8052 pc->len--; in JimParseEol()
8054 pc->tend = pc->p - 1; in JimParseEol()
8055 pc->tt = JIM_TT_EOL; in JimParseEol()
8065 pc->p++; in JimParseSubBrace()
8066 pc->len--; in JimParseSubBrace()
8067 while (pc->len) { in JimParseSubBrace()
8068 switch (*pc->p) { in JimParseSubBrace()
8070 if (pc->len > 1) { in JimParseSubBrace()
8071 if (*++pc->p == '\n') { in JimParseSubBrace()
8072 pc->linenr++; in JimParseSubBrace()
8074 pc->len--; in JimParseSubBrace()
8083 if (--level == 0) { in JimParseSubBrace()
8084 pc->tend = pc->p - 1; in JimParseSubBrace()
8085 pc->p++; in JimParseSubBrace()
8086 pc->len--; in JimParseSubBrace()
8092 pc->linenr++; in JimParseSubBrace()
8095 pc->p++; in JimParseSubBrace()
8096 pc->len--; in JimParseSubBrace()
8098 pc->missing.ch = '{'; in JimParseSubBrace()
8099 pc->missing.line = pc->tline; in JimParseSubBrace()
8100 pc->tend = pc->p - 1; in JimParseSubBrace()
8106 int line = pc->tline; in JimParseSubQuote()
8109 pc->p++; in JimParseSubQuote()
8110 pc->len--; in JimParseSubQuote()
8111 while (pc->len) { in JimParseSubQuote()
8112 switch (*pc->p) { in JimParseSubQuote()
8114 if (pc->len > 1) { in JimParseSubQuote()
8115 if (*++pc->p == '\n') { in JimParseSubQuote()
8116 pc->linenr++; in JimParseSubQuote()
8118 pc->len--; in JimParseSubQuote()
8124 pc->tend = pc->p - 1; in JimParseSubQuote()
8125 pc->p++; in JimParseSubQuote()
8126 pc->len--; in JimParseSubQuote()
8135 pc->linenr++; in JimParseSubQuote()
8142 pc->p++; in JimParseSubQuote()
8143 pc->len--; in JimParseSubQuote()
8145 pc->missing.ch = '"'; in JimParseSubQuote()
8146 pc->missing.line = line; in JimParseSubQuote()
8147 pc->tend = pc->p - 1; in JimParseSubQuote()
8155 int line = pc->tline; in JimParseSubCmd()
8158 pc->p++; in JimParseSubCmd()
8159 pc->len--; in JimParseSubCmd()
8160 while (pc->len) { in JimParseSubCmd()
8161 switch (*pc->p) { in JimParseSubCmd()
8163 if (pc->len > 1) { in JimParseSubCmd()
8164 if (*++pc->p == '\n') { in JimParseSubCmd()
8165 pc->linenr++; in JimParseSubCmd()
8167 pc->len--; in JimParseSubCmd()
8176 if (--level == 0) { in JimParseSubCmd()
8177 pc->tend = pc->p - 1; in JimParseSubCmd()
8178 pc->p++; in JimParseSubCmd()
8179 pc->len--; in JimParseSubCmd()
8187 if (pc->missing.ch == '"') { in JimParseSubCmd()
8200 pc->linenr++; in JimParseSubCmd()
8203 startofword = isspace(UCHAR(*pc->p)); in JimParseSubCmd()
8204 pc->p++; in JimParseSubCmd()
8205 pc->len--; in JimParseSubCmd()
8207 pc->missing.ch = '['; in JimParseSubCmd()
8208 pc->missing.line = line; in JimParseSubCmd()
8209 pc->tend = pc->p - 1; in JimParseSubCmd()
8214 pc->tstart = pc->p + 1; in JimParseBrace()
8215 pc->tline = pc->linenr; in JimParseBrace()
8216 pc->tt = JIM_TT_STR; in JimParseBrace()
8223 pc->tstart = pc->p + 1; in JimParseCmd()
8224 pc->tline = pc->linenr; in JimParseCmd()
8225 pc->tt = JIM_TT_CMD; in JimParseCmd()
8232 pc->tstart = pc->p + 1; in JimParseQuote()
8233 pc->tline = pc->linenr; in JimParseQuote()
8234 pc->tt = JimParseSubQuote(pc); in JimParseQuote()
8241 pc->p++; in JimParseVar()
8242 pc->len--; in JimParseVar()
8245 if (*pc->p == '[') { in JimParseVar()
8248 pc->tt = JIM_TT_EXPRSUGAR; in JimParseVar()
8253 pc->tstart = pc->p; in JimParseVar()
8254 pc->tt = JIM_TT_VAR; in JimParseVar()
8255 pc->tline = pc->linenr; in JimParseVar()
8257 if (*pc->p == '{') { in JimParseVar()
8258 pc->tstart = ++pc->p; in JimParseVar()
8259 pc->len--; in JimParseVar()
8261 while (pc->len && *pc->p != '}') { in JimParseVar()
8262 if (*pc->p == '\n') { in JimParseVar()
8263 pc->linenr++; in JimParseVar()
8265 pc->p++; in JimParseVar()
8266 pc->len--; in JimParseVar()
8268 pc->tend = pc->p - 1; in JimParseVar()
8269 if (pc->len) { in JimParseVar()
8270 pc->p++; in JimParseVar()
8271 pc->len--; in JimParseVar()
8277 if (pc->p[0] == ':' && pc->p[1] == ':') { in JimParseVar()
8278 while (*pc->p == ':') { in JimParseVar()
8279 pc->p++; in JimParseVar()
8280 pc->len--; in JimParseVar()
8284 if (isalnum(UCHAR(*pc->p)) || *pc->p == '_' || UCHAR(*pc->p) >= 0x80) { in JimParseVar()
8285 pc->p++; in JimParseVar()
8286 pc->len--; in JimParseVar()
8292 if (*pc->p == '(') { in JimParseVar()
8296 pc->tt = JIM_TT_DICTSUGAR; in JimParseVar()
8298 while (count && pc->len) { in JimParseVar()
8299 pc->p++; in JimParseVar()
8300 pc->len--; in JimParseVar()
8301 if (*pc->p == '\\' && pc->len >= 1) { in JimParseVar()
8302 pc->p++; in JimParseVar()
8303 pc->len--; in JimParseVar()
8305 else if (*pc->p == '(') { in JimParseVar()
8308 else if (*pc->p == ')') { in JimParseVar()
8309 paren = pc->p; in JimParseVar()
8310 count--; in JimParseVar()
8314 pc->p++; in JimParseVar()
8315 pc->len--; in JimParseVar()
8320 pc->len += (pc->p - paren); in JimParseVar()
8321 pc->p = paren; in JimParseVar()
8324 if (*pc->tstart == '(') { in JimParseVar()
8325 pc->tt = JIM_TT_EXPRSUGAR; in JimParseVar()
8329 pc->tend = pc->p - 1; in JimParseVar()
8331 if (pc->tstart == pc->p) { in JimParseVar()
8332 pc->p--; in JimParseVar()
8333 pc->len++; in JimParseVar()
8341 if (pc->tt == JIM_TT_SEP || pc->tt == JIM_TT_EOL || in JimParseStr()
8342 pc->tt == JIM_TT_NONE || pc->tt == JIM_TT_STR) { in JimParseStr()
8344 if (*pc->p == '{') { in JimParseStr()
8347 if (*pc->p == '"') { in JimParseStr()
8348 pc->inquote = 1; in JimParseStr()
8349 pc->p++; in JimParseStr()
8350 pc->len--; in JimParseStr()
8352 pc->missing.line = pc->tline; in JimParseStr()
8355 pc->tstart = pc->p; in JimParseStr()
8356 pc->tline = pc->linenr; in JimParseStr()
8358 if (pc->len == 0) { in JimParseStr()
8359 if (pc->inquote) { in JimParseStr()
8360 pc->missing.ch = '"'; in JimParseStr()
8362 pc->tend = pc->p - 1; in JimParseStr()
8363 pc->tt = JIM_TT_ESC; in JimParseStr()
8366 switch (*pc->p) { in JimParseStr()
8368 if (!pc->inquote && *(pc->p + 1) == '\n') { in JimParseStr()
8369 pc->tend = pc->p - 1; in JimParseStr()
8370 pc->tt = JIM_TT_ESC; in JimParseStr()
8373 if (pc->len >= 2) { in JimParseStr()
8374 if (*(pc->p + 1) == '\n') { in JimParseStr()
8375 pc->linenr++; in JimParseStr()
8377 pc->p++; in JimParseStr()
8378 pc->len--; in JimParseStr()
8380 else if (pc->len == 1) { in JimParseStr()
8382 pc->missing.ch = '\\'; in JimParseStr()
8387 if (pc->len > 1 && pc->p[1] != '$') { in JimParseStr()
8393 if (*pc->p == '(' || pc->tt == JIM_TT_VAR) { in JimParseStr()
8394 if (pc->p == pc->tstart) { in JimParseStr()
8396 pc->p++; in JimParseStr()
8397 pc->len--; in JimParseStr()
8399 pc->tend = pc->p - 1; in JimParseStr()
8400 pc->tt = JIM_TT_ESC; in JimParseStr()
8407 pc->tend = pc->p - 1; in JimParseStr()
8408 pc->tt = JIM_TT_ESC; in JimParseStr()
8416 if (!pc->inquote) { in JimParseStr()
8417 pc->tend = pc->p - 1; in JimParseStr()
8418 pc->tt = JIM_TT_ESC; in JimParseStr()
8421 else if (*pc->p == '\n') { in JimParseStr()
8422 pc->linenr++; in JimParseStr()
8426 if (pc->inquote) { in JimParseStr()
8427 pc->tend = pc->p - 1; in JimParseStr()
8428 pc->tt = JIM_TT_ESC; in JimParseStr()
8429 pc->p++; in JimParseStr()
8430 pc->len--; in JimParseStr()
8431 pc->inquote = 0; in JimParseStr()
8436 pc->p++; in JimParseStr()
8437 pc->len--; in JimParseStr()
8444 while (*pc->p) { in JimParseComment()
8445 if (*pc->p == '\\') { in JimParseComment()
8446 pc->p++; in JimParseComment()
8447 pc->len--; in JimParseComment()
8448 if (pc->len == 0) { in JimParseComment()
8449 pc->missing.ch = '\\'; in JimParseComment()
8452 if (*pc->p == '\n') { in JimParseComment()
8453 pc->linenr++; in JimParseComment()
8456 else if (*pc->p == '\n') { in JimParseComment()
8457 pc->p++; in JimParseComment()
8458 pc->len--; in JimParseComment()
8459 pc->linenr++; in JimParseComment()
8462 pc->p++; in JimParseComment()
8463 pc->len--; in JimParseComment()
8472 return c - '0'; in xdigitval()
8474 return c - 'a' + 10; in xdigitval()
8476 return c - 'A' + 10; in xdigitval()
8477 return -1; in xdigitval()
8483 return c - '0'; in odigitval()
8484 return -1; in odigitval()
8545 if (c == -1) { in JimEscape()
8554 i--; in JimEscape()
8607 if (c == -1) { in JimEscape()
8614 if (c == -1) { in JimEscape()
8635 len = p - dest; in JimEscape()
8646 start = pc->tstart; in JimParserGetTokenObj()
8647 end = pc->tend; in JimParserGetTokenObj()
8648 len = (end - start) + 1; in JimParserGetTokenObj()
8653 if (pc->tt != JIM_TT_ESC) { in JimParserGetTokenObj()
8672 if (isspace(UCHAR(*pc->p))) { in JimParseList()
8675 switch (*pc->p) { in JimParseList()
8683 if (pc->len) { in JimParseList()
8689 pc->tstart = pc->tend = pc->p; in JimParseList()
8690 pc->tline = pc->linenr; in JimParseList()
8691 pc->tt = JIM_TT_EOL; in JimParseList()
8692 pc->eof = 1; in JimParseList()
8698 pc->tstart = pc->p; in JimParseListSep()
8699 pc->tline = pc->linenr; in JimParseListSep()
8700 while (isspace(UCHAR(*pc->p))) { in JimParseListSep()
8701 if (*pc->p == '\n') { in JimParseListSep()
8702 pc->linenr++; in JimParseListSep()
8704 pc->p++; in JimParseListSep()
8705 pc->len--; in JimParseListSep()
8707 pc->tend = pc->p - 1; in JimParseListSep()
8708 pc->tt = JIM_TT_SEP; in JimParseListSep()
8714 pc->p++; in JimParseListQuote()
8715 pc->len--; in JimParseListQuote()
8717 pc->tstart = pc->p; in JimParseListQuote()
8718 pc->tline = pc->linenr; in JimParseListQuote()
8719 pc->tt = JIM_TT_STR; in JimParseListQuote()
8721 while (pc->len) { in JimParseListQuote()
8722 switch (*pc->p) { in JimParseListQuote()
8724 pc->tt = JIM_TT_ESC; in JimParseListQuote()
8725 if (--pc->len == 0) { in JimParseListQuote()
8727 pc->tend = pc->p; in JimParseListQuote()
8730 pc->p++; in JimParseListQuote()
8733 pc->linenr++; in JimParseListQuote()
8736 pc->tend = pc->p - 1; in JimParseListQuote()
8737 pc->p++; in JimParseListQuote()
8738 pc->len--; in JimParseListQuote()
8741 pc->p++; in JimParseListQuote()
8742 pc->len--; in JimParseListQuote()
8745 pc->tend = pc->p - 1; in JimParseListQuote()
8751 pc->tstart = pc->p; in JimParseListStr()
8752 pc->tline = pc->linenr; in JimParseListStr()
8753 pc->tt = JIM_TT_STR; in JimParseListStr()
8755 while (pc->len) { in JimParseListStr()
8756 if (isspace(UCHAR(*pc->p))) { in JimParseListStr()
8757 pc->tend = pc->p - 1; in JimParseListStr()
8760 if (*pc->p == '\\') { in JimParseListStr()
8761 if (--pc->len == 0) { in JimParseListStr()
8763 pc->tend = pc->p; in JimParseListStr()
8766 pc->tt = JIM_TT_ESC; in JimParseListStr()
8767 pc->p++; in JimParseListStr()
8769 pc->p++; in JimParseListStr()
8770 pc->len--; in JimParseListStr()
8772 pc->tend = pc->p - 1; in JimParseListStr()
8783 if (interp->freeList != NULL) { in Jim_NewObj()
8785 objPtr = interp->freeList; in Jim_NewObj()
8786 interp->freeList = objPtr->nextObjPtr; in Jim_NewObj()
8793 objPtr->refCount = 0; in Jim_NewObj()
8796 objPtr->prevObjPtr = NULL; in Jim_NewObj()
8797 objPtr->nextObjPtr = interp->liveList; in Jim_NewObj()
8798 if (interp->liveList) in Jim_NewObj()
8799 interp->liveList->prevObjPtr = objPtr; in Jim_NewObj()
8800 interp->liveList = objPtr; in Jim_NewObj()
8808 JimPanic((objPtr->refCount != 0, "!!!Object %p freed with bad refcount %d, type=%s", objPtr, in Jim_FreeObj()
8809 objPtr->refCount, objPtr->typePtr ? objPtr->typePtr->name : "<none>")); in Jim_FreeObj()
8814 if (objPtr->bytes != NULL) { in Jim_FreeObj()
8815 if (objPtr->bytes != JimEmptyStringRep) in Jim_FreeObj()
8816 Jim_Free(objPtr->bytes); in Jim_FreeObj()
8819 if (objPtr->prevObjPtr) in Jim_FreeObj()
8820 objPtr->prevObjPtr->nextObjPtr = objPtr->nextObjPtr; in Jim_FreeObj()
8821 if (objPtr->nextObjPtr) in Jim_FreeObj()
8822 objPtr->nextObjPtr->prevObjPtr = objPtr->prevObjPtr; in Jim_FreeObj()
8823 if (interp->liveList == objPtr) in Jim_FreeObj()
8824 interp->liveList = objPtr->nextObjPtr; in Jim_FreeObj()
8829 objPtr->prevObjPtr = NULL; in Jim_FreeObj()
8830 objPtr->nextObjPtr = interp->freeList; in Jim_FreeObj()
8831 if (interp->freeList) in Jim_FreeObj()
8832 interp->freeList->prevObjPtr = objPtr; in Jim_FreeObj()
8833 interp->freeList = objPtr; in Jim_FreeObj()
8834 objPtr->refCount = -1; in Jim_FreeObj()
8841 if (objPtr->bytes != NULL) { in Jim_InvalidateStringRep()
8842 if (objPtr->bytes != JimEmptyStringRep) in Jim_InvalidateStringRep()
8843 Jim_Free(objPtr->bytes); in Jim_InvalidateStringRep()
8845 objPtr->bytes = NULL; in Jim_InvalidateStringRep()
8854 if (objPtr->bytes == NULL) { in Jim_DuplicateObj()
8856 dupPtr->bytes = NULL; in Jim_DuplicateObj()
8858 else if (objPtr->length == 0) { in Jim_DuplicateObj()
8859 dupPtr->bytes = JimEmptyStringRep; in Jim_DuplicateObj()
8860 dupPtr->length = 0; in Jim_DuplicateObj()
8861 dupPtr->typePtr = NULL; in Jim_DuplicateObj()
8865 dupPtr->bytes = Jim_Alloc(objPtr->length + 1); in Jim_DuplicateObj()
8866 dupPtr->length = objPtr->length; in Jim_DuplicateObj()
8868 memcpy(dupPtr->bytes, objPtr->bytes, objPtr->length + 1); in Jim_DuplicateObj()
8872 dupPtr->typePtr = objPtr->typePtr; in Jim_DuplicateObj()
8873 if (objPtr->typePtr != NULL) { in Jim_DuplicateObj()
8874 if (objPtr->typePtr->dupIntRepProc == NULL) { in Jim_DuplicateObj()
8875 dupPtr->internalRep = objPtr->internalRep; in Jim_DuplicateObj()
8879 objPtr->typePtr->dupIntRepProc(interp, objPtr, dupPtr); in Jim_DuplicateObj()
8887 if (objPtr->bytes == NULL) { in Jim_GetString()
8889 …JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.",… in Jim_GetString()
8890 objPtr->typePtr->updateStringProc(objPtr); in Jim_GetString()
8893 *lenPtr = objPtr->length; in Jim_GetString()
8894 return objPtr->bytes; in Jim_GetString()
8900 if (objPtr->bytes == NULL) { in Jim_Length()
8904 return objPtr->length; in Jim_Length()
8910 if (objPtr->bytes == NULL) { in Jim_String()
8914 return objPtr->bytes; in Jim_String()
8919 objPtr->bytes = Jim_StrDup(str); in JimSetStringBytes()
8920 objPtr->length = strlen(str); in JimSetStringBytes()
8927 "dict-substitution",
8947 Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.indexObjPtr); in FreeInterpolatedInternalRep()
8953 dupPtr->internalRep = srcPtr->internalRep; in DupInterpolatedInternalRep()
8955 Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.indexObjPtr); in DupInterpolatedInternalRep()
8973 dupPtr->internalRep.strValue.maxLength = srcPtr->length; in DupStringInternalRep()
8974 dupPtr->internalRep.strValue.charLength = srcPtr->internalRep.strValue.charLength; in DupStringInternalRep()
8979 if (objPtr->typePtr != &stringObjType) { in SetStringFromAny()
8981 if (objPtr->bytes == NULL) { in SetStringFromAny()
8983 …JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.",… in SetStringFromAny()
8984 objPtr->typePtr->updateStringProc(objPtr); in SetStringFromAny()
8989 objPtr->typePtr = &stringObjType; in SetStringFromAny()
8990 objPtr->internalRep.strValue.maxLength = objPtr->length; in SetStringFromAny()
8992 objPtr->internalRep.strValue.charLength = -1; in SetStringFromAny()
9002 if (objPtr->internalRep.strValue.charLength < 0) { in Jim_Utf8Length()
9003 objPtr->internalRep.strValue.charLength = utf8_strlen(objPtr->bytes, objPtr->length); in Jim_Utf8Length()
9005 return objPtr->internalRep.strValue.charLength; in Jim_Utf8Length()
9017 if (len == -1) in Jim_NewStringObj()
9021 objPtr->bytes = JimEmptyStringRep; in Jim_NewStringObj()
9024 objPtr->bytes = Jim_StrDupLen(s, len); in Jim_NewStringObj()
9026 objPtr->length = len; in Jim_NewStringObj()
9029 objPtr->typePtr = NULL; in Jim_NewStringObj()
9043 objPtr->typePtr = &stringObjType; in Jim_NewStringObjUtf8()
9044 objPtr->internalRep.strValue.maxLength = bytelen; in Jim_NewStringObjUtf8()
9045 objPtr->internalRep.strValue.charLength = charlen; in Jim_NewStringObjUtf8()
9057 objPtr->bytes = s; in Jim_NewStringObjNoAlloc()
9058 objPtr->length = (len == -1) ? strlen(s) : len; in Jim_NewStringObjNoAlloc()
9059 objPtr->typePtr = NULL; in Jim_NewStringObjNoAlloc()
9067 if (len == -1) in StringAppendString()
9069 needlen = objPtr->length + len; in StringAppendString()
9070 if (objPtr->internalRep.strValue.maxLength < needlen || in StringAppendString()
9071 objPtr->internalRep.strValue.maxLength == 0) { in StringAppendString()
9077 if (objPtr->bytes == JimEmptyStringRep) { in StringAppendString()
9078 objPtr->bytes = Jim_Alloc(needlen + 1); in StringAppendString()
9081 objPtr->bytes = Jim_Realloc(objPtr->bytes, needlen + 1); in StringAppendString()
9083 objPtr->internalRep.strValue.maxLength = needlen; in StringAppendString()
9085 memcpy(objPtr->bytes + objPtr->length, str, len); in StringAppendString()
9086 objPtr->bytes[objPtr->length + len] = '\0'; in StringAppendString()
9088 if (objPtr->internalRep.strValue.charLength >= 0) { in StringAppendString()
9090 objPtr->internalRep.strValue.charLength += utf8_strlen(objPtr->bytes + objPtr->length, len); in StringAppendString()
9092 objPtr->length += len; in StringAppendString()
9120 Jim_AppendString(interp, objPtr, s, -1); in Jim_AppendStrings()
9158 if (idx < 0 && idx > -INT_MAX) in JimRelToAbsIndex()
9171 rangeLen = *lastPtr - *firstPtr + 1; in JimRelToAbsRange()
9178 rangeLen -= (*lastPtr - (len - 1)); in JimRelToAbsRange()
9179 *lastPtr = len - 1; in JimRelToAbsRange()
9282 Jim_AppendString(interp, objPtr, str + utf8_index(str, last + 1), len - last - 1); in JimStringReplaceObj()
9310 return Jim_NewStringObjNoAlloc(interp, buf, -1); in JimStringToLower()
9326 return Jim_NewStringObjNoAlloc(interp, buf, -1); in JimStringToUpper()
9348 return Jim_NewStringObjNoAlloc(interp, buf, -1); in JimStringToTitle()
9361 len -= n; in utf8_memchr()
9380 len -= n; in JimFindTrimLeft()
9393 len -= n; in JimFindTrimRight()
9394 str -= n; in JimFindTrimRight()
9427 return Jim_NewStringObj(interp, newstr, len - (newstr - str)); in JimStringTrimLeft()
9444 nontrim = JimFindTrimRight(strObjPtr->bytes, len, trimchars, trimcharslen); in JimStringTrimRight()
9450 if (nontrim == strObjPtr->bytes + len) { in JimStringTrimRight()
9456 strObjPtr = Jim_NewStringObj(interp, strObjPtr->bytes, (nontrim - strObjPtr->bytes)); in JimStringTrimRight()
9460 strObjPtr->bytes[nontrim - strObjPtr->bytes] = 0; in JimStringTrimRight()
9461 strObjPtr->length = (nontrim - strObjPtr->bytes); in JimStringTrimRight()
9476 if (objPtr != strObjPtr && objPtr->refCount == 0) { in JimStringTrim()
9574 "compared-string",
9583 if (objPtr->typePtr == &comparedStringObjType && objPtr->internalRep.ptr == str) { in Jim_CompareStringImmediate()
9590 if (objPtr->typePtr != &comparedStringObjType) { in Jim_CompareStringImmediate()
9592 objPtr->typePtr = &comparedStringObjType; in Jim_CompareStringImmediate()
9594 objPtr->internalRep.ptr = (char *)str; in Jim_CompareStringImmediate()
9622 Jim_DecrRefCount(interp, objPtr->internalRep.sourceValue.fileNameObj); in FreeSourceInternalRep()
9627 dupPtr->internalRep.sourceValue = srcPtr->internalRep.sourceValue; in DupSourceInternalRep()
9628 Jim_IncrRefCount(dupPtr->internalRep.sourceValue.fileNameObj); in DupSourceInternalRep()
9646 objPtr = Jim_NewStringObj(interp, buf, -1); in JimNewScriptLineObj()
9650 objPtr->typePtr = &scriptLineObjType; in JimNewScriptLineObj()
9651 objPtr->internalRep.scriptLineValue.argc = argc; in JimNewScriptLineObj()
9652 objPtr->internalRep.scriptLineValue.line = line; in JimNewScriptLineObj()
9696 struct ScriptObj *script = (void *)objPtr->internalRep.ptr; in FreeScriptInternalRep()
9698 if (--script->inUse != 0) in FreeScriptInternalRep()
9700 for (i = 0; i < script->len; i++) { in FreeScriptInternalRep()
9701 Jim_DecrRefCount(interp, script->token[i].objPtr); in FreeScriptInternalRep()
9703 Jim_Free(script->token); in FreeScriptInternalRep()
9704 Jim_DecrRefCount(interp, script->fileNameObj); in FreeScriptInternalRep()
9713 dupPtr->typePtr = NULL; in DupScriptInternalRep()
9735 tokenlist->list = tokenlist->static_list; in ScriptTokenListInit()
9736 tokenlist->size = sizeof(tokenlist->static_list) / sizeof(ParseToken); in ScriptTokenListInit()
9737 tokenlist->count = 0; in ScriptTokenListInit()
9742 if (tokenlist->list != tokenlist->static_list) { in ScriptTokenListFree()
9743 Jim_Free(tokenlist->list); in ScriptTokenListFree()
9752 if (tokenlist->count == tokenlist->size) { in ScriptAddToken()
9754 tokenlist->size *= 2; in ScriptAddToken()
9755 if (tokenlist->list != tokenlist->static_list) { in ScriptAddToken()
9756 tokenlist->list = in ScriptAddToken()
9757 Jim_Realloc(tokenlist->list, tokenlist->size * sizeof(*tokenlist->list)); in ScriptAddToken()
9761 tokenlist->list = Jim_Alloc(tokenlist->size * sizeof(*tokenlist->list)); in ScriptAddToken()
9762 memcpy(tokenlist->list, tokenlist->static_list, in ScriptAddToken()
9763 tokenlist->count * sizeof(*tokenlist->list)); in ScriptAddToken()
9766 t = &tokenlist->list[tokenlist->count++]; in ScriptAddToken()
9767 t->token = token; in ScriptAddToken()
9768 t->len = len; in ScriptAddToken()
9769 t->type = type; in ScriptAddToken()
9770 t->line = line; in ScriptAddToken()
9779 if (t->type == JIM_TT_STR && !TOKEN_IS_SEP(t[1].type)) { in JimCountWordTokens()
9780 … if ((t->len == 1 && *t->token == '*') || (t->len == 6 && strncmp(t->token, "expand", 6) == 0)) { in JimCountWordTokens()
9782 expand = -1; in JimCountWordTokens()
9786 if (script->missing == ' ') { in JimCountWordTokens()
9788 script->missing = '}'; in JimCountWordTokens()
9789 script->linenr = t[1].line; in JimCountWordTokens()
9795 while (!TOKEN_IS_SEP(t->type)) { in JimCountWordTokens()
9807 if (t->type == JIM_TT_ESC && memchr(t->token, '\\', t->len) != NULL) { in JimMakeScriptObj()
9809 int len = t->len; in JimMakeScriptObj()
9811 len = JimEscape(str, t->token, len); in JimMakeScriptObj()
9815 objPtr = Jim_NewStringObj(interp, t->token, t->len); in JimMakeScriptObj()
9834 for (i = 0; i < tokenlist->count; i++) { in ScriptObjAddTokens()
9835 … printf("[%2d]@%d %s '%.*s'\n", i, tokenlist->list[i].line, jim_tt_name(tokenlist->list[i].type), in ScriptObjAddTokens()
9836 tokenlist->list[i].len, tokenlist->list[i].token); in ScriptObjAddTokens()
9841 count = tokenlist->count; in ScriptObjAddTokens()
9842 for (i = 0; i < tokenlist->count; i++) { in ScriptObjAddTokens()
9843 if (tokenlist->list[i].type == JIM_TT_EOL) { in ScriptObjAddTokens()
9847 linenr = script->firstline = tokenlist->list[0].line; in ScriptObjAddTokens()
9849 token = script->token = Jim_Alloc(sizeof(ScriptToken) * count); in ScriptObjAddTokens()
9854 for (i = 0; i < tokenlist->count; ) { in ScriptObjAddTokens()
9859 while (tokenlist->list[i].type == JIM_TT_SEP) { in ScriptObjAddTokens()
9863 wordtokens = JimCountWordTokens(script, tokenlist->list + i); in ScriptObjAddTokens()
9868 linefirst->type = JIM_TT_LINE; in ScriptObjAddTokens()
9869 linefirst->objPtr = JimNewScriptLineObj(interp, lineargs, linenr); in ScriptObjAddTokens()
9870 Jim_IncrRefCount(linefirst->objPtr); in ScriptObjAddTokens()
9881 token->type = JIM_TT_WORD; in ScriptObjAddTokens()
9882 token->objPtr = Jim_NewIntObj(interp, wordtokens); in ScriptObjAddTokens()
9883 Jim_IncrRefCount(token->objPtr); in ScriptObjAddTokens()
9888 wordtokens = -wordtokens - 1; in ScriptObjAddTokens()
9889 lineargs--; in ScriptObjAddTokens()
9895 linenr = tokenlist->list[i].line; in ScriptObjAddTokens()
9900 while (wordtokens--) { in ScriptObjAddTokens()
9901 const ParseToken *t = &tokenlist->list[i++]; in ScriptObjAddTokens()
9903 token->type = t->type; in ScriptObjAddTokens()
9904 token->objPtr = JimMakeScriptObj(interp, t); in ScriptObjAddTokens()
9905 Jim_IncrRefCount(token->objPtr); in ScriptObjAddTokens()
9907 Jim_SetSourceInfo(interp, token->objPtr, script->fileNameObj, t->line); in ScriptObjAddTokens()
9913 token--; in ScriptObjAddTokens()
9916 script->len = token - script->token; in ScriptObjAddTokens()
9918 JimPanic((script->len >= count, "allocated script array is too short")); in ScriptObjAddTokens()
9921 printf("==== Script (%s) ====\n", Jim_String(script->fileNameObj)); in ScriptObjAddTokens()
9922 for (i = 0; i < script->len; i++) { in ScriptObjAddTokens()
9923 const ScriptToken *t = &script->token[i]; in ScriptObjAddTokens()
9924 printf("[%2d] %s %s\n", i, jim_tt_name(t->type), Jim_String(t->objPtr)); in ScriptObjAddTokens()
9934 *stateCharPtr = script->missing; in Jim_ScriptIsComplete()
9936 return script->missing == ' ' || script->missing == '}'; in Jim_ScriptIsComplete()
9952 msg = "missing close-brace"; in JimParseCheckMissing()
9955 msg = "extra characters after close-brace"; in JimParseCheckMissing()
9963 Jim_SetResultString(interp, msg, -1); in JimParseCheckMissing()
9972 if (objPtr->typePtr == &sourceObjType) { in Jim_GetSourceInfo()
9973 fileNameObj = objPtr->internalRep.sourceValue.fileNameObj; in Jim_GetSourceInfo()
9974 line = objPtr->internalRep.sourceValue.lineNumber; in Jim_GetSourceInfo()
9976 else if (objPtr->typePtr == &scriptObjType) { in Jim_GetSourceInfo()
9978 fileNameObj = script->fileNameObj; in Jim_GetSourceInfo()
9979 line = script->firstline; in Jim_GetSourceInfo()
9982 fileNameObj = interp->emptyObj; in Jim_GetSourceInfo()
9995 objPtr->internalRep.sourceValue.fileNameObj = fileNameObj; in Jim_SetSourceInfo()
9996 objPtr->internalRep.sourceValue.lineNumber = lineNumber; in Jim_SetSourceInfo()
9997 objPtr->typePtr = &sourceObjType; in Jim_SetSourceInfo()
10006 token = script->token = Jim_Alloc(sizeof(ScriptToken) * tokenlist->count); in SubstObjAddTokens()
10008 for (i = 0; i < tokenlist->count; i++) { in SubstObjAddTokens()
10009 const ParseToken *t = &tokenlist->list[i]; in SubstObjAddTokens()
10012 token->type = t->type; in SubstObjAddTokens()
10013 token->objPtr = JimMakeScriptObj(interp, t); in SubstObjAddTokens()
10014 Jim_IncrRefCount(token->objPtr); in SubstObjAddTokens()
10018 script->len = i; in SubstObjAddTokens()
10040 ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, in JimSetScriptFromAny()
10050 script->inUse = 1; in JimSetScriptFromAny()
10051 script->fileNameObj = fileNameObj; in JimSetScriptFromAny()
10052 Jim_IncrRefCount(script->fileNameObj); in JimSetScriptFromAny()
10053 script->missing = parser.missing.ch; in JimSetScriptFromAny()
10054 script->linenr = parser.missing.line; in JimSetScriptFromAny()
10064 objPtr->typePtr = &scriptObjType; in JimSetScriptFromAny()
10069 if (objPtr == interp->emptyObj) { in JimGetScript()
10071 objPtr = interp->nullScriptObj; in JimGetScript()
10074 …if (objPtr->typePtr != &scriptObjType || ((struct ScriptObj *)Jim_GetIntRepPtr(objPtr))->substFlag… in JimGetScript()
10083 interp->procEpoch++; in Jim_InterpIncrProcEpoch()
10086 while (interp->oldCmdCache) { in Jim_InterpIncrProcEpoch()
10087 Jim_Cmd *next = interp->oldCmdCache->prevCmd; in Jim_InterpIncrProcEpoch()
10088 Jim_Free(interp->oldCmdCache); in Jim_InterpIncrProcEpoch()
10089 interp->oldCmdCache = next; in Jim_InterpIncrProcEpoch()
10091 interp->oldCmdCacheSize = 0; in Jim_InterpIncrProcEpoch()
10096 cmdPtr->inUse++; in JimIncrCmdRefCount()
10101 if (--cmdPtr->inUse == 0) { in JimDecrCmdRefCount()
10102 if (cmdPtr->isproc) { in JimDecrCmdRefCount()
10103 Jim_DecrRefCount(interp, cmdPtr->u.proc.argListObjPtr); in JimDecrCmdRefCount()
10104 Jim_DecrRefCount(interp, cmdPtr->u.proc.bodyObjPtr); in JimDecrCmdRefCount()
10105 Jim_DecrRefCount(interp, cmdPtr->u.proc.nsObj); in JimDecrCmdRefCount()
10106 if (cmdPtr->u.proc.staticVars) { in JimDecrCmdRefCount()
10107 Jim_FreeHashTable(cmdPtr->u.proc.staticVars); in JimDecrCmdRefCount()
10108 Jim_Free(cmdPtr->u.proc.staticVars); in JimDecrCmdRefCount()
10113 if (cmdPtr->u.native.delProc) { in JimDecrCmdRefCount()
10114 cmdPtr->u.native.delProc(interp, cmdPtr->u.native.privData); in JimDecrCmdRefCount()
10117 if (cmdPtr->prevCmd) { in JimDecrCmdRefCount()
10119 JimDecrCmdRefCount(interp, cmdPtr->prevCmd); in JimDecrCmdRefCount()
10122 cmdPtr->prevCmd = interp->oldCmdCache; in JimDecrCmdRefCount()
10123 interp->oldCmdCache = cmdPtr; in JimDecrCmdRefCount()
10124 if (!interp->quitting && ++interp->oldCmdCacheSize >= 1000) { in JimDecrCmdRefCount()
10132 vv->refCount++; in JimIncrVarRef()
10137 assert(vv->refCount > 0); in JimDecrVarRef()
10138 if (--vv->refCount == 0) { in JimDecrVarRef()
10139 if (vv->objPtr) { in JimDecrVarRef()
10140 Jim_DecrRefCount(interp, vv->objPtr); in JimDecrVarRef()
10158 if (JimIsWide(keyObj) && keyObj->bytes == NULL) { in JimObjectHTHashFunction()
10166 value = (unsigned)-objValue; in JimObjectHTHashFunction()
10176 result += (result << 3) + '-'; in JimObjectHTHashFunction()
10225 len--; in Jim_GetStringNoQualifier()
10274 resultObj = Jim_NewStringObj(interp, "::", -1); in Jim_MakeGlobalNamespaceName()
10287 if (Jim_Length(interp->framePtr->nsObj)) { in JimQualifyName()
10292 objPtr = Jim_DuplicateObj(interp, interp->framePtr->nsObj); in JimQualifyName()
10303 JimPanic((nameObjPtr->refCount == 0, "JimCreateCommand called with zero ref count name")); in JimCreateCommand()
10305 if (interp->local) { in JimCreateCommand()
10306 Jim_HashEntry *he = Jim_FindHashEntry(&interp->commands, nameObjPtr); in JimCreateCommand()
10309 cmd->prevCmd = Jim_GetHashEntryVal(he); in JimCreateCommand()
10310 Jim_SetHashVal(&interp->commands, he, cmd); in JimCreateCommand()
10319 Jim_ReplaceHashEntry(&interp->commands, nameObjPtr, cmd); in JimCreateCommand()
10329 cmdPtr->inUse = 1; in Jim_CreateCommandObj()
10330 cmdPtr->u.native.delProc = delProc; in Jim_CreateCommandObj()
10331 cmdPtr->u.native.cmdProc = cmdProc; in Jim_CreateCommandObj()
10332 cmdPtr->u.native.privData = privData; in Jim_CreateCommandObj()
10345 …return Jim_CreateCommandObj(interp, Jim_NewStringObj(interp, cmdNameStr, -1), cmdProc, privData, d… in Jim_CreateCommand()
10357 cmdPtr->u.proc.staticVars = Jim_Alloc(sizeof(Jim_HashTable)); in JimCreateProcedureStatics()
10358 Jim_InitHashTable(cmdPtr->u.proc.staticVars, &JimVariablesHashTableType, interp); in JimCreateProcedureStatics()
10382 nameObjPtr = Jim_NewStringObj(interp, pt + 1, len - 1); in JimCreateProcedureStatics()
10403 vv = nameObjPtr->internalRep.varValue.vv; in JimCreateProcedureStatics()
10425 vv->objPtr = initObjPtr; in JimCreateProcedureStatics()
10426 Jim_IncrRefCount(vv->objPtr); in JimCreateProcedureStatics()
10427 vv->linkFramePtr = NULL; in JimCreateProcedureStatics()
10428 vv->refCount = 0; in JimCreateProcedureStatics()
10431 if (JimSetNewVariable(cmdPtr->u.proc.staticVars, nameObjPtr, vv) != JIM_OK) { in JimCreateProcedureStatics()
10450 for (i = len; i > 0; i--) { in Jim_memrchr()
10462 if (cmdPtr->isproc) { in JimUpdateProcNamespace()
10467 if (pt && pt != cmdname && pt[-1] == ':') { in JimUpdateProcNamespace()
10469 Jim_DecrRefCount(interp, cmdPtr->u.proc.nsObj); in JimUpdateProcNamespace()
10470 cmdPtr->u.proc.nsObj = Jim_NewStringObj(interp, cmdname, pt - cmdname - 2); in JimUpdateProcNamespace()
10471 Jim_IncrRefCount(cmdPtr->u.proc.nsObj); in JimUpdateProcNamespace()
10473 Jim_Obj *tempObj = Jim_NewStringObj(interp, pt, len - (pt - cmdname)); in JimUpdateProcNamespace()
10474 if (Jim_FindHashEntry(&interp->commands, tempObj)) { in JimUpdateProcNamespace()
10497 cmdPtr->inUse = 1; in JimCreateProcedureCmd()
10498 cmdPtr->isproc = 1; in JimCreateProcedureCmd()
10499 cmdPtr->u.proc.argListObjPtr = argListObjPtr; in JimCreateProcedureCmd()
10500 cmdPtr->u.proc.argListLen = argListLen; in JimCreateProcedureCmd()
10501 cmdPtr->u.proc.bodyObjPtr = bodyObjPtr; in JimCreateProcedureCmd()
10502 cmdPtr->u.proc.argsPos = -1; in JimCreateProcedureCmd()
10503 cmdPtr->u.proc.arglist = (struct Jim_ProcArg *)(cmdPtr + 1); in JimCreateProcedureCmd()
10504 cmdPtr->u.proc.nsObj = nsObj ? nsObj : interp->emptyObj; in JimCreateProcedureCmd()
10507 Jim_IncrRefCount(cmdPtr->u.proc.nsObj); in JimCreateProcedureCmd()
10526 Jim_SetResultString(interp, "argument with no name", -1); in JimCreateProcedureCmd()
10549 if (cmdPtr->u.proc.argsPos >= 0) { in JimCreateProcedureCmd()
10550 Jim_SetResultString(interp, "'args' specified more than once", -1); in JimCreateProcedureCmd()
10553 cmdPtr->u.proc.argsPos = i; in JimCreateProcedureCmd()
10557 cmdPtr->u.proc.optArity++; in JimCreateProcedureCmd()
10560 cmdPtr->u.proc.reqArity++; in JimCreateProcedureCmd()
10564 cmdPtr->u.proc.arglist[i].nameObjPtr = nameObjPtr; in JimCreateProcedureCmd()
10565 cmdPtr->u.proc.arglist[i].defaultObjPtr = defaultObjPtr; in JimCreateProcedureCmd()
10577 if (Jim_DeleteHashEntry(&interp->commands, nameObj) == JIM_ERR) { in Jim_DeleteCommand()
10602 he = Jim_FindHashEntry(&interp->commands, oldNameObj); in Jim_RenameCommand()
10606 else if (Jim_FindHashEntry(&interp->commands, newNameObj)) { in Jim_RenameCommand()
10611 if (cmdPtr->prevCmd) { in Jim_RenameCommand()
10618 Jim_AddHashEntry(&interp->commands, newNameObj, cmdPtr); in Jim_RenameCommand()
10621 Jim_DeleteHashEntry(&interp->commands, oldNameObj); in Jim_RenameCommand()
10639 Jim_DecrRefCount(interp, objPtr->internalRep.cmdValue.nsObj); in FreeCommandInternalRep()
10644 dupPtr->internalRep.cmdValue = srcPtr->internalRep.cmdValue; in DupCommandInternalRep()
10645 dupPtr->typePtr = srcPtr->typePtr; in DupCommandInternalRep()
10646 Jim_IncrRefCount(dupPtr->internalRep.cmdValue.nsObj); in DupCommandInternalRep()
10661 if (objPtr->typePtr == &commandObjType in Jim_GetCommand()
10662 && objPtr->internalRep.cmdValue.procEpoch == interp->procEpoch in Jim_GetCommand()
10664 && Jim_StringEqObj(objPtr->internalRep.cmdValue.nsObj, interp->framePtr->nsObj) in Jim_GetCommand()
10666 && objPtr->internalRep.cmdValue.cmdPtr->inUse) { in Jim_GetCommand()
10668 cmd = objPtr->internalRep.cmdValue.cmdPtr; in Jim_GetCommand()
10672 Jim_HashEntry *he = Jim_FindHashEntry(&interp->commands, qualifiedNameObj); in Jim_GetCommand()
10674 if (he == NULL && Jim_Length(interp->framePtr->nsObj)) { in Jim_GetCommand()
10675 he = Jim_FindHashEntry(&interp->commands, objPtr); in Jim_GetCommand()
10687 cmd->cmdNameObj = Jim_GetHashEntryKey(he); in Jim_GetCommand()
10691 objPtr->typePtr = &commandObjType; in Jim_GetCommand()
10692 objPtr->internalRep.cmdValue.procEpoch = interp->procEpoch; in Jim_GetCommand()
10693 objPtr->internalRep.cmdValue.cmdPtr = cmd; in Jim_GetCommand()
10694 objPtr->internalRep.cmdValue.nsObj = interp->framePtr->nsObj; in Jim_GetCommand()
10695 Jim_IncrRefCount(interp->framePtr->nsObj); in Jim_GetCommand()
10698 while (cmd->u.proc.upcall) { in Jim_GetCommand()
10699 cmd = cmd->prevCmd; in Jim_GetCommand()
10723 if (objPtr->typePtr == &variableObjType) { in SetVariableFromAny()
10724 framePtr = objPtr->internalRep.varValue.global ? interp->topFramePtr : interp->framePtr; in SetVariableFromAny()
10725 if (objPtr->internalRep.varValue.callFrameId == framePtr->id) { in SetVariableFromAny()
10731 else if (objPtr->typePtr == &dictSubstObjType) { in SetVariableFromAny()
10738 if (len && varName[len - 1] == ')' && strchr(varName, '(') != NULL) { in SetVariableFromAny()
10745 len--; in SetVariableFromAny()
10748 framePtr = interp->topFramePtr; in SetVariableFromAny()
10751 vv = JimFindVariable(&framePtr->vars, tempObj); in SetVariableFromAny()
10756 framePtr = interp->framePtr; in SetVariableFromAny()
10758 vv = JimFindVariable(&framePtr->vars, objPtr); in SetVariableFromAny()
10759 if (vv == NULL && framePtr->staticVars) { in SetVariableFromAny()
10761 vv = JimFindVariable(framePtr->staticVars, objPtr); in SetVariableFromAny()
10771 objPtr->typePtr = &variableObjType; in SetVariableFromAny()
10772 objPtr->internalRep.varValue.callFrameId = framePtr->id; in SetVariableFromAny()
10773 objPtr->internalRep.varValue.vv = vv; in SetVariableFromAny()
10774 objPtr->internalRep.varValue.global = global; in SetVariableFromAny()
10811 vv->objPtr = valObjPtr; in JimCreateVariable()
10813 vv->linkFramePtr = NULL; in JimCreateVariable()
10814 vv->refCount = 0; in JimCreateVariable()
10820 len--; in JimCreateVariable()
10822 framePtr = interp->topFramePtr; in JimCreateVariable()
10824 JimSetNewVariable(&framePtr->vars, Jim_NewStringObj(interp, name, len), vv); in JimCreateVariable()
10827 framePtr = interp->framePtr; in JimCreateVariable()
10829 JimSetNewVariable(&framePtr->vars, nameObjPtr, vv); in JimCreateVariable()
10834 nameObjPtr->typePtr = &variableObjType; in JimCreateVariable()
10835 nameObjPtr->internalRep.varValue.callFrameId = framePtr->id; in JimCreateVariable()
10836 nameObjPtr->internalRep.varValue.vv = vv; in JimCreateVariable()
10837 nameObjPtr->internalRep.varValue.global = global; in JimCreateVariable()
10856 vv = nameObjPtr->internalRep.varValue.vv; in Jim_SetVariable()
10857 if (vv->linkFramePtr == NULL) { in Jim_SetVariable()
10859 Jim_DecrRefCount(interp, vv->objPtr); in Jim_SetVariable()
10860 vv->objPtr = valObjPtr; in Jim_SetVariable()
10865 savedCallFrame = interp->framePtr; in Jim_SetVariable()
10866 interp->framePtr = vv->linkFramePtr; in Jim_SetVariable()
10867 err = Jim_SetVariable(interp, vv->objPtr, valObjPtr); in Jim_SetVariable()
10868 interp->framePtr = savedCallFrame; in Jim_SetVariable()
10881 nameObjPtr = Jim_NewStringObj(interp, name, -1); in Jim_SetVariableStr()
10893 savedFramePtr = interp->framePtr; in Jim_SetGlobalVariableStr()
10894 interp->framePtr = interp->topFramePtr; in Jim_SetGlobalVariableStr()
10896 interp->framePtr = savedFramePtr; in Jim_SetGlobalVariableStr()
10905 valObjPtr = Jim_NewStringObj(interp, val, -1); in Jim_SetVariableStrWithStr()
10930 vv = nameObjPtr->internalRep.varValue.vv; in Jim_SetVariableLink()
10932 if (vv->linkFramePtr == NULL) { in Jim_SetVariableLink()
10938 vv->linkFramePtr = NULL; in Jim_SetVariableLink()
10949 varnamelen--; in Jim_SetVariableLink()
10952 framePtr = interp->topFramePtr; in Jim_SetVariableLink()
10955 framePtr = interp->framePtr; in Jim_SetVariableLink()
10962 len--; in Jim_SetVariableLink()
10965 targetCallFrame = interp->topFramePtr; in Jim_SetVariableLink()
10969 if (framePtr->level < targetCallFrame->level) { in Jim_SetVariableLink()
10984 Jim_SetResultString(interp, "can't upvar from variable to itself", -1); in Jim_SetVariableLink()
10990 vv = objPtr->internalRep.varValue.vv; in Jim_SetVariableLink()
10991 if (vv->linkFramePtr != targetCallFrame) in Jim_SetVariableLink()
10993 objPtr = vv->objPtr; in Jim_SetVariableLink()
11000 nameObjPtr->internalRep.varValue.vv->linkFramePtr = targetCallFrame; in Jim_SetVariableLink()
11007 if (interp->safeexpr) { in Jim_GetVariable()
11012 Jim_VarVal *vv = nameObjPtr->internalRep.varValue.vv; in Jim_GetVariable()
11014 if (vv->linkFramePtr == NULL) { in Jim_GetVariable()
11015 return vv->objPtr; in Jim_GetVariable()
11021 Jim_CallFrame *savedCallFrame = interp->framePtr; in Jim_GetVariable()
11023 interp->framePtr = vv->linkFramePtr; in Jim_GetVariable()
11024 objPtr = Jim_GetVariable(interp, vv->objPtr, flags); in Jim_GetVariable()
11025 interp->framePtr = savedCallFrame; in Jim_GetVariable()
11049 savedFramePtr = interp->framePtr; in Jim_GetGlobalVariable()
11050 interp->framePtr = interp->topFramePtr; in Jim_GetGlobalVariable()
11052 interp->framePtr = savedFramePtr; in Jim_GetGlobalVariable()
11061 nameObjPtr = Jim_NewStringObj(interp, name, -1); in Jim_GetVariableStr()
11073 savedFramePtr = interp->framePtr; in Jim_GetGlobalVariableStr()
11074 interp->framePtr = interp->topFramePtr; in Jim_GetGlobalVariableStr()
11076 interp->framePtr = savedFramePtr; in Jim_GetGlobalVariableStr()
11093 vv = nameObjPtr->internalRep.varValue.vv; in Jim_UnsetVariable()
11096 if (vv->linkFramePtr) { in Jim_UnsetVariable()
11097 framePtr = interp->framePtr; in Jim_UnsetVariable()
11098 interp->framePtr = vv->linkFramePtr; in Jim_UnsetVariable()
11099 retval = Jim_UnsetVariable(interp, vv->objPtr, JIM_NONE); in Jim_UnsetVariable()
11100 interp->framePtr = framePtr; in Jim_UnsetVariable()
11103 if (nameObjPtr->internalRep.varValue.global) { in Jim_UnsetVariable()
11108 len--; in Jim_UnsetVariable()
11110 framePtr = interp->topFramePtr; in Jim_UnsetVariable()
11112 retval = JimUnsetVariable(&framePtr->vars, tempObj); in Jim_UnsetVariable()
11116 framePtr = interp->framePtr; in Jim_UnsetVariable()
11117 retval = JimUnsetVariable(&framePtr->vars, nameObjPtr); in Jim_UnsetVariable()
11122 framePtr->id = interp->callFrameEpoch++; in Jim_UnsetVariable()
11144 JimPanic((p == NULL, "JimDictSugarParseVarKey() called for non-dict-sugar (%s)", str)); in JimDictSugarParseVarKey()
11146 varObjPtr = Jim_NewStringObj(interp, str, p - str); in JimDictSugarParseVarKey()
11149 keyLen = (str + len) - p; in JimDictSugarParseVarKey()
11150 if (str[len - 1] == ')') { in JimDictSugarParseVarKey()
11151 keyLen--; in JimDictSugarParseVarKey()
11169 err = Jim_SetDictKeysVector(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, in JimDictSugarSet()
11170 &objPtr->internalRep.dictSubstValue.indexObjPtr, 1, valObjPtr, JIM_MUSTEXIST); in JimDictSugarSet()
11179 … if (Jim_GetVariable(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, JIM_NONE)) { in JimDictSugarSet()
11224 objPtr->internalRep.dictSubstValue.varNameObjPtr, in JimDictSugarGet()
11225 objPtr->internalRep.dictSubstValue.indexObjPtr, flags); in JimDictSugarGet()
11232 Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr); in FreeDictSubstInternalRep()
11233 Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.indexObjPtr); in FreeDictSubstInternalRep()
11239 dupPtr->internalRep = srcPtr->internalRep; in DupDictSubstInternalRep()
11241 Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.varNameObjPtr); in DupDictSubstInternalRep()
11242 Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.indexObjPtr); in DupDictSubstInternalRep()
11248 if (objPtr->typePtr != &dictSubstObjType) { in SetDictSubstFromAny()
11251 if (objPtr->typePtr == &interpolatedObjType) { in SetDictSubstFromAny()
11254 varObjPtr = objPtr->internalRep.dictSubstValue.varNameObjPtr; in SetDictSubstFromAny()
11255 keyObjPtr = objPtr->internalRep.dictSubstValue.indexObjPtr; in SetDictSubstFromAny()
11265 objPtr->typePtr = &dictSubstObjType; in SetDictSubstFromAny()
11266 objPtr->internalRep.dictSubstValue.varNameObjPtr = varObjPtr; in SetDictSubstFromAny()
11267 objPtr->internalRep.dictSubstValue.indexObjPtr = keyObjPtr; in SetDictSubstFromAny()
11276 if (interp->safeexpr) { in JimExpandDictSugar()
11282 if (Jim_SubstObj(interp, objPtr->internalRep.dictSubstValue.indexObjPtr, in JimExpandDictSugar()
11289 JimDictExpandArrayVariable(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr, in JimExpandDictSugar()
11301 if (interp->freeFramesList) { in JimCreateCallFrame()
11302 cf = interp->freeFramesList; in JimCreateCallFrame()
11303 interp->freeFramesList = cf->next; in JimCreateCallFrame()
11305 cf->argv = NULL; in JimCreateCallFrame()
11306 cf->argc = 0; in JimCreateCallFrame()
11307 cf->procArgsObjPtr = NULL; in JimCreateCallFrame()
11308 cf->procBodyObjPtr = NULL; in JimCreateCallFrame()
11309 cf->next = NULL; in JimCreateCallFrame()
11310 cf->staticVars = NULL; in JimCreateCallFrame()
11311 cf->localCommands = NULL; in JimCreateCallFrame()
11312 cf->tailcallObj = NULL; in JimCreateCallFrame()
11313 cf->tailcallCmd = NULL; in JimCreateCallFrame()
11319 Jim_InitHashTable(&cf->vars, &JimVariablesHashTableType, interp); in JimCreateCallFrame()
11322 cf->id = interp->callFrameEpoch++; in JimCreateCallFrame()
11323 cf->parent = parent; in JimCreateCallFrame()
11324 cf->level = parent ? parent->level + 1 : 0; in JimCreateCallFrame()
11325 cf->nsObj = nsObj; in JimCreateCallFrame()
11338 Jim_HashTable *ht = &interp->commands; in JimDeleteLocalProcs()
11342 if (cmd->prevCmd) { in JimDeleteLocalProcs()
11343 Jim_Cmd *prevCmd = cmd->prevCmd; in JimDeleteLocalProcs()
11344 cmd->prevCmd = NULL; in JimDeleteLocalProcs()
11369 if (JimFindVariable(&interp->framePtr->vars, interp->defer) == NULL) { in JimInvokeDefer()
11372 objPtr = Jim_GetVariable(interp, interp->defer, JIM_NONE); in JimInvokeDefer()
11387 for (i = listLen; i > 0; i--) { in JimInvokeDefer()
11389 Jim_Obj *scriptObjPtr = Jim_ListGetIndex(interp, objPtr, i - 1); in JimInvokeDefer()
11414 JimDeleteLocalProcs(interp, cf->localCommands); in JimFreeCallFrame()
11416 if (cf->procArgsObjPtr) in JimFreeCallFrame()
11417 Jim_DecrRefCount(interp, cf->procArgsObjPtr); in JimFreeCallFrame()
11418 if (cf->procBodyObjPtr) in JimFreeCallFrame()
11419 Jim_DecrRefCount(interp, cf->procBodyObjPtr); in JimFreeCallFrame()
11420 Jim_DecrRefCount(interp, cf->nsObj); in JimFreeCallFrame()
11421 if (action == JIM_FCF_FULL || cf->vars.size != JIM_HT_INITIAL_SIZE) in JimFreeCallFrame()
11422 Jim_FreeHashTable(&cf->vars); in JimFreeCallFrame()
11424 Jim_ClearHashTable(&cf->vars); in JimFreeCallFrame()
11426 cf->next = interp->freeFramesList; in JimFreeCallFrame()
11427 interp->freeFramesList = cf; in JimFreeCallFrame()
11449 i->maxCallFrameDepth = JIM_MAX_CALLFRAME_DEPTH; in Jim_CreateInterp()
11450 i->maxEvalDepth = JIM_MAX_EVAL_DEPTH; in Jim_CreateInterp()
11451 i->lastCollectTime = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW); in Jim_CreateInterp()
11453 Jim_InitHashTable(&i->commands, &JimCommandsHashTableType, i); in Jim_CreateInterp()
11455 Jim_InitHashTable(&i->references, &JimReferencesHashTableType, i); in Jim_CreateInterp()
11457 Jim_InitHashTable(&i->assocData, &JimAssocDataHashTableType, i); in Jim_CreateInterp()
11458 Jim_InitHashTable(&i->packages, &JimPackageHashTableType, NULL); in Jim_CreateInterp()
11459 i->emptyObj = Jim_NewEmptyStringObj(i); in Jim_CreateInterp()
11460 i->trueObj = Jim_NewIntObj(i, 1); in Jim_CreateInterp()
11461 i->falseObj = Jim_NewIntObj(i, 0); in Jim_CreateInterp()
11462 i->framePtr = i->topFramePtr = JimCreateCallFrame(i, NULL, i->emptyObj); in Jim_CreateInterp()
11463 i->result = i->emptyObj; in Jim_CreateInterp()
11464 i->stackTrace = Jim_NewListObj(i, NULL, 0); in Jim_CreateInterp()
11465 i->unknown = Jim_NewStringObj(i, "unknown", -1); in Jim_CreateInterp()
11466 i->defer = Jim_NewStringObj(i, "jim::defer", -1); in Jim_CreateInterp()
11467 i->errorProc = i->emptyObj; in Jim_CreateInterp()
11468 i->nullScriptObj = Jim_NewEmptyStringObj(i); in Jim_CreateInterp()
11469 i->evalFrame = &i->topEvalFrame; in Jim_CreateInterp()
11470 i->currentFilenameObj = Jim_NewEmptyStringObj(i); in Jim_CreateInterp()
11471 Jim_IncrRefCount(i->emptyObj); in Jim_CreateInterp()
11472 Jim_IncrRefCount(i->result); in Jim_CreateInterp()
11473 Jim_IncrRefCount(i->stackTrace); in Jim_CreateInterp()
11474 Jim_IncrRefCount(i->unknown); in Jim_CreateInterp()
11475 Jim_IncrRefCount(i->defer); in Jim_CreateInterp()
11476 Jim_IncrRefCount(i->nullScriptObj); in Jim_CreateInterp()
11477 Jim_IncrRefCount(i->errorProc); in Jim_CreateInterp()
11478 Jim_IncrRefCount(i->trueObj); in Jim_CreateInterp()
11479 Jim_IncrRefCount(i->falseObj); in Jim_CreateInterp()
11480 Jim_IncrRefCount(i->currentFilenameObj); in Jim_CreateInterp()
11506 i->quitting = 1; in Jim_FreeInterp()
11509 for (cf = i->framePtr; cf; cf = cfx) { in Jim_FreeInterp()
11512 cfx = cf->parent; in Jim_FreeInterp()
11517 Jim_FreeHashTable(&i->commands); in Jim_FreeInterp()
11519 Jim_DecrRefCount(i, i->emptyObj); in Jim_FreeInterp()
11520 Jim_DecrRefCount(i, i->trueObj); in Jim_FreeInterp()
11521 Jim_DecrRefCount(i, i->falseObj); in Jim_FreeInterp()
11522 Jim_DecrRefCount(i, i->result); in Jim_FreeInterp()
11523 Jim_DecrRefCount(i, i->stackTrace); in Jim_FreeInterp()
11524 Jim_DecrRefCount(i, i->errorProc); in Jim_FreeInterp()
11525 Jim_DecrRefCount(i, i->unknown); in Jim_FreeInterp()
11526 Jim_DecrRefCount(i, i->defer); in Jim_FreeInterp()
11527 Jim_DecrRefCount(i, i->nullScriptObj); in Jim_FreeInterp()
11528 Jim_DecrRefCount(i, i->currentFilenameObj); in Jim_FreeInterp()
11534 Jim_FreeHashTable(&i->references); in Jim_FreeInterp()
11536 Jim_FreeHashTable(&i->packages); in Jim_FreeInterp()
11537 Jim_Free(i->prngState); in Jim_FreeInterp()
11538 Jim_FreeHashTable(&i->assocData); in Jim_FreeInterp()
11539 if (i->traceCmdObj) { in Jim_FreeInterp()
11540 Jim_DecrRefCount(i, i->traceCmdObj); in Jim_FreeInterp()
11544 if (i->liveList != NULL) { in Jim_FreeInterp()
11545 objPtr = i->liveList; in Jim_FreeInterp()
11547 printf("\n-------------------------------------\n"); in Jim_FreeInterp()
11550 const char *type = objPtr->typePtr ? objPtr->typePtr->name : "string"; in Jim_FreeInterp()
11553 if (objPtr->bytes && strlen(objPtr->bytes) > 20) { in Jim_FreeInterp()
11554 printf("%p (%d) %-10s: '%.20s...'\n", in Jim_FreeInterp()
11555 (void *)objPtr, objPtr->refCount, type, objPtr->bytes); in Jim_FreeInterp()
11558 printf("%p (%d) %-10s: '%s'\n", in Jim_FreeInterp()
11559 … (void *)objPtr, objPtr->refCount, type, objPtr->bytes ? objPtr->bytes : "(null)"); in Jim_FreeInterp()
11561 if (objPtr->typePtr == &sourceObjType) { in Jim_FreeInterp()
11563 Jim_String(objPtr->internalRep.sourceValue.fileNameObj), in Jim_FreeInterp()
11564 objPtr->internalRep.sourceValue.lineNumber); in Jim_FreeInterp()
11566 objPtr = objPtr->nextObjPtr; in Jim_FreeInterp()
11568 printf("-------------------------------------\n\n"); in Jim_FreeInterp()
11574 objPtr = i->freeList; in Jim_FreeInterp()
11576 nextObjPtr = objPtr->nextObjPtr; in Jim_FreeInterp()
11582 for (cf = i->freeFramesList; cf; cf = cfx) { in Jim_FreeInterp()
11583 cfx = cf->next; in Jim_FreeInterp()
11584 if (cf->vars.table) in Jim_FreeInterp()
11585 Jim_FreeHashTable(&cf->vars); in Jim_FreeInterp()
11606 level = -1; in Jim_GetCallFrameByLevel()
11611 level = -1; in Jim_GetCallFrameByLevel()
11615 level = interp->framePtr->level - level; in Jim_GetCallFrameByLevel()
11621 level = interp->framePtr->level - 1; in Jim_GetCallFrameByLevel()
11625 return interp->topFramePtr; in Jim_GetCallFrameByLevel()
11629 for (framePtr = interp->framePtr; framePtr; framePtr = framePtr->parent) { in Jim_GetCallFrameByLevel()
11630 if (framePtr->level == level) { in Jim_GetCallFrameByLevel()
11645 return interp->framePtr; in JimGetCallFrameByInteger()
11650 level = interp->framePtr->level + level; in JimGetCallFrameByInteger()
11655 for (framePtr = interp->framePtr; framePtr; framePtr = framePtr->parent) { in JimGetCallFrameByInteger()
11656 if (framePtr->level == level) { in JimGetCallFrameByInteger()
11669 return interp->evalFrame; in JimGetEvalFrameByProcLevel()
11674 proclevel = interp->procLevel + proclevel; in JimGetEvalFrameByProcLevel()
11679 for (evalFrame = interp->evalFrame; evalFrame; evalFrame = evalFrame->parent) { in JimGetEvalFrameByProcLevel()
11680 if (evalFrame->procLevel == proclevel) { in JimGetEvalFrameByProcLevel()
11690 if (frame == interp->evalFrame || (frame->cmd && frame->cmd->cmdNameObj)) { in JimProcForEvalFrame()
11692 for (e = frame->parent; e; e = e->parent) { in JimProcForEvalFrame()
11693 if (e->cmd && e->cmd->isproc && e->cmd->cmdNameObj) { in JimProcForEvalFrame()
11697 if (e && e->cmd && e->cmd->cmdNameObj) { in JimProcForEvalFrame()
11698 return e->cmd->cmdNameObj; in JimProcForEvalFrame()
11707 Jim_Obj *fileNameObj = interp->emptyObj; in JimAddStackFrame()
11710 if (frame->scriptObj) { in JimAddStackFrame()
11711 ScriptObj *script = JimGetScript(interp, frame->scriptObj); in JimAddStackFrame()
11712 fileNameObj = script->fileNameObj; in JimAddStackFrame()
11713 linenr = script->linenr; in JimAddStackFrame()
11716 Jim_ListAppendElement(interp, listObj, procNameObj ? procNameObj : interp->emptyObj); in JimAddStackFrame()
11719 Jim_ListAppendElement(interp, listObj, Jim_NewListObj(interp, frame->argv, frame->argc)); in JimAddStackFrame()
11726 Jim_DecrRefCount(interp, interp->stackTrace); in JimSetStackTrace()
11727 interp->stackTrace = stackTraceObj; in JimSetStackTrace()
11728 interp->errorFlag = 1; in JimSetStackTrace()
11733 if (!interp->errorFlag) { in JimSetErrorStack()
11737 if (interp->procLevel == 0 && script) { in JimSetErrorStack()
11738 Jim_ListAppendElement(interp, stackTrace, interp->emptyObj); in JimSetErrorStack()
11739 Jim_ListAppendElement(interp, stackTrace, script->fileNameObj); in JimSetErrorStack()
11740 Jim_ListAppendElement(interp, stackTrace, Jim_NewIntObj(interp, script->linenr)); in JimSetErrorStack()
11741 Jim_ListAppendElement(interp, stackTrace, interp->emptyObj); in JimSetErrorStack()
11744 for (i = 0; i <= interp->procLevel; i++) { in JimSetErrorStack()
11745 Jim_EvalFrame *frame = JimGetEvalFrameByProcLevel(interp, -i); in JimSetErrorStack()
11760 assocEntryPtr->delProc = delProc; in Jim_SetAssocData()
11761 assocEntryPtr->data = data; in Jim_SetAssocData()
11762 return Jim_AddHashEntry(&interp->assocData, key, assocEntryPtr); in Jim_SetAssocData()
11767 Jim_HashEntry *entryPtr = Jim_FindHashEntry(&interp->assocData, key); in Jim_GetAssocData()
11771 return assocEntryPtr->data; in Jim_GetAssocData()
11778 return Jim_DeleteHashEntry(&interp->assocData, key); in Jim_DeleteAssocData()
11783 return interp->exitCode; in Jim_GetExitCode()
11798 "coerced-double",
11821 buf[pos++] = '-'; in UpdateStringOfInt()
11823 tmp[num++] = (i > 0) ? (10 - i) : -i; in UpdateStringOfInt()
11824 wideValue /= -10; in UpdateStringOfInt()
11833 buf[pos++] = '0' + tmp[num - i - 1]; in UpdateStringOfInt()
11846 if (objPtr->typePtr == &coercedDoubleObjType) { in SetIntFromAny()
11848 objPtr->typePtr = &intObjType; in SetIntFromAny()
11862 Jim_SetResultString(interp, "Integer value too big to be represented", -1); in SetIntFromAny()
11867 objPtr->typePtr = &intObjType; in SetIntFromAny()
11868 objPtr->internalRep.wideValue = wideValue; in SetIntFromAny()
11875 return objPtr->typePtr == &intObjType; in JimIsWide()
11881 if (objPtr->typePtr != &intObjType && SetIntFromAny(interp, objPtr, JIM_ERRMSG) == JIM_ERR) in Jim_GetWide()
11891 if (objPtr->typePtr == &sourceObjType || objPtr->typePtr == NULL) { in Jim_GetWideExpr()
11894 if (objPtr->typePtr == &intObjType) { in Jim_GetWideExpr()
11898 JimPanic((interp->safeexpr, "interp->safeexpr is set")); in Jim_GetWideExpr()
11899 interp->safeexpr++; in Jim_GetWideExpr()
11901 interp->safeexpr--; in Jim_GetWideExpr()
11916 if (objPtr->typePtr != &intObjType && SetIntFromAny(interp, objPtr, JIM_NONE) == JIM_ERR) in JimGetWideNoErr()
11940 objPtr->typePtr = &intObjType; in Jim_NewIntObj()
11941 objPtr->bytes = NULL; in Jim_NewIntObj()
11942 objPtr->internalRep.wideValue = wideValue; in Jim_NewIntObj()
11970 double value = objPtr->internalRep.doubleValue; in UpdateStringOfDouble()
11978 JimSetStringBytes(objPtr, "-Inf"); in UpdateStringOfDouble()
11995 if (e && (e[1] == '-' || e[1] == '+') && e[2] == '0') { in UpdateStringOfDouble()
11998 memmove(e, e + 1, len - (e - buf)); in UpdateStringOfDouble()
12021 #define MIN_INT_IN_DOUBLE -(1LL << 53) in SetDoubleFromAny()
12022 #define MAX_INT_IN_DOUBLE -(MIN_INT_IN_DOUBLE + 1) in SetDoubleFromAny()
12024 if (objPtr->typePtr == &intObjType in SetDoubleFromAny()
12029 objPtr->typePtr = &coercedDoubleObjType; in SetDoubleFromAny()
12038 objPtr->typePtr = &coercedDoubleObjType; in SetDoubleFromAny()
12039 objPtr->internalRep.wideValue = wideValue; in SetDoubleFromAny()
12045 … Jim_SetResultFormatted(interp, "expected floating-point number but got \"%#s\"", objPtr); in SetDoubleFromAny()
12051 objPtr->typePtr = &doubleObjType; in SetDoubleFromAny()
12052 objPtr->internalRep.doubleValue = doubleValue; in SetDoubleFromAny()
12058 if (objPtr->typePtr == &coercedDoubleObjType) { in Jim_GetDouble()
12062 if (objPtr->typePtr != &doubleObjType && SetDoubleFromAny(interp, objPtr) == JIM_ERR) in Jim_GetDouble()
12065 if (objPtr->typePtr == &coercedDoubleObjType) { in Jim_GetDouble()
12069 *doublePtr = objPtr->internalRep.doubleValue; in Jim_GetDouble()
12079 objPtr->typePtr = &doubleObjType; in Jim_NewDoubleObj()
12080 objPtr->bytes = NULL; in Jim_NewDoubleObj()
12081 objPtr->internalRep.doubleValue = doubleValue; in Jim_NewDoubleObj()
12089 if (objPtr->typePtr != &intObjType && SetBooleanFromAny(interp, objPtr, JIM_ERRMSG) == JIM_ERR) in Jim_GetBoolean()
12118 objPtr->typePtr = &intObjType; in SetBooleanFromAny()
12120 objPtr->internalRep.wideValue = index < 4 ? 1 : 0; in SetBooleanFromAny()
12143 for (i = 0; i < objPtr->internalRep.listValue.len; i++) { in FreeListInternalRep()
12144 Jim_DecrRefCount(interp, objPtr->internalRep.listValue.ele[i]); in FreeListInternalRep()
12146 Jim_Free(objPtr->internalRep.listValue.ele); in FreeListInternalRep()
12155 dupPtr->internalRep.listValue.len = srcPtr->internalRep.listValue.len; in DupListInternalRep()
12156 dupPtr->internalRep.listValue.maxLen = srcPtr->internalRep.listValue.maxLen; in DupListInternalRep()
12157 dupPtr->internalRep.listValue.ele = in DupListInternalRep()
12158 Jim_Alloc(sizeof(Jim_Obj *) * srcPtr->internalRep.listValue.maxLen); in DupListInternalRep()
12159 memcpy(dupPtr->internalRep.listValue.ele, srcPtr->internalRep.listValue.ele, in DupListInternalRep()
12160 sizeof(Jim_Obj *) * srcPtr->internalRep.listValue.len); in DupListInternalRep()
12161 for (i = 0; i < dupPtr->internalRep.listValue.len; i++) { in DupListInternalRep()
12162 Jim_IncrRefCount(dupPtr->internalRep.listValue.ele[i]); in DupListInternalRep()
12164 dupPtr->typePtr = &listObjType; in DupListInternalRep()
12206 if (s[len - 1] == '\\') in ListElementQuotingType()
12216 level--; in ListElementQuotingType()
12224 blevel--; in ListElementQuotingType()
12268 while (len--) { in BackslashQuoteString()
12314 return p - q; in BackslashQuoteString()
12359 p = objPtr->bytes = Jim_Alloc(bufLen + 1); in JimMakeListStringRep()
12396 objPtr->length = realLength; in JimMakeListStringRep()
12405 …JimMakeListStringRep(objPtr, objPtr->internalRep.listValue.ele, objPtr->internalRep.listValue.len); in UpdateStringOfList()
12416 if (objPtr->typePtr == &listObjType) { in SetListFromAny()
12421 if (Jim_IsDict(objPtr) && objPtr->bytes == NULL) { in SetListFromAny()
12422 Jim_Dict *dict = objPtr->internalRep.dictValue; in SetListFromAny()
12425 objPtr->typePtr = &listObjType; in SetListFromAny()
12426 objPtr->internalRep.listValue.len = dict->len; in SetListFromAny()
12427 objPtr->internalRep.listValue.maxLen = dict->maxLen; in SetListFromAny()
12428 objPtr->internalRep.listValue.ele = dict->table; in SetListFromAny()
12431 Jim_Free(dict->ht); in SetListFromAny()
12446 objPtr->typePtr = &listObjType; in SetListFromAny()
12447 objPtr->internalRep.listValue.len = 0; in SetListFromAny()
12448 objPtr->internalRep.listValue.maxLen = 0; in SetListFromAny()
12449 objPtr->internalRep.listValue.ele = NULL; in SetListFromAny()
12474 objPtr->typePtr = &listObjType; in Jim_NewListObj()
12475 objPtr->bytes = NULL; in Jim_NewListObj()
12476 objPtr->internalRep.listValue.ele = NULL; in Jim_NewListObj()
12477 objPtr->internalRep.listValue.len = 0; in Jim_NewListObj()
12478 objPtr->internalRep.listValue.maxLen = 0; in Jim_NewListObj()
12491 *listVec = listObj->internalRep.listValue.ele; in JimListGetElements()
12501 return -1; in JimSign()
12532 …if (Jim_ListIndices(sort_info->interp, *lhsObj, sort_info->indexv, sort_info->indexc, &lObj, JIM_E… in ListSortIndexHelper()
12533 …Jim_ListIndices(sort_info->interp, *rhsObj, sort_info->indexv, sort_info->indexc, &rObj, JIM_ERRMS… in ListSortIndexHelper()
12534 longjmp(sort_info->jmpbuf, JIM_ERR); in ListSortIndexHelper()
12536 return sort_info->subfn(&lObj, &rObj); in ListSortIndexHelper()
12542 return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; in ListSortString()
12547 return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 1) * sort_info->order; in ListSortStringNoCase()
12564 return JimSign(lint - rint) * sort_info->order; in ListSortDict()
12566 if (lend -left != rend - right) { in ListSortDict()
12567 return JimSign((lend - left) - (rend - right)) * sort_info->order; in ListSortDict()
12577 return JimSign(cl - cr) * sort_info->order; in ListSortDict()
12581 … return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; in ListSortDict()
12591 if (Jim_GetWide(sort_info->interp, *lhsObj, &lhs) != JIM_OK || in ListSortInteger()
12592 Jim_GetWide(sort_info->interp, *rhsObj, &rhs) != JIM_OK) { in ListSortInteger()
12593 longjmp(sort_info->jmpbuf, JIM_ERR); in ListSortInteger()
12596 return JimSign(lhs - rhs) * sort_info->order; in ListSortInteger()
12603 if (Jim_GetDouble(sort_info->interp, *lhsObj, &lhs) != JIM_OK || in ListSortReal()
12604 Jim_GetDouble(sort_info->interp, *rhsObj, &rhs) != JIM_OK) { in ListSortReal()
12605 longjmp(sort_info->jmpbuf, JIM_ERR); in ListSortReal()
12611 return sort_info->order; in ListSortReal()
12613 return -sort_info->order; in ListSortReal()
12624 compare_script = Jim_DuplicateObj(sort_info->interp, sort_info->command); in ListSortCommand()
12625 Jim_ListAppendElement(sort_info->interp, compare_script, *lhsObj); in ListSortCommand()
12626 Jim_ListAppendElement(sort_info->interp, compare_script, *rhsObj); in ListSortCommand()
12628 rc = Jim_EvalObj(sort_info->interp, compare_script); in ListSortCommand()
12630 …if (rc != JIM_OK || Jim_GetWide(sort_info->interp, Jim_GetResult(sort_info->interp), &ret) != JIM_… in ListSortCommand()
12631 longjmp(sort_info->jmpbuf, rc); in ListSortCommand()
12634 return JimSign(ret) * sort_info->order; in ListSortCommand()
12641 Jim_Obj **ele = listObjPtr->internalRep.listValue.ele; in ListRemoveDuplicates()
12643 for (src = 1; src < listObjPtr->internalRep.listValue.len; src++) { in ListRemoveDuplicates()
12646 Jim_DecrRefCount(sort_info->interp, ele[dst]); in ListRemoveDuplicates()
12657 if (dst < listObjPtr->internalRep.listValue.len) { in ListRemoveDuplicates()
12662 listObjPtr->internalRep.listValue.len = dst; in ListRemoveDuplicates()
12683 vector = listObjPtr->internalRep.listValue.ele; in ListSortElements()
12684 len = listObjPtr->internalRep.listValue.len; in ListSortElements()
12685 switch (info->type) { in ListSortElements()
12707 return -1; in ListSortElements()
12710 if (info->indexc) { in ListSortElements()
12712 info->subfn = fn; in ListSortElements()
12716 if ((rc = setjmp(info->jmpbuf)) == 0) { in ListSortElements()
12719 if (info->unique && len > 1) { in ListSortElements()
12734 if (idx >= listPtr->internalRep.listValue.maxLen) { in ListEnsureLength()
12739 listPtr->internalRep.listValue.ele = Jim_Realloc(listPtr->internalRep.listValue.ele, in ListEnsureLength()
12742 listPtr->internalRep.listValue.maxLen = idx; in ListEnsureLength()
12748 int currentLen = listPtr->internalRep.listValue.len; in ListInsertElements()
12758 if (requiredLen > listPtr->internalRep.listValue.maxLen) { in ListInsertElements()
12768 point = listPtr->internalRep.listValue.ele + idx; in ListInsertElements()
12769 memmove(point + elemc, point, (currentLen - idx) * sizeof(Jim_Obj *)); in ListInsertElements()
12774 listPtr->internalRep.listValue.len += elemc; in ListInsertElements()
12779 ListInsertElements(listPtr, -1, 1, &objPtr); in ListAppendElement()
12784 ListInsertElements(listPtr, -1, in ListAppendList()
12785 appendListPtr->internalRep.listValue.len, appendListPtr->internalRep.listValue.ele); in ListAppendList()
12808 return objPtr->internalRep.listValue.len; in Jim_ListLength()
12816 if (idx >= 0 && idx > listPtr->internalRep.listValue.len) in Jim_ListInsertElements()
12817 idx = listPtr->internalRep.listValue.len; in Jim_ListInsertElements()
12827 if ((idx >= 0 && idx >= listPtr->internalRep.listValue.len) || in Jim_ListGetIndex()
12828 (idx < 0 && (-idx - 1) >= listPtr->internalRep.listValue.len)) { in Jim_ListGetIndex()
12832 idx = listPtr->internalRep.listValue.len + idx; in Jim_ListGetIndex()
12833 return listPtr->internalRep.listValue.ele[idx]; in Jim_ListGetIndex()
12841 Jim_SetResultString(interp, "list index out of range", -1); in Jim_ListIndex()
12878 return -1; in Jim_ListIndices()
12893 if ((idx >= 0 && idx >= listPtr->internalRep.listValue.len) || in ListSetIndex()
12894 (idx < 0 && (-idx - 1) >= listPtr->internalRep.listValue.len)) { in ListSetIndex()
12896 Jim_SetResultString(interp, "list index out of range", -1); in ListSetIndex()
12901 idx = listPtr->internalRep.listValue.len + idx; in ListSetIndex()
12902 Jim_DecrRefCount(interp, listPtr->internalRep.listValue.ele[idx]); in ListSetIndex()
12903 listPtr->internalRep.listValue.ele[idx] = newObjPtr; in ListSetIndex()
12919 for (i = 0; i < indexc - 1; i++) { in Jim_ListSetIndex()
12935 if (Jim_GetIndex(interp, indexv[indexc - 1], &idx) != JIM_OK) in Jim_ListSetIndex()
12992 len += objc - 1; in Jim_ConcatObj()
13001 objLen--; in Jim_ConcatObj()
13002 len--; in Jim_ConcatObj()
13005 while (objLen && isspace(UCHAR(s[objLen - 1]))) { in Jim_ConcatObj()
13007 if (objLen > 1 && s[objLen - 2] == '\\') { in Jim_ConcatObj()
13010 objLen--; in Jim_ConcatObj()
13011 len--; in Jim_ConcatObj()
13019 len--; in Jim_ConcatObj()
13044 return Jim_NewListObj(interp, listObjPtr->internalRep.listValue.ele + first, rangeLen); in Jim_ListRange()
13064 for (i = 0; i < dict->len; i++) { in JimFreeDict()
13065 Jim_DecrRefCount(interp, dict->table[i]); in JimFreeDict()
13067 Jim_Free(dict->table); in JimFreeDict()
13068 Jim_Free(dict->ht); in JimFreeDict()
13073 DICT_HASH_FIND = -1,
13074 DICT_HASH_REMOVE = -2,
13075 DICT_HASH_ADD = -3,
13080 unsigned h = (JimObjectHTHashFunction(keyObjPtr) + dict->uniq); in JimDictHashFind()
13081 unsigned idx = h & dict->sizemask; in JimDictHashFind()
13086 if (dict->len) { in JimDictHashFind()
13087 while ((tvoffset = dict->ht[idx].offset)) { in JimDictHashFind()
13088 if (tvoffset == -1) { in JimDictHashFind()
13093 else if (dict->ht[idx].hash == h) { in JimDictHashFind()
13094 if (Jim_StringEqObj(keyObjPtr, dict->table[tvoffset - 1])) { in JimDictHashFind()
13100 idx = (5 * idx + 1 + peturb) & dict->sizemask; in JimDictHashFind()
13111 dict->ht[idx].offset = -1; in JimDictHashFind()
13112 dict->dummy++; in JimDictHashFind()
13121 dict->dummy--; in JimDictHashFind()
13123 dict->ht[idx].offset = dict->len + 1; in JimDictHashFind()
13124 dict->ht[idx].hash = h; in JimDictHashFind()
13131 dict->ht[idx].offset = op_tvoffset; in JimDictHashFind()
13141 struct JimDictHashEntry *prevht = dict->ht; in JimDictExpandHashTable()
13142 int prevsize = dict->size; in JimDictExpandHashTable()
13144 dict->size = JimHashTableNextPower(size); in JimDictExpandHashTable()
13145 dict->sizemask = dict->size - 1; in JimDictExpandHashTable()
13148 dict->ht = Jim_Alloc(dict->size * sizeof(*dict->ht)); in JimDictExpandHashTable()
13149 memset(dict->ht, 0, dict->size * sizeof(*dict->ht)); in JimDictExpandHashTable()
13156 unsigned idx = h & dict->sizemask; in JimDictExpandHashTable()
13159 while (dict->ht[idx].offset) { in JimDictExpandHashTable()
13161 idx = (5 * idx + 1 + peturb) & dict->sizemask; in JimDictExpandHashTable()
13163 dict->ht[idx].offset = prevht[i].offset; in JimDictExpandHashTable()
13164 dict->ht[idx].hash = h; in JimDictExpandHashTable()
13172 if (dict->size <= dict->len + dict->dummy) { in JimDictAdd()
13173 JimDictExpandHashTable(dict, dict->size ? dict->size * 2 : 8); in JimDictAdd()
13187 dict->table = Jim_Alloc(table_size * sizeof(*dict->table)); in JimDictNew()
13188 dict->maxLen = table_size; in JimDictNew()
13191 dict->uniq = (rand() ^ time(NULL) ^ clock()); in JimDictNew()
13198 JimFreeDict(interp, objPtr->internalRep.dictValue); in FreeDictInternalRep()
13203 Jim_Dict *oldDict = srcPtr->internalRep.dictValue; in DupDictInternalRep()
13207 Jim_Dict *newDict = JimDictNew(interp, oldDict->maxLen, oldDict->size); in DupDictInternalRep()
13210 for (i = 0; i < oldDict->len; i++) { in DupDictInternalRep()
13211 newDict->table[i] = oldDict->table[i]; in DupDictInternalRep()
13212 Jim_IncrRefCount(newDict->table[i]); in DupDictInternalRep()
13214 newDict->len = oldDict->len; in DupDictInternalRep()
13217 newDict->uniq = oldDict->uniq; in DupDictInternalRep()
13220 memcpy(newDict->ht, oldDict->ht, sizeof(*oldDict->ht) * oldDict->size); in DupDictInternalRep()
13222 dupPtr->internalRep.dictValue = newDict; in DupDictInternalRep()
13223 dupPtr->typePtr = &dictObjType; in DupDictInternalRep()
13228 …JimMakeListStringRep(objPtr, objPtr->internalRep.dictValue->table, objPtr->internalRep.dictValue->… in UpdateStringOfDict()
13235 if (objPtr->typePtr == &dictObjType) { in SetDictFromAny()
13245 Jim_SetResultString(interp, "missing value to go with key", -1); in SetDictFromAny()
13254 dict->table = objPtr->internalRep.listValue.ele; in SetDictFromAny()
13255 dict->maxLen = objPtr->internalRep.listValue.maxLen; in SetDictFromAny()
13259 int tvoffset = JimDictAdd(dict, dict->table[i]); in SetDictFromAny()
13263 Jim_DecrRefCount(interp, dict->table[tvoffset]); in SetDictFromAny()
13265 dict->table[tvoffset] = dict->table[i + 1]; in SetDictFromAny()
13267 Jim_DecrRefCount(interp, dict->table[i]); in SetDictFromAny()
13270 if (dict->len != i) { in SetDictFromAny()
13271 dict->table[dict->len++] = dict->table[i]; in SetDictFromAny()
13272 dict->table[dict->len++] = dict->table[i + 1]; in SetDictFromAny()
13275 dict->len += 2; in SetDictFromAny()
13280 objPtr->typePtr = &dictObjType; in SetDictFromAny()
13281 objPtr->internalRep.dictValue = dict; in SetDictFromAny()
13292 Jim_Dict *dict = objPtr->internalRep.dictValue; in DictAddElement()
13298 Jim_DecrRefCount(interp, dict->table[tvoffset - 1]); in DictAddElement()
13299 Jim_DecrRefCount(interp, dict->table[tvoffset]); in DictAddElement()
13300 dict->len -= 2; in DictAddElement()
13301 if (tvoffset != dict->len + 1) { in DictAddElement()
13303 dict->table[tvoffset - 1] = dict->table[dict->len]; in DictAddElement()
13304 dict->table[tvoffset] = dict->table[dict->len + 1]; in DictAddElement()
13307 JimDictHashFind(dict, dict->table[tvoffset - 1], tvoffset); in DictAddElement()
13319 Jim_DecrRefCount(interp, dict->table[tvoffset]); in DictAddElement()
13320 dict->table[tvoffset] = valueObjPtr; in DictAddElement()
13323 if (dict->maxLen == dict->len) { in DictAddElement()
13325 if (dict->maxLen < 4) { in DictAddElement()
13326 dict->maxLen = 4; in DictAddElement()
13329 dict->maxLen *= 2; in DictAddElement()
13331 dict->table = Jim_Realloc(dict->table, dict->maxLen * sizeof(*dict->table)); in DictAddElement()
13336 dict->table[dict->len++] = keyObjPtr; in DictAddElement()
13337 dict->table[dict->len++] = valueObjPtr; in DictAddElement()
13363 objPtr->typePtr = &dictObjType; in Jim_NewDictObj()
13364 objPtr->bytes = NULL; in Jim_NewDictObj()
13366 objPtr->internalRep.dictValue = JimDictNew(interp, len, len); in Jim_NewDictObj()
13379 return -1; in Jim_DictKey()
13381 dict = dictPtr->internalRep.dictValue; in Jim_DictKey()
13389 *objPtrPtr = dict->table[tvoffset]; in Jim_DictKey()
13409 *len = dictPtr->internalRep.dictValue->len; in Jim_DictPairs()
13410 return dictPtr->internalRep.dictValue->table; in Jim_DictPairs()
13465 if (i == keyc - 1) { in Jim_SetDictKeysVector()
13467 if (Jim_DictAddElement(interp, objPtr, keyv[keyc - 1], newObjPtr) != JIM_OK) { in Jim_SetDictKeysVector()
13523 if (objPtr->internalRep.intValue == -1) { in UpdateStringOfIndex()
13528 if (objPtr->internalRep.intValue >= 0 || objPtr->internalRep.intValue == -INT_MAX) { in UpdateStringOfIndex()
13529 sprintf(buf, "%d", objPtr->internalRep.intValue); in UpdateStringOfIndex()
13533 sprintf(buf, "end%d", objPtr->internalRep.intValue + 1); in UpdateStringOfIndex()
13546 JimPanic((objPtr->refCount == 0, "SetIndexFromAny() called with zero refcount object")); in SetIndexFromAny()
13561 case '-': in SetIndexFromAny()
13563 exprObj = Jim_NewStringObj(interp, str, -1); in SetIndexFromAny()
13586 idx--; in SetIndexFromAny()
13590 idx = -INT_MAX; in SetIndexFromAny()
13595 objPtr->typePtr = &indexObjType; in SetIndexFromAny()
13596 objPtr->internalRep.intValue = idx; in SetIndexFromAny()
13601 "bad index \"%#s\": must be intexpr or end?[+-]intexpr?", objPtr); in SetIndexFromAny()
13608 if (objPtr->typePtr == &intObjType) { in Jim_GetIndex()
13612 *indexPtr = -INT_MAX; in Jim_GetIndex()
13619 if (objPtr->typePtr != &indexObjType && SetIndexFromAny(interp, objPtr) == JIM_ERR) in Jim_GetIndex()
13621 *indexPtr = objPtr->internalRep.intValue; in Jim_GetIndex()
13639 #define jimReturnCodesSize (sizeof(jimReturnCodes)/sizeof(*jimReturnCodes) - 1)
13642 "return-code",
13673 objPtr->typePtr = &returnCodeObjType; in SetReturnCodeFromAny()
13674 objPtr->internalRep.intValue = returnCode; in SetReturnCodeFromAny()
13680 if (objPtr->typePtr != &returnCodeObjType && SetReturnCodeFromAny(interp, objPtr) == JIM_ERR) in Jim_GetReturnCode()
13682 *intPtr = objPtr->internalRep.intValue; in Jim_GetReturnCode()
13800 if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { in JimExprOpNumUnary()
13804 if ((A->typePtr != &doubleObjType || A->bytes) && JimGetWideNoErr(interp, A, &wA) == JIM_OK) { in JimExprOpNumUnary()
13805 switch (node->type) { in JimExprOpNumUnary()
13817 wC = wA >= 0 ? wA : -wA; in JimExprOpNumUnary()
13820 wC = -wA; in JimExprOpNumUnary()
13830 switch (node->type) { in JimExprOpNumUnary()
13836 wC = dA < 0 ? (dA - 0.5) : (dA + 0.5); in JimExprOpNumUnary()
13847 dC = dA >= 0 ? dA : -dA; in JimExprOpNumUnary()
13852 dC = -dA; in JimExprOpNumUnary()
13863 switch (node->type) { in JimExprOpNumUnary()
13871 "can't use non-numeric string as operand of \"%s\"", in JimExprOpNumUnary()
13872 node->type == JIM_EXPROP_UNARYPLUS ? "+" : "-"); in JimExprOpNumUnary()
13907 if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { in JimExprOpIntUnary()
13913 switch (node->type) { in JimExprOpIntUnary()
13933 JimPanic((node->type != JIM_EXPROP_FUNC_RAND, "JimExprOpNone only support rand()")); in JimExprOpNone()
13947 if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { in JimExprOpDoubleUnary()
13953 switch (node->type) { in JimExprOpDoubleUnary()
14018 if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { in JimExprOpIntBin()
14021 if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { in JimExprOpIntBin()
14033 switch (node->type) { in JimExprOpIntBin()
14052 Jim_SetResultString(interp, "Division by zero", -1); in JimExprOpIntBin()
14059 wB = -wB; in JimExprOpIntBin()
14060 wA = -wA; in JimExprOpIntBin()
14068 wC = -wC; in JimExprOpIntBin()
14082 if (node->type == JIM_EXPROP_ROTR) { in JimExprOpIntBin()
14083 uB = S - uB; in JimExprOpIntBin()
14085 wC = (unsigned long)(uA << uB) | (uA >> (S - uB)); in JimExprOpIntBin()
14109 if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { in JimExprOpBin()
14112 if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { in JimExprOpBin()
14117 if ((A->typePtr != &doubleObjType || A->bytes) && in JimExprOpBin()
14118 (B->typePtr != &doubleObjType || B->bytes) && in JimExprOpBin()
14123 switch (node->type) { in JimExprOpBin()
14127 Jim_SetResultString(interp, "exponentiation of zero by negative power", -1); in JimExprOpBin()
14137 wC = wA - wB; in JimExprOpBin()
14144 Jim_SetResultString(interp, "Division by zero", -1); in JimExprOpBin()
14150 wB = -wB; in JimExprOpBin()
14151 wA = -wA; in JimExprOpBin()
14155 wC--; in JimExprOpBin()
14180 switch (node->type) { in JimExprOpBin()
14187 Jim_SetResultString(interp, "unsupported", -1); in JimExprOpBin()
14209 dC = dA - dB; in JimExprOpBin()
14217 dC = dA < 0 ? -INFINITY : INFINITY; in JimExprOpBin()
14219 dC = (dA < 0 ? -1.0 : 1.0) * strtod("Inf", NULL); in JimExprOpBin()
14252 switch (node->type) { in JimExprOpBin()
14309 if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { in JimExprOpStrBin()
14312 if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { in JimExprOpStrBin()
14317 switch (node->type) { in JimExprOpStrBin()
14321 if (node->type == JIM_EXPROP_STRNE) { in JimExprOpStrBin()
14330 if (node->type == JIM_EXPROP_STRLT) { in JimExprOpStrBin()
14331 wC = comp == -1; in JimExprOpStrBin()
14332 } else if (node->type == JIM_EXPROP_STRGT) { in JimExprOpStrBin()
14334 } else if (node->type == JIM_EXPROP_STRLE) { in JimExprOpStrBin()
14335 wC = comp == -1 || comp == 0; in JimExprOpStrBin()
14362 int ret = -1; in ExprBool()
14384 int result = JimExprGetTermBoolean(interp, node->left); in JimExprOpAnd()
14388 result = JimExprGetTermBoolean(interp, node->right); in JimExprOpAnd()
14390 if (result == -1) { in JimExprOpAnd()
14400 int result = JimExprGetTermBoolean(interp, node->left); in JimExprOpOr()
14404 result = JimExprGetTermBoolean(interp, node->right); in JimExprOpOr()
14406 if (result == -1) { in JimExprOpOr()
14416 int result = JimExprGetTermBoolean(interp, node->left); in JimExprOpTernary()
14420 return JimExprEvalTermNode(interp, node->right); in JimExprOpTernary()
14424 return JimExprEvalTermNode(interp, node->ternary); in JimExprOpTernary()
14436 #define OPRINIT_ATTR(N, P, ARITY, F, ATTR) {N, F, P, ARITY, ATTR, sizeof(N) - 1}
14444 OPRINIT("-", 100, 2, JimExprOpBin),
14486 OPRINIT_ATTR(" -", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC),
14529 pc->errmsg = NULL; in JimParseExpression()
14533 while (isspace(UCHAR(*pc->p)) || (*(pc->p) == '\\' && *(pc->p + 1) == '\n')) { in JimParseExpression()
14534 if (*pc->p == '\n') { in JimParseExpression()
14535 pc->linenr++; in JimParseExpression()
14537 pc->p++; in JimParseExpression()
14538 pc->len--; in JimParseExpression()
14541 if (*pc->p == '#') { in JimParseExpression()
14550 pc->tline = pc->linenr; in JimParseExpression()
14551 pc->tstart = pc->p; in JimParseExpression()
14553 if (pc->len == 0) { in JimParseExpression()
14554 pc->tend = pc->p; in JimParseExpression()
14555 pc->tt = JIM_TT_EOL; in JimParseExpression()
14556 pc->eof = 1; in JimParseExpression()
14559 switch (*(pc->p)) { in JimParseExpression()
14561 pc->tt = JIM_TT_SUBEXPR_START; in JimParseExpression()
14564 pc->tt = JIM_TT_SUBEXPR_END; in JimParseExpression()
14567 pc->tt = JIM_TT_SUBEXPR_COMMA; in JimParseExpression()
14569 pc->tend = pc->p; in JimParseExpression()
14570 pc->p++; in JimParseExpression()
14571 pc->len--; in JimParseExpression()
14580 if (pc->tt == JIM_TT_EXPRSUGAR) { in JimParseExpression()
14581 pc->errmsg = "nesting expr in expr is not allowed"; in JimParseExpression()
14631 pc->tt = JIM_TT_EXPR_INT; in JimParseExprNumber()
14633 jim_strtoull(pc->p, (char **)&pc->p); in JimParseExprNumber()
14635 if (strchr("eENnIi.", *pc->p) || pc->p == pc->tstart) { in JimParseExprNumber()
14636 if (strtod(pc->tstart, &end)) { } in JimParseExprNumber()
14637 if (end == pc->tstart) in JimParseExprNumber()
14639 if (end > pc->p) { in JimParseExprNumber()
14641 pc->tt = JIM_TT_EXPR_DOUBLE; in JimParseExprNumber()
14642 pc->p = end; in JimParseExprNumber()
14645 pc->tend = pc->p - 1; in JimParseExprNumber()
14646 pc->len -= (pc->p - pc->tstart); in JimParseExprNumber()
14658 if (strncmp(irr, pc->p, 3) == 0) { in JimParseExprIrrational()
14659 pc->p += 3; in JimParseExprIrrational()
14660 pc->len -= 3; in JimParseExprIrrational()
14661 pc->tend = pc->p - 1; in JimParseExprIrrational()
14662 pc->tt = JIM_TT_EXPR_DOUBLE; in JimParseExprIrrational()
14673 if (strncmp(pc->p, jim_true_false_strings[i], jim_true_false_lens[i]) == 0) { in JimParseExprBoolean()
14674 pc->p += jim_true_false_lens[i]; in JimParseExprBoolean()
14675 pc->len -= jim_true_false_lens[i]; in JimParseExprBoolean()
14676 pc->tend = pc->p - 1; in JimParseExprBoolean()
14677 pc->tt = JIM_TT_EXPR_BOOLEAN; in JimParseExprBoolean()
14690 return &Jim_ExprOperators[opcode - JIM_TT_EXPR_OP]; in JimExprOperatorInfoByOpcode()
14703 if (op->name[0] != pc->p[0]) { in JimParseExprOperator()
14707 if (op->namelen > bestLen && strncmp(op->name, pc->p, op->namelen) == 0) { in JimParseExprOperator()
14709 bestLen = op->namelen; in JimParseExprOperator()
14717 if (bestOp->attr & OP_FUNC) { in JimParseExprOperator()
14718 const char *p = pc->p + bestLen; in JimParseExprOperator()
14719 int len = pc->len - bestLen; in JimParseExprOperator()
14722 len--; in JimParseExprOperator()
14726 pc->errmsg = "function requires parentheses"; in JimParseExprOperator()
14730 pc->tend = pc->p + bestLen - 1; in JimParseExprOperator()
14731 pc->p += bestLen; in JimParseExprOperator()
14732 pc->len -= bestLen; in JimParseExprOperator()
14734 pc->tt = (bestOp - Jim_ExprOperators) + JIM_TT_EXPR_OP; in JimParseExprOperator()
14773 ExprTreeFreeNodes(interp, expr->nodes, expr->len); in ExprTreeFree()
14779 struct ExprTree *expr = (void *)objPtr->internalRep.ptr; in FreeExprInternalRep()
14782 if (--expr->inUse != 0) { in FreeExprInternalRep()
14796 dupPtr->typePtr = NULL; in DupExprInternalRep()
14818 if (TOKEN_IS_EXPR_OP(node->type)) { in JimShowExprNode()
14819 printf("%s\n", jim_tt_name(node->type)); in JimShowExprNode()
14820 if (node->left) { in JimShowExprNode()
14821 JimShowExprNode(node->left, level + 1); in JimShowExprNode()
14823 if (node->right) { in JimShowExprNode()
14824 JimShowExprNode(node->right, level + 1); in JimShowExprNode()
14826 if (node->ternary) { in JimShowExprNode()
14827 JimShowExprNode(node->ternary, level + 1); in JimShowExprNode()
14831 printf("[%s] %s\n", jim_tt_name(node->type), Jim_String(node->objPtr)); in JimShowExprNode()
14844 int exp_stacklen = builder->stack.len + exp_numterms; in ExprTreeBuildTree()
14846 if (builder->level++ > 200) { in ExprTreeBuildTree()
14847 Jim_SetResultString(interp, "Expression too complex", -1); in ExprTreeBuildTree()
14851 while (builder->token->type != JIM_TT_EOL) { in ExprTreeBuildTree()
14852 ParseToken *t = builder->token++; in ExprTreeBuildTree()
14855 if (t == builder->first_token) { in ExprTreeBuildTree()
14859 prevtt = t[-1].type; in ExprTreeBuildTree()
14862 if (t->type == JIM_TT_SUBEXPR_START) { in ExprTreeBuildTree()
14863 if (builder->stack.len == exp_stacklen) { in ExprTreeBuildTree()
14864 …ResultFormatted(interp, "unexpected open parenthesis in expression: \"%#s\"", builder->exprObjPtr); in ExprTreeBuildTree()
14867 builder->parencount++; in ExprTreeBuildTree()
14874 else if (t->type == JIM_TT_SUBEXPR_END) { in ExprTreeBuildTree()
14876 if (builder->stack.len == exp_stacklen && builder->level > 1) { in ExprTreeBuildTree()
14877 builder->token--; in ExprTreeBuildTree()
14878 builder->level--; in ExprTreeBuildTree()
14881 …ultFormatted(interp, "unexpected closing parenthesis in expression: \"%#s\"", builder->exprObjPtr); in ExprTreeBuildTree()
14884 builder->parencount--; in ExprTreeBuildTree()
14885 if (builder->stack.len == exp_stacklen) { in ExprTreeBuildTree()
14890 else if (t->type == JIM_TT_SUBEXPR_COMMA) { in ExprTreeBuildTree()
14892 if (builder->stack.len == exp_stacklen) { in ExprTreeBuildTree()
14894 builder->token--; in ExprTreeBuildTree()
14895 builder->level--; in ExprTreeBuildTree()
14898 … Jim_SetResultFormatted(interp, "unexpected comma in expression: \"%#s\"", builder->exprObjPtr); in ExprTreeBuildTree()
14903 if (builder->stack.len > exp_stacklen) { in ExprTreeBuildTree()
14910 else if (t->type == JIM_EXPROP_COLON) { in ExprTreeBuildTree()
14912 if (builder->level != 1) { in ExprTreeBuildTree()
14914 builder->token--; in ExprTreeBuildTree()
14915 builder->level--; in ExprTreeBuildTree()
14918 … Jim_SetResultFormatted(interp, ": without ? in expression: \"%#s\"", builder->exprObjPtr); in ExprTreeBuildTree()
14921 if (builder->stack.len == exp_stacklen) { in ExprTreeBuildTree()
14923 builder->token--; in ExprTreeBuildTree()
14924 builder->level--; in ExprTreeBuildTree()
14929 else if (TOKEN_IS_EXPR_OP(t->type)) { in ExprTreeBuildTree()
14934 if (t->type == JIM_EXPROP_SUB) { in ExprTreeBuildTree()
14935 t->type = JIM_EXPROP_UNARYMINUS; in ExprTreeBuildTree()
14937 else if (t->type == JIM_EXPROP_ADD) { in ExprTreeBuildTree()
14938 t->type = JIM_EXPROP_UNARYPLUS; in ExprTreeBuildTree()
14942 op = JimExprOperatorInfoByOpcode(t->type); in ExprTreeBuildTree()
14944 …if (op->precedence < precedence || (!(op->attr & OP_RIGHT_ASSOC) && op->precedence == precedence))… in ExprTreeBuildTree()
14946 builder->token--; in ExprTreeBuildTree()
14950 if (op->attr & OP_FUNC) { in ExprTreeBuildTree()
14951 if (builder->token->type != JIM_TT_SUBEXPR_START) { in ExprTreeBuildTree()
14952 Jim_SetResultString(interp, "missing arguments for math function", -1); in ExprTreeBuildTree()
14955 builder->token++; in ExprTreeBuildTree()
14956 if (op->arity == 0) { in ExprTreeBuildTree()
14957 if (builder->token->type != JIM_TT_SUBEXPR_END) { in ExprTreeBuildTree()
14958 Jim_SetResultString(interp, "too many arguments for math function", -1); in ExprTreeBuildTree()
14961 builder->token++; in ExprTreeBuildTree()
14964 builder->parencount++; in ExprTreeBuildTree()
14967 … rc = ExprTreeBuildTree(interp, builder, 0, EXPR_FUNC_ARGS | EXPR_UNTIL_CLOSE, op->arity); in ExprTreeBuildTree()
14969 else if (t->type == JIM_EXPROP_TERNARY) { in ExprTreeBuildTree()
14971 rc = ExprTreeBuildTree(interp, builder, op->precedence, EXPR_TERNARY, 2); in ExprTreeBuildTree()
14974 rc = ExprTreeBuildTree(interp, builder, op->precedence, 0, 1); in ExprTreeBuildTree()
14982 node = builder->next++; in ExprTreeBuildTree()
14983 node->type = t->type; in ExprTreeBuildTree()
14985 if (op->arity >= 3) { in ExprTreeBuildTree()
14986 node->ternary = Jim_StackPop(&builder->stack); in ExprTreeBuildTree()
14987 if (node->ternary == NULL) { in ExprTreeBuildTree()
14991 if (op->arity >= 2) { in ExprTreeBuildTree()
14992 node->right = Jim_StackPop(&builder->stack); in ExprTreeBuildTree()
14993 if (node->right == NULL) { in ExprTreeBuildTree()
14997 if (op->arity >= 1) { in ExprTreeBuildTree()
14998 node->left = Jim_StackPop(&builder->stack); in ExprTreeBuildTree()
14999 if (node->left == NULL) { in ExprTreeBuildTree()
15001 …ltFormatted(interp, "missing operand to %s in expression: \"%#s\"", op->name, builder->exprObjPtr); in ExprTreeBuildTree()
15002 builder->next--; in ExprTreeBuildTree()
15009 Jim_StackPush(&builder->stack, node); in ExprTreeBuildTree()
15018 … Jim_SetResultFormatted(interp, "missing operator in expression: \"%#s\"", builder->exprObjPtr); in ExprTreeBuildTree()
15023 if (t->type == JIM_TT_EXPR_INT || t->type == JIM_TT_EXPR_DOUBLE) { in ExprTreeBuildTree()
15025 if (t->type == JIM_TT_EXPR_INT) { in ExprTreeBuildTree()
15026 objPtr = Jim_NewIntObj(interp, jim_strtoull(t->token, &endptr)); in ExprTreeBuildTree()
15029 objPtr = Jim_NewDoubleObj(interp, strtod(t->token, &endptr)); in ExprTreeBuildTree()
15031 if (endptr != t->token + t->len) { in ExprTreeBuildTree()
15040 objPtr = Jim_NewStringObj(interp, t->token, t->len); in ExprTreeBuildTree()
15041 if (t->type == JIM_TT_CMD) { in ExprTreeBuildTree()
15043 Jim_SetSourceInfo(interp, objPtr, builder->fileNameObj, t->line); in ExprTreeBuildTree()
15048 node = builder->next++; in ExprTreeBuildTree()
15049 node->objPtr = objPtr; in ExprTreeBuildTree()
15050 Jim_IncrRefCount(node->objPtr); in ExprTreeBuildTree()
15051 node->type = t->type; in ExprTreeBuildTree()
15052 Jim_StackPush(&builder->stack, node); in ExprTreeBuildTree()
15056 if (builder->stack.len == exp_stacklen) { in ExprTreeBuildTree()
15057 builder->level--; in ExprTreeBuildTree()
15062 …Jim_SetResultFormatted(interp, "too %s arguments for math function", (builder->stack.len < exp_sta… in ExprTreeBuildTree()
15065 if (builder->stack.len < exp_stacklen) { in ExprTreeBuildTree()
15066 if (builder->level == 0) { in ExprTreeBuildTree()
15070 …ed(interp, "syntax error in expression \"%#s\": premature end of expression", builder->exprObjPtr); in ExprTreeBuildTree()
15090 builder.token = builder.first_token = tokenlist->list; in ExprTreeCreateTree()
15094 builder.nodes = Jim_Alloc(sizeof(struct JimExprNode) * (tokenlist->count - 1)); in ExprTreeCreateTree()
15095 memset(builder.nodes, 0, sizeof(struct JimExprNode) * (tokenlist->count - 1)); in ExprTreeCreateTree()
15105 Jim_SetResultString(interp, "missing close parenthesis", -1); in ExprTreeCreateTree()
15114 ExprTreeFreeNodes(interp, builder.nodes, builder.next - builder.nodes); in ExprTreeCreateTree()
15119 expr->inUse = 1; in ExprTreeCreateTree()
15120 expr->expr = top; in ExprTreeCreateTree()
15121 expr->nodes = builder.nodes; in ExprTreeCreateTree()
15122 expr->len = builder.next - builder.nodes; in ExprTreeCreateTree()
15124 assert(expr->len <= tokenlist->count - 1); in ExprTreeCreateTree()
15161 ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, in SetExprFromAny()
15177 Jim_SetResultString(interp, "empty expression", -1); in SetExprFromAny()
15201 JimShowExprNode(expr->expr, 0); in SetExprFromAny()
15211 objPtr->typePtr = &exprObjType; in SetExprFromAny()
15217 if (objPtr->typePtr != &exprObjType) { in JimGetExpression()
15228 if (node->type == JIM_TT_EXPR_INT) in JimExprIntValOrVar()
15229 return node->objPtr; in JimExprIntValOrVar()
15230 else if (node->type == JIM_TT_VAR) in JimExprIntValOrVar()
15231 return Jim_GetVariable(interp, node->objPtr, JIM_NONE); in JimExprIntValOrVar()
15232 else if (node->type == JIM_TT_DICTSUGAR) in JimExprIntValOrVar()
15233 return JimExpandDictSugar(interp, node->objPtr); in JimExprIntValOrVar()
15242 if (TOKEN_IS_EXPR_OP(node->type)) { in JimExprEvalTermNode()
15243 const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(node->type); in JimExprEvalTermNode()
15244 return op->funcop(interp, node); in JimExprEvalTermNode()
15250 switch (node->type) { in JimExprEvalTermNode()
15255 Jim_SetResult(interp, node->objPtr); in JimExprEvalTermNode()
15259 objPtr = Jim_GetVariable(interp, node->objPtr, JIM_ERRMSG); in JimExprEvalTermNode()
15267 objPtr = JimExpandDictSugar(interp, node->objPtr); in JimExprEvalTermNode()
15275 if (interp->safeexpr) { in JimExprEvalTermNode()
15278 if (Jim_SubstObj(interp, node->objPtr, &objPtr, JIM_NONE) == JIM_OK) { in JimExprEvalTermNode()
15285 if (interp->safeexpr) { in JimExprEvalTermNode()
15288 return Jim_EvalObj(interp, node->objPtr); in JimExprEvalTermNode()
15312 return -1; in JimExprGetTermBoolean()
15328 if (!interp->safeexpr) { in Jim_EvalExpression()
15332 switch (expr->len) { in Jim_EvalExpression()
15334 objPtr = JimExprIntValOrVar(interp, expr->expr); in Jim_EvalExpression()
15342 if (expr->expr->type == JIM_EXPROP_NOT) { in Jim_EvalExpression()
15343 objPtr = JimExprIntValOrVar(interp, expr->expr->left); in Jim_EvalExpression()
15346 … Jim_SetResult(interp, JimWideValue(objPtr) ? interp->falseObj : interp->trueObj); in Jim_EvalExpression()
15353 objPtr = JimExprIntValOrVar(interp, expr->expr->left); in Jim_EvalExpression()
15355 Jim_Obj *objPtr2 = JimExprIntValOrVar(interp, expr->expr->right); in Jim_EvalExpression()
15360 switch (expr->expr->type) { in Jim_EvalExpression()
15382 Jim_SetResult(interp, cmpRes ? interp->trueObj : interp->falseObj); in Jim_EvalExpression()
15392 expr->inUse++; in Jim_EvalExpression()
15395 retcode = JimExprEvalTermNode(interp, expr->expr); in Jim_EvalExpression()
15399 exprObjPtr->typePtr = &exprObjType; in Jim_EvalExpression()
15422 case -1: in Jim_GetBoolFromExpr()
15472 Jim_Free((char *)objPtr->internalRep.ptr); in FreeScanFmtInternalRep()
15473 objPtr->internalRep.ptr = 0; in FreeScanFmtInternalRep()
15478 size_t size = (size_t) ((ScanFmtStringObj *) srcPtr->internalRep.ptr)->size; in DupScanFmtInternalRep()
15482 memcpy(newVec, srcPtr->internalRep.ptr, size); in DupScanFmtInternalRep()
15483 dupPtr->internalRep.ptr = newVec; in DupScanFmtInternalRep()
15484 dupPtr->typePtr = &scanFmtStringObjType; in DupScanFmtInternalRep()
15489 JimSetStringBytes(objPtr, ((ScanFmtStringObj *) objPtr->internalRep.ptr)->stringRep); in UpdateStringOfScanFmt()
15497 int maxCount, i, approxSize, lastPos = -1; in SetScanFmtFromAny()
15518 fmtObj->size = approxSize; in SetScanFmtFromAny()
15519 fmtObj->maxPos = 0; in SetScanFmtFromAny()
15520 fmtObj->scratch = (char *)&fmtObj->descr[maxCount + 1]; in SetScanFmtFromAny()
15521 fmtObj->stringRep = fmtObj->scratch + maxFmtLen + 3 + 1; in SetScanFmtFromAny()
15522 memcpy(fmtObj->stringRep, fmt, maxFmtLen); in SetScanFmtFromAny()
15523 buffer = fmtObj->stringRep + maxFmtLen + 1; in SetScanFmtFromAny()
15524 objPtr->internalRep.ptr = fmtObj; in SetScanFmtFromAny()
15525 objPtr->typePtr = &scanFmtStringObjType; in SetScanFmtFromAny()
15528 ScanFmtPartDescr *descr = &fmtObj->descr[curr]; in SetScanFmtFromAny()
15530 fmtObj->count++; in SetScanFmtFromAny()
15531 descr->width = 0; in SetScanFmtFromAny()
15534 descr->type = 0; in SetScanFmtFromAny()
15535 descr->prefix = &buffer[i]; in SetScanFmtFromAny()
15551 descr->pos = 0; in SetScanFmtFromAny()
15553 descr->pos = -1; in SetScanFmtFromAny()
15557 fmtObj->convCount++; in SetScanFmtFromAny()
15562 if (descr->pos != -1 && *fmt == '$') { in SetScanFmtFromAny()
15566 descr->pos = width; in SetScanFmtFromAny()
15569 if ((lastPos == 0 && descr->pos > 0) in SetScanFmtFromAny()
15570 || (lastPos > 0 && descr->pos == 0)) { in SetScanFmtFromAny()
15571 fmtObj->error = "cannot mix \"%\" and \"%n$\" conversion specifiers"; in SetScanFmtFromAny()
15576 if (fmtObj->descr[prev].pos == -1) in SetScanFmtFromAny()
15578 if (fmtObj->descr[prev].pos == descr->pos) { in SetScanFmtFromAny()
15579 fmtObj->error = in SetScanFmtFromAny()
15584 if (descr->pos < 0) { in SetScanFmtFromAny()
15585 fmtObj->error = in SetScanFmtFromAny()
15591 descr->width = width; in SetScanFmtFromAny()
15594 if (descr->pos > 0 && (size_t) descr->pos > fmtObj->maxPos) in SetScanFmtFromAny()
15595 fmtObj->maxPos = descr->pos; in SetScanFmtFromAny()
15599 descr->width = width; in SetScanFmtFromAny()
15603 if (lastPos == -1) in SetScanFmtFromAny()
15604 lastPos = descr->pos; in SetScanFmtFromAny()
15609 descr->type = '['; in SetScanFmtFromAny()
15610 descr->arg = &buffer[i]; in SetScanFmtFromAny()
15619 fmtObj->error = "unmatched [ in format string"; in SetScanFmtFromAny()
15627 for (j = beg + 1; j < end - 1; ++j) { in SetScanFmtFromAny()
15628 if (buffer[j] == '-' && buffer[j - 1] > buffer[j + 1]) { in SetScanFmtFromAny()
15629 char tmp = buffer[j - 1]; in SetScanFmtFromAny()
15631 buffer[j - 1] = buffer[j + 1]; in SetScanFmtFromAny()
15641 descr->modifier = tolower((int)*fmt++); in SetScanFmtFromAny()
15644 fmtObj->error = "missing scan conversion character"; in SetScanFmtFromAny()
15648 descr->type = *fmt; in SetScanFmtFromAny()
15650 fmtObj->error = "bad scan conversion character"; in SetScanFmtFromAny()
15653 else if (*fmt == 'c' && descr->width != 0) { in SetScanFmtFromAny()
15654 fmtObj->error = "field width may not be specified in %c " "conversion"; in SetScanFmtFromAny()
15657 else if (*fmt == 'u' && descr->modifier == 'l') { in SetScanFmtFromAny()
15658 fmtObj->error = "unsigned wide not supported"; in SetScanFmtFromAny()
15671 ((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->convCount
15673 ((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->maxPos
15675 ((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->error
15692 while (n--) in JimScanAString()
15696 return Jim_NewStringObjNoAlloc(interp, buffer, p - buffer); in JimScanAString()
15704 const ScanFmtPartDescr *descr = &fmtObj->descr[idx]; in ScanOneEntry()
15712 if (descr->prefix) { in ScanOneEntry()
15713 for (i = 0; pos < str_bytelen && descr->prefix[i]; ++i) { in ScanOneEntry()
15715 if (isspace(UCHAR(descr->prefix[i]))) in ScanOneEntry()
15718 else if (descr->prefix[i] != str[pos]) in ScanOneEntry()
15724 return -1; in ScanOneEntry()
15726 else if (descr->prefix[i] != 0) in ScanOneEntry()
15730 if (descr->type != 'c' && descr->type != '[' && descr->type != 'n') in ScanOneEntry()
15735 scanned = pos - anchor; in ScanOneEntry()
15738 if (descr->type == 'n') { in ScanOneEntry()
15744 return -1; in ScanOneEntry()
15746 else if (descr->type == 'c') { in ScanOneEntry()
15754 if (descr->width > 0) { in ScanOneEntry()
15755 size_t sLen = utf8_strlen(&str[pos], str_bytelen - pos); in ScanOneEntry()
15756 size_t tLen = descr->width > sLen ? sLen : descr->width; in ScanOneEntry()
15759 tok = tmpObj->bytes; in ScanOneEntry()
15765 switch (descr->type) { in ScanOneEntry()
15774 int base = descr->type == 'o' ? 8 in ScanOneEntry()
15775 : descr->type == 'x' ? 16 : descr->type == 'i' ? 0 : 10; in ScanOneEntry()
15790 scanned += endp - tok; in ScanOneEntry()
15793 scanned = *tok ? 0 : -1; in ScanOneEntry()
15799 *valObjPtr = JimScanAString(interp, descr->arg, tok); in ScanOneEntry()
15813 scanned += endp - tok; in ScanOneEntry()
15816 scanned = *tok ? 0 : -1; in ScanOneEntry()
15842 JimPanic((fmtObjPtr->typePtr != &scanFmtStringObjType, "Jim_ScanString() for non-scan format")); in Jim_ScanString()
15844 fmtObj = (ScanFmtStringObj *) fmtObjPtr->internalRep.ptr; in Jim_ScanString()
15846 if (fmtObj->error != 0) { in Jim_ScanString()
15848 Jim_SetResultString(interp, fmtObj->error, -1); in Jim_ScanString()
15856 if (fmtObj->maxPos > 0) { in Jim_ScanString()
15857 for (i = 0; i < fmtObj->maxPos; ++i) in Jim_ScanString()
15862 for (i = 0, pos = 0; i < fmtObj->count; ++i) { in Jim_ScanString()
15863 ScanFmtPartDescr *descr = &(fmtObj->descr[i]); in Jim_ScanString()
15867 if (descr->type == 0) in Jim_ScanString()
15873 if (scanned == -1 && i == 0) in Jim_ScanString()
15882 if (descr->pos == -1) { in Jim_ScanString()
15885 else if (descr->pos == 0) in Jim_ScanString()
15888 else if (resultVec[descr->pos - 1] == emptyStr) { in Jim_ScanString()
15890 Jim_DecrRefCount(interp, resultVec[descr->pos - 1]); in Jim_ScanString()
15892 resultVec[descr->pos - 1] = value; in Jim_ScanString()
15920 interp->prngState = Jim_Alloc(sizeof(Jim_PrngState)); in JimPrngInit()
15938 if (interp->prngState == NULL) in JimRandomBytes()
15940 prng = interp->prngState; in JimRandomBytes()
15943 prng->i = (prng->i + 1) & 0xff; in JimRandomBytes()
15944 si = prng->sbox[prng->i]; in JimRandomBytes()
15945 prng->j = (prng->j + si) & 0xff; in JimRandomBytes()
15946 sj = prng->sbox[prng->j]; in JimRandomBytes()
15947 prng->sbox[prng->i] = sj; in JimRandomBytes()
15948 prng->sbox[prng->j] = si; in JimRandomBytes()
15949 *destByte++ = prng->sbox[(si + sj) & 0xff]; in JimRandomBytes()
15960 if (interp->prngState == NULL) in JimPrngSeed()
15962 prng = interp->prngState; in JimPrngSeed()
15966 prng->sbox[i] = i; in JimPrngSeed()
15971 t = prng->sbox[i & 0xFF]; in JimPrngSeed()
15972 prng->sbox[i & 0xFF] = prng->sbox[seed[i]]; in JimPrngSeed()
15973 prng->sbox[seed[i]] = t; in JimPrngSeed()
15975 prng->i = prng->j = 0; in JimPrngSeed()
16016 if (argv[1]->typePtr != &variableObjType) { in Jim_IncrCoreCommand()
16031 JimPanic((interp->traceCmdObj == NULL, "xtrace invoked with no object")); in JimTraceCallback()
16035 Jim_Obj *traceCmdObj = interp->traceCmdObj; in JimTraceCallback()
16041 if (interp->evalFrame->scriptObj) { in JimTraceCallback()
16042 script = JimGetScript(interp, interp->evalFrame->scriptObj); in JimTraceCallback()
16046 nargv[1] = Jim_NewStringObj(interp, type, -1); in JimTraceCallback()
16047 nargv[2] = script ? script->fileNameObj : interp->emptyObj; in JimTraceCallback()
16048 nargv[3] = Jim_NewIntObj(interp, script ? script->linenr : 1); in JimTraceCallback()
16051 nargv[6] = Jim_NewListObj(interp, argv + 1, argc - 1); in JimTraceCallback()
16054 interp->traceCmdObj = NULL; in JimTraceCallback()
16062 interp->traceCmdObj = traceCmdObj; in JimTraceCallback()
16078 if (interp->unknown_called > 50) { in JimUnknown()
16084 if (Jim_GetCommand(interp, interp->unknown, JIM_NONE) == NULL) in JimUnknown()
16087 interp->unknown_called++; in JimUnknown()
16089 retcode = Jim_EvalObjPrefix(interp, interp->unknown, argc, argv); in JimUnknown()
16090 interp->unknown_called--; in JimUnknown()
16098 frame->parent = interp->evalFrame; in JimPushEvalFrame()
16099 frame->level = frame->parent->level + 1; in JimPushEvalFrame()
16100 frame->procLevel = interp->procLevel; in JimPushEvalFrame()
16101 frame->framePtr = interp->framePtr; in JimPushEvalFrame()
16103 frame->scriptObj = scriptObj; in JimPushEvalFrame()
16106 frame->scriptObj = frame->parent->scriptObj; in JimPushEvalFrame()
16108 interp->evalFrame = frame; in JimPushEvalFrame()
16110 if (frame->scriptObj) { in JimPushEvalFrame()
16111 printf("script: %.*s\n", 20, Jim_String(frame->scriptObj)); in JimPushEvalFrame()
16118 interp->evalFrame = interp->evalFrame->parent; in JimPopEvalFrame()
16144 if (interp->evalDepth == interp->maxEvalDepth) { in JimInvokeCommand()
16145 Jim_SetResultString(interp, "Infinite eval recursion", -1); in JimInvokeCommand()
16149 interp->evalDepth++; in JimInvokeCommand()
16150 prevPrivData = interp->cmdPrivData; in JimInvokeCommand()
16154 interp->evalFrame->argc = objc; in JimInvokeCommand()
16155 interp->evalFrame->argv = objv; in JimInvokeCommand()
16156 interp->evalFrame->cmd = cmdPtr; in JimInvokeCommand()
16158 if (!interp->traceCmdObj || in JimInvokeCommand()
16162 if (cmdPtr->isproc) { in JimInvokeCommand()
16166 interp->cmdPrivData = cmdPtr->u.native.privData; in JimInvokeCommand()
16167 retcode = cmdPtr->u.native.cmdProc(interp, objc, objv); in JimInvokeCommand()
16181 interp->evalFrame->argc = 0; in JimInvokeCommand()
16182 interp->evalFrame->argv = NULL; in JimInvokeCommand()
16185 if (retcode == JIM_EVAL && interp->framePtr->tailcallObj) { in JimInvokeCommand()
16189 cmdPtr = interp->framePtr->tailcallCmd; in JimInvokeCommand()
16190 interp->framePtr->tailcallCmd = NULL; in JimInvokeCommand()
16191 tailcallObj = interp->framePtr->tailcallObj; in JimInvokeCommand()
16192 interp->framePtr->tailcallObj = NULL; in JimInvokeCommand()
16193 objc = tailcallObj->internalRep.listValue.len; in JimInvokeCommand()
16194 objv = tailcallObj->internalRep.listValue.ele; in JimInvokeCommand()
16198 interp->cmdPrivData = prevPrivData; in JimInvokeCommand()
16199 interp->evalDepth--; in JimInvokeCommand()
16208 if (interp->framePtr->tailcallObj) { in JimInvokeCommand()
16209 JimDecrCmdRefCount(interp, interp->framePtr->tailcallCmd); in JimInvokeCommand()
16210 Jim_DecrRefCount(interp, interp->framePtr->tailcallObj); in JimInvokeCommand()
16211 interp->framePtr->tailcallCmd = NULL; in JimInvokeCommand()
16212 interp->framePtr->tailcallObj = NULL; in JimInvokeCommand()
16258 switch (token->type) { in JimSubstOneToken()
16261 objPtr = token->objPtr; in JimSubstOneToken()
16264 objPtr = Jim_GetVariable(interp, token->objPtr, JIM_ERRMSG); in JimSubstOneToken()
16267 objPtr = JimExpandDictSugar(interp, token->objPtr); in JimSubstOneToken()
16270 ret = Jim_EvalExpression(interp, token->objPtr); in JimSubstOneToken()
16279 ret = Jim_EvalObj(interp, token->objPtr); in JimSubstOneToken()
16281 objPtr = interp->result; in JimSubstOneToken()
16289 "default token type (%d) reached " "in Jim_SubstObj().", token->type)); in JimSubstOneToken()
16334 while (i--) { in JimInterpolateTokens()
16344 totlen += intv[i]->length; in JimInterpolateTokens()
16350 intv[0]->refCount--; in JimInterpolateTokens()
16359 objPtr->typePtr = &interpolatedObjType; in JimInterpolateTokens()
16360 objPtr->internalRep.dictSubstValue.varNameObjPtr = token[0].objPtr; in JimInterpolateTokens()
16361 objPtr->internalRep.dictSubstValue.indexObjPtr = intv[2]; in JimInterpolateTokens()
16364 else if (tokens && intv[0] && intv[0]->typePtr == &sourceObjType) { in JimInterpolateTokens()
16372 s = objPtr->bytes = Jim_Alloc(totlen + 1); in JimInterpolateTokens()
16373 objPtr->length = totlen; in JimInterpolateTokens()
16376 memcpy(s, intv[i]->bytes, intv[i]->length); in JimInterpolateTokens()
16377 s += intv[i]->length; in JimInterpolateTokens()
16381 objPtr->bytes[totlen] = '\0'; in JimInterpolateTokens()
16396 JimPanic((Jim_IsList(listPtr) == 0, "JimEvalObjList() invoked on non-list.")); in JimEvalObjList()
16400 if (listPtr->internalRep.listValue.len) { in JimEvalObjList()
16403 listPtr->internalRep.listValue.len, in JimEvalObjList()
16404 listPtr->internalRep.listValue.ele); in JimEvalObjList()
16428 if (Jim_IsList(scriptObjPtr) && scriptObjPtr->bytes == NULL) { in Jim_EvalObj()
16434 if (JimParseCheckMissing(interp, script->missing) == JIM_ERR) { in Jim_EvalObj()
16442 token = script->token; in Jim_EvalObj()
16445 if (script->len == 0) { in Jim_EvalObj()
16449 if (script->len == 3 in Jim_EvalObj()
16450 && token[1].objPtr->typePtr == &commandObjType in Jim_EvalObj()
16451 && token[1].objPtr->internalRep.cmdValue.cmdPtr->isproc == 0 in Jim_EvalObj()
16452 && token[1].objPtr->internalRep.cmdValue.cmdPtr->u.native.cmdProc == Jim_IncrCoreCommand in Jim_EvalObj()
16453 && token[2].objPtr->typePtr == &variableObjType) { in Jim_EvalObj()
16457 if (objPtr && !Jim_IsShared(objPtr) && objPtr->typePtr == &intObjType) { in Jim_EvalObj()
16467 script->inUse++; in Jim_EvalObj()
16472 interp->errorFlag = 0; in Jim_EvalObj()
16475 for (i = 0; i < script->len && retcode == JIM_OK; ) { in Jim_EvalObj()
16480 argc = token[i].objPtr->internalRep.scriptLineValue.argc; in Jim_EvalObj()
16481 script->linenr = token[i].objPtr->internalRep.scriptLineValue.line; in Jim_EvalObj()
16499 wordtokens = -wordtokens; in Jim_EvalObj()
16555 int newargc = argc + len - 1; in Jim_EvalObj()
16573 argv[j++] = wordObjPtr->internalRep.listValue.ele[k]; in Jim_EvalObj()
16574 Jim_IncrRefCount(wordObjPtr->internalRep.listValue.ele[k]); in Jim_EvalObj()
16580 j--; in Jim_EvalObj()
16581 argc += len - 1; in Jim_EvalObj()
16595 while (j-- > 0) { in Jim_EvalObj()
16613 scriptObjPtr->typePtr = &scriptObjType; in Jim_EvalObj()
16628 Jim_CallFrame *savedCallFrame = interp->framePtr; in JimSetProcArg()
16630 interp->framePtr = interp->framePtr->parent; in JimSetProcArg()
16632 interp->framePtr = savedCallFrame; in JimSetProcArg()
16638 objPtr = Jim_NewStringObj(interp, varname + 1, -1); in JimSetProcArg()
16640 retcode = Jim_SetVariableLink(interp, objPtr, argValObj, interp->framePtr->parent); in JimSetProcArg()
16655 for (i = 0; i < cmd->u.proc.argListLen; i++) { in JimSetProcWrongArgs()
16658 if (i == cmd->u.proc.argsPos) { in JimSetProcWrongArgs()
16659 if (cmd->u.proc.arglist[i].defaultObjPtr) { in JimSetProcWrongArgs()
16662 Jim_AppendObj(interp, argmsg, cmd->u.proc.arglist[i].defaultObjPtr); in JimSetProcWrongArgs()
16663 Jim_AppendString(interp, argmsg, " ...?", -1); in JimSetProcWrongArgs()
16667 Jim_AppendString(interp, argmsg, "?arg ...?", -1); in JimSetProcWrongArgs()
16671 if (cmd->u.proc.arglist[i].defaultObjPtr) { in JimSetProcWrongArgs()
16673 Jim_AppendObj(interp, argmsg, cmd->u.proc.arglist[i].nameObjPtr); in JimSetProcWrongArgs()
16677 const char *arg = Jim_String(cmd->u.proc.arglist[i].nameObjPtr); in JimSetProcWrongArgs()
16681 Jim_AppendString(interp, argmsg, arg, -1); in JimSetProcWrongArgs()
16695 callFramePtr = JimCreateCallFrame(interp, interp->framePtr, nsObj); in Jim_EvalNamespace()
16696 callFramePtr->argv = interp->evalFrame->argv; in Jim_EvalNamespace()
16697 callFramePtr->argc = interp->evalFrame->argc; in Jim_EvalNamespace()
16698 callFramePtr->procArgsObjPtr = NULL; in Jim_EvalNamespace()
16699 callFramePtr->procBodyObjPtr = scriptObj; in Jim_EvalNamespace()
16700 callFramePtr->staticVars = NULL; in Jim_EvalNamespace()
16702 interp->framePtr = callFramePtr; in Jim_EvalNamespace()
16705 if (interp->framePtr->level == interp->maxCallFrameDepth) { in Jim_EvalNamespace()
16706 Jim_SetResultString(interp, "Too many nested calls. Infinite recursion?", -1); in Jim_EvalNamespace()
16715 interp->framePtr = interp->framePtr->parent; in Jim_EvalNamespace()
16728 if (argc - 1 < cmd->u.proc.reqArity || in JimCallProcedure()
16729 (cmd->u.proc.argsPos < 0 && argc - 1 > cmd->u.proc.reqArity + cmd->u.proc.optArity)) { in JimCallProcedure()
16734 if (Jim_Length(cmd->u.proc.bodyObjPtr) == 0) { in JimCallProcedure()
16740 if (interp->framePtr->level == interp->maxCallFrameDepth) { in JimCallProcedure()
16741 Jim_SetResultString(interp, "Too many nested calls. Infinite recursion?", -1); in JimCallProcedure()
16746 callFramePtr = JimCreateCallFrame(interp, interp->framePtr, cmd->u.proc.nsObj); in JimCallProcedure()
16747 callFramePtr->argv = argv; in JimCallProcedure()
16748 callFramePtr->argc = argc; in JimCallProcedure()
16749 callFramePtr->procArgsObjPtr = cmd->u.proc.argListObjPtr; in JimCallProcedure()
16750 callFramePtr->procBodyObjPtr = cmd->u.proc.bodyObjPtr; in JimCallProcedure()
16751 callFramePtr->staticVars = cmd->u.proc.staticVars; in JimCallProcedure()
16753 interp->procLevel++; in JimCallProcedure()
16755 Jim_IncrRefCount(cmd->u.proc.argListObjPtr); in JimCallProcedure()
16756 Jim_IncrRefCount(cmd->u.proc.bodyObjPtr); in JimCallProcedure()
16757 interp->framePtr = callFramePtr; in JimCallProcedure()
16760 optargs = (argc - 1 - cmd->u.proc.reqArity); in JimCallProcedure()
16764 for (d = 0; d < cmd->u.proc.argListLen; d++) { in JimCallProcedure()
16765 Jim_Obj *nameObjPtr = cmd->u.proc.arglist[d].nameObjPtr; in JimCallProcedure()
16766 if (d == cmd->u.proc.argsPos) { in JimCallProcedure()
16770 if (cmd->u.proc.reqArity + cmd->u.proc.optArity < argc - 1) { in JimCallProcedure()
16771 argsLen = argc - 1 - (cmd->u.proc.reqArity + cmd->u.proc.optArity); in JimCallProcedure()
16776 if (cmd->u.proc.arglist[d].defaultObjPtr) { in JimCallProcedure()
16777 nameObjPtr =cmd->u.proc.arglist[d].defaultObjPtr; in JimCallProcedure()
16789 if (cmd->u.proc.arglist[d].defaultObjPtr == NULL || optargs-- > 0) { in JimCallProcedure()
16794 retcode = Jim_SetVariable(interp, nameObjPtr, cmd->u.proc.arglist[d].defaultObjPtr); in JimCallProcedure()
16801 if (interp->traceCmdObj == NULL || in JimCallProcedure()
16804 retcode = Jim_EvalObj(interp, cmd->u.proc.bodyObjPtr); in JimCallProcedure()
16811 interp->framePtr = interp->framePtr->parent; in JimCallProcedure()
16816 if (--interp->returnLevel <= 0) { in JimCallProcedure()
16817 retcode = interp->returnCode; in JimCallProcedure()
16818 interp->returnCode = JIM_OK; in JimCallProcedure()
16819 interp->returnLevel = 0; in JimCallProcedure()
16822 interp->procLevel--; in JimCallProcedure()
16832 scriptObjPtr = Jim_NewStringObj(interp, script, -1); in Jim_EvalSource()
16835 Jim_SetSourceInfo(interp, scriptObjPtr, Jim_NewStringObj(interp, filename, -1), lineno); in Jim_EvalSource()
16844 return Jim_EvalObj(interp, Jim_NewStringObj(interp, script, -1)); in Jim_Eval()
16851 Jim_CallFrame *savedFramePtr = interp->framePtr; in Jim_EvalGlobal()
16853 interp->framePtr = interp->topFramePtr; in Jim_EvalGlobal()
16855 interp->framePtr = savedFramePtr; in Jim_EvalGlobal()
16863 Jim_CallFrame *savedFramePtr = interp->framePtr; in Jim_EvalFileGlobal()
16865 interp->framePtr = interp->topFramePtr; in Jim_EvalFileGlobal()
16867 interp->framePtr = savedFramePtr; in Jim_EvalFileGlobal()
16881 if (Jim_Stat(filename, &sb) == -1 || (fd = open(filename, O_RDONLY | O_TEXT, 0666)) < 0) { in JimReadTextFile()
16916 filenameObj = Jim_NewStringObj(interp, filename, -1); in Jim_EvalFile()
16919 oldFilenameObj = JimPushInterpObj(interp->currentFilenameObj, filenameObj); in Jim_EvalFile()
16923 JimPopInterpObj(interp, interp->currentFilenameObj, oldFilenameObj); in Jim_EvalFile()
16927 if (--interp->returnLevel <= 0) { in Jim_EvalFile()
16928 retcode = interp->returnCode; in Jim_EvalFile()
16929 interp->returnCode = JIM_OK; in Jim_EvalFile()
16930 interp->returnLevel = 0; in Jim_EvalFile()
16939 pc->tstart = pc->p; in JimParseSubst()
16940 pc->tline = pc->linenr; in JimParseSubst()
16942 if (pc->len == 0) { in JimParseSubst()
16943 pc->tend = pc->p; in JimParseSubst()
16944 pc->tt = JIM_TT_EOL; in JimParseSubst()
16945 pc->eof = 1; in JimParseSubst()
16948 if (*pc->p == '[' && !(flags & JIM_SUBST_NOCMD)) { in JimParseSubst()
16952 if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { in JimParseSubst()
16957 pc->tstart = pc->p; in JimParseSubst()
16959 pc->p++; in JimParseSubst()
16960 pc->len--; in JimParseSubst()
16962 while (pc->len) { in JimParseSubst()
16963 if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { in JimParseSubst()
16966 if (*pc->p == '[' && !(flags & JIM_SUBST_NOCMD)) { in JimParseSubst()
16969 if (*pc->p == '\\' && pc->len > 1) { in JimParseSubst()
16970 pc->p++; in JimParseSubst()
16971 pc->len--; in JimParseSubst()
16973 pc->p++; in JimParseSubst()
16974 pc->len--; in JimParseSubst()
16976 pc->tend = pc->p - 1; in JimParseSubst()
16977 pc->tt = (flags & JIM_SUBST_NOESC) ? JIM_TT_STR : JIM_TT_ESC; in JimParseSubst()
16999 ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, in SetSubstFromAny()
17004 script->inUse = 1; in SetSubstFromAny()
17005 script->substFlags = flags; in SetSubstFromAny()
17006 script->fileNameObj = interp->emptyObj; in SetSubstFromAny()
17007 Jim_IncrRefCount(script->fileNameObj); in SetSubstFromAny()
17018 for (i = 0; i < script->len; i++) { in SetSubstFromAny()
17019 printf("[%2d] %s '%s'\n", i, jim_tt_name(script->token[i].type), in SetSubstFromAny()
17020 Jim_String(script->token[i].objPtr)); in SetSubstFromAny()
17028 objPtr->typePtr = &scriptObjType; in SetSubstFromAny()
17034 …if (objPtr->typePtr != &scriptObjType || ((ScriptObj *)Jim_GetIntRepPtr(objPtr))->substFlags != fl… in Jim_GetSubst()
17043 JimPanic((substObjPtr->refCount == 0, "Jim_SubstObj() called with zero refcount object")); in Jim_SubstObj()
17048 script->inUse++; in Jim_SubstObj()
17050 *resObjPtrPtr = JimInterpolateTokens(interp, script->token, script->len, flags); in Jim_SubstObj()
17052 script->inUse--; in Jim_SubstObj()
17070 Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, msg, -1)); in Jim_WrongNumArgs()
17119 if (type == JIM_CMDLIST_PROCS && !cmdPtr->isproc) { in JimCommandMatch()
17148 … return JimHashtablePatternMatch(interp, &interp->commands, patternObjPtr, JimCommandMatch, type); in JimCommandsList()
17164 if ((type & JIM_VARLIST_MASK) != JIM_VARLIST_LOCALS || vv->linkFramePtr == NULL) { in JimVariablesMatch()
17168 Jim_ListAppendElement(interp, listObjPtr, vv->objPtr); in JimVariablesMatch()
17177 if (mode == JIM_VARLIST_LOCALS && interp->framePtr == interp->topFramePtr) { in JimVariablesList()
17178 return interp->emptyObj; in JimVariablesList()
17181 … Jim_CallFrame *framePtr = (mode == JIM_VARLIST_GLOBALS) ? interp->topFramePtr : interp->framePtr; in JimVariablesList()
17182 return JimHashtablePatternMatch(interp, &framePtr->vars, patternObjPtr, JimVariablesMatch, in JimVariablesList()
17193 if (targetCallFrame && targetCallFrame != interp->topFramePtr) { in JimInfoLevel()
17196 *objPtrPtr = Jim_NewListObj(interp, targetCallFrame->argv, 1); in JimInfoLevel()
17198 *objPtrPtr = Jim_NewListObj(interp, targetCallFrame->argv, targetCallFrame->argc); in JimInfoLevel()
17216 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "type", -1)); in JimInfoFrame()
17217 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "source", -1)); in JimInfoFrame()
17218 if (frame->scriptObj) { in JimInfoFrame()
17219 ScriptObj *script = JimGetScript(interp, frame->scriptObj); in JimInfoFrame()
17220 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "line", -1)); in JimInfoFrame()
17221 Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, script->linenr)); in JimInfoFrame()
17222 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "file", -1)); in JimInfoFrame()
17223 Jim_ListAppendElement(interp, listObj, script->fileNameObj); in JimInfoFrame()
17227 Jim_Obj *cmdObj = Jim_NewListObj(interp, frame->argv, frame->argc); in JimInfoFrame()
17229 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "cmd", -1)); in JimInfoFrame()
17236 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "proc", -1)); in JimInfoFrame()
17240 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "level", -1)); in JimInfoFrame()
17241 …ppendElement(interp, listObj, Jim_NewIntObj(interp, interp->framePtr->level - frame->framePtr->lev… in JimInfoFrame()
17255 Jim_WrongNumArgs(interp, 1, argv, "?-nonewline? string"); in Jim_PutsCoreCommand()
17259 if (!Jim_CompareStringImmediate(interp, argv[1], "-nonewline")) { in Jim_PutsCoreCommand()
17260 Jim_SetResultString(interp, "The second argument must " "be -nonewline", -1); in Jim_PutsCoreCommand()
17324 doubleRes = -doubleValue; in JimSubDivHelper()
17332 res = -wideValue; in JimSubDivHelper()
17358 res -= wideValue; in JimSubDivHelper()
17361 Jim_SetResultString(interp, "Division by zero", -1); in JimSubDivHelper()
17374 doubleRes -= doubleValue; in JimSubDivHelper()
17436 if (Jim_CompareStringImmediate(interp, argv[i], "--")) { in Jim_UnsetCoreCommand()
17440 if (Jim_CompareStringImmediate(interp, argv[i], "-nocomplain")) { in Jim_UnsetCoreCommand()
17463 if (--interp->break_level > 0) { in JimCheckLoopRetcode()
17541 if (incrScript == NULL || incrScript->len != 3 || !expr || expr->len != 3) { in Jim_ForCoreCommand()
17545 if (incrScript->token[1].type != JIM_TT_ESC) { in Jim_ForCoreCommand()
17549 if (expr->expr->type == JIM_EXPROP_LT) { in Jim_ForCoreCommand()
17552 else if (expr->expr->type == JIM_EXPROP_LTE) { in Jim_ForCoreCommand()
17559 if (expr->expr->left->type != JIM_TT_VAR) { in Jim_ForCoreCommand()
17563 if (expr->expr->right->type != JIM_TT_VAR && expr->expr->right->type != JIM_TT_EXPR_INT) { in Jim_ForCoreCommand()
17568 if (!Jim_CompareStringImmediate(interp, incrScript->token[1].objPtr, "incr")) { in Jim_ForCoreCommand()
17573 if (!Jim_StringEqObj(incrScript->token[2].objPtr, expr->expr->left->objPtr)) { in Jim_ForCoreCommand()
17578 if (expr->expr->right->type == JIM_TT_EXPR_INT) { in Jim_ForCoreCommand()
17579 if (Jim_GetWideExpr(interp, expr->expr->right->objPtr, &stop) == JIM_ERR) { in Jim_ForCoreCommand()
17584 stopVarNamePtr = expr->expr->right->objPtr; in Jim_ForCoreCommand()
17591 varNamePtr = expr->expr->left->objPtr; in Jim_ForCoreCommand()
17632 if (!Jim_IsShared(objPtr) && objPtr->typePtr == &intObjType) { in Jim_ForCoreCommand()
17714 bodyObjPtr = argv[argc - 1]; in Jim_LoopCoreCommand()
17731 if (objPtr && !Jim_IsShared(objPtr) && objPtr->typePtr == &intObjType) { in Jim_LoopCoreCommand()
17732 if (argv[1]->typePtr != &variableObjType) { in Jim_LoopCoreCommand()
17740 if (argv[1]->typePtr != &variableObjType) { in Jim_LoopCoreCommand()
17771 iter->objPtr = objPtr; in JimListIterInit()
17772 iter->idx = 0; in JimListIterInit()
17777 if (iter->idx >= Jim_ListLength(interp, iter->objPtr)) { in JimListIterNext()
17780 return iter->objPtr->internalRep.listValue.ele[iter->idx++]; in JimListIterNext()
17785 return iter->idx >= Jim_ListLength(interp, iter->objPtr); in JimListIterDone()
17802 script = argv[argc - 1]; in JimForeachMapHelper()
17803 numargs = (argc - 1 - 1); in JimForeachMapHelper()
17818 Jim_SetResultString(interp, "foreach varlist is empty", -1); in JimForeachMapHelper()
17826 resultObj = interp->emptyObj; in JimForeachMapHelper()
17852 valObj = interp->emptyObj; in JimForeachMapHelper()
17870 Jim_ListAppendElement(interp, resultObj, interp->result); in JimForeachMapHelper()
17922 result = Jim_SetVariable(interp, argv[i], valObj ? valObj : interp->emptyObj); in Jim_LassignCoreCommand()
17969 if (current != argc - 1) in Jim_IfCoreCommand()
17976 else if (falsebody != argc - 1) in Jim_IfCoreCommand()
17998 parms[argc++] = Jim_NewStringObj(interp, "-nocase", -1); in Jim_CommandMatchObj()
18001 parms[argc++] = Jim_NewStringObj(interp, "--", -1); in Jim_CommandMatchObj()
18009 eq = -rc; in Jim_CommandMatchObj()
18033 if (*option != '-') in Jim_SwitchCoreCommand()
18035 else if (strncmp(option, "--", 2) == 0) { in Jim_SwitchCoreCommand()
18039 else if (strncmp(option, "-exact", 2) == 0) in Jim_SwitchCoreCommand()
18041 else if (strncmp(option, "-glob", 2) == 0) in Jim_SwitchCoreCommand()
18043 else if (strncmp(option, "-regexp", 2) == 0) { in Jim_SwitchCoreCommand()
18047 else if (strncmp(option, "-command", 2) == 0) { in Jim_SwitchCoreCommand()
18049 if ((argc - opt) < 2) in Jim_SwitchCoreCommand()
18055 "bad option \"%#s\": must be -exact, -glob, -regexp, -command procname or --", in Jim_SwitchCoreCommand()
18059 if ((argc - opt) < 2) in Jim_SwitchCoreCommand()
18063 patCount = argc - opt; in Jim_SwitchCoreCommand()
18075 || i < (patCount - 2)) { in Jim_SwitchCoreCommand()
18086 command = Jim_NewStringObj(interp, "regexp", -1); in Jim_SwitchCoreCommand()
18091 if (argc - opt == 1) { in Jim_SwitchCoreCommand()
18096 return -rc; in Jim_SwitchCoreCommand()
18108 for (; i < patCount && Jim_CompareStringImmediate(interp, scriptObj, "-"); i += 2) in Jim_SwitchCoreCommand()
18110 if (scriptObj && Jim_CompareStringImmediate(interp, scriptObj, "-")) { in Jim_SwitchCoreCommand()
18111 Jim_SetResultFormatted(interp, "no body specified for pattern \"%#s\"", caseList[i - 2]); in Jim_SwitchCoreCommand()
18126 listObjPtr = Jim_NewListObj(interp, argv + 1, argc - 1); in Jim_ListCoreCommand()
18141 ret = Jim_ListIndices(interp, argv[1], argv + 2, argc - 2, &objPtr, JIM_NONE); in Jim_LindexCoreCommand()
18167 "-bool", "-not", "-nocase", "-exact", "-glob", "-regexp", "-all", "-inline", "-command", in Jim_LsearchCoreCommand()
18168 "-stride", "-index", NULL in Jim_LsearchCoreCommand()
18190 …"?-exact|-glob|-regexp|-command 'command'? ?-bool|-inline? ?-not? ?-nocase? ?-all? ?-stride len? ? in Jim_LsearchCoreCommand()
18194 for (i = 1; i < argc - 2; i++) { in Jim_LsearchCoreCommand()
18223 if (i >= argc - 2) { in Jim_LsearchCoreCommand()
18233 if (i >= argc - 2) { in Jim_LsearchCoreCommand()
18239 if (i >= argc - 2) { in Jim_LsearchCoreCommand()
18246 Jim_SetResultString(interp, "stride length must be at least 1", -1); in Jim_LsearchCoreCommand()
18253 argc -= i; in Jim_LsearchCoreCommand()
18261 Jim_SetResultString(interp, "list size must be a multiple of the stride length", -1); in Jim_LsearchCoreCommand()
18269 commandObj = Jim_NewStringObj(interp, "regexp", -1); in Jim_LsearchCoreCommand()
18287 … searchListObj = Jim_NewListObj(interp, argv[0]->internalRep.listValue.ele + i, stride); in Jim_LsearchCoreCommand()
18290 …rc = Jim_ListIndices(interp, searchListObj, indexObj->internalRep.listValue.ele, indexlen, &objPtr… in Jim_LsearchCoreCommand()
18342 ListInsertElements(listObjPtr, -1, stride, in Jim_LsearchCoreCommand()
18343 searchListObj->internalRep.listValue.ele + offset); in Jim_LsearchCoreCommand()
18348 … resultObj = Jim_NewListObj(interp, searchListObj->internalRep.listValue.ele + offset, stride); in Jim_LsearchCoreCommand()
18376 Jim_SetResultInt(interp, -1); in Jim_LsearchCoreCommand()
18442 Jim_ListInsertElements(interp, listPtr, idx, argc - 3, &argv[3]); in Jim_LinsertCoreCommand()
18481 newListObj = Jim_NewListObj(interp, listObj->internalRep.listValue.ele, first); in Jim_LreplaceCoreCommand()
18484 ListInsertElements(newListObj, -1, argc - 4, argv + 4); in Jim_LreplaceCoreCommand()
18487 …ListInsertElements(newListObj, -1, len - first - rangeLen, listObj->internalRep.listValue.ele + fi… in Jim_LreplaceCoreCommand()
18507 return Jim_ListSetIndex(interp, argv[1], argv + 2, argc - 3, argv[argc - 1]); in Jim_LsetCoreCommand()
18514 …"-ascii", "-nocase", "-increasing", "-decreasing", "-command", "-integer", "-real", "-index", "-un… in Jim_LsortCoreCommand()
18515 "-stride", "-dictionary", NULL in Jim_LsortCoreCommand()
18544 for (i = 1; i < (argc - 1); i++) { in Jim_LsortCoreCommand()
18570 info.order = -1; in Jim_LsortCoreCommand()
18576 if (i >= (argc - 2)) { in Jim_LsortCoreCommand()
18577 … Jim_SetResultString(interp, "\"-command\" option must be followed by comparison command", -1); in Jim_LsortCoreCommand()
18585 if (i >= argc - 2) { in Jim_LsortCoreCommand()
18592 Jim_SetResultString(interp, "stride length must be at least 2", -1); in Jim_LsortCoreCommand()
18597 if (i >= (argc - 2)) { in Jim_LsortCoreCommand()
18599 … Jim_SetResultString(interp, "\"-index\" option must be followed by list index", -1); in Jim_LsortCoreCommand()
18610 resObj = argv[argc - 1]; in Jim_LsortCoreCommand()
18623 Jim_SetResultString(interp, "list size must be a multiple of the stride length", -1); in Jim_LsortCoreCommand()
18716 rc = Jim_EvalObj(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); in Jim_EvalCoreCommand()
18731 savedCallFrame = interp->framePtr; in Jim_UplevelCoreCommand()
18737 argc--; in Jim_UplevelCoreCommand()
18747 Jim_WrongNumArgs(interp, 1, argv - 1, "?level? command ?arg ...?"); in Jim_UplevelCoreCommand()
18751 interp->framePtr = targetCallFrame; in Jim_UplevelCoreCommand()
18756 retcode = Jim_EvalObj(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); in Jim_UplevelCoreCommand()
18758 interp->framePtr = savedCallFrame; in Jim_UplevelCoreCommand()
18784 objPtr = Jim_ConcatObj(interp, argc - 1, argv + 1); in Jim_ExprCoreCommand()
18809 interp->break_level = level; in JimBreakContinueHelper()
18846 for (i = skip; i <= interp->procLevel; i++) { in Jim_StacktraceCoreCommand()
18847 Jim_EvalFrame *frame = JimGetEvalFrameByProcLevel(interp, -i); in Jim_StacktraceCoreCommand()
18848 if (frame->procLevel < last) { in Jim_StacktraceCoreCommand()
18866 for (i = 1; i < argc - 1; i += 2) { in Jim_ReturnCoreCommand()
18867 if (Jim_CompareStringImmediate(interp, argv[i], "-code")) { in Jim_ReturnCoreCommand()
18872 else if (Jim_CompareStringImmediate(interp, argv[i], "-errorinfo")) { in Jim_ReturnCoreCommand()
18875 else if (Jim_CompareStringImmediate(interp, argv[i], "-errorcode")) { in Jim_ReturnCoreCommand()
18878 else if (Jim_CompareStringImmediate(interp, argv[i], "-level")) { in Jim_ReturnCoreCommand()
18889 if (i != argc - 1 && i != argc) { in Jim_ReturnCoreCommand()
18891 "?-code code? ?-errorinfo stacktrace? ?-level level? ?result?"); in Jim_ReturnCoreCommand()
18902 interp->returnCode = returnCode; in Jim_ReturnCoreCommand()
18903 interp->returnLevel = level; in Jim_ReturnCoreCommand()
18905 if (i == argc - 1) { in Jim_ReturnCoreCommand()
18914 if (interp->framePtr->level == 0) { in Jim_TailcallCoreCommand()
18915 Jim_SetResultString(interp, "tailcall can only be called from a proc or lambda", -1); in Jim_TailcallCoreCommand()
18920 Jim_CallFrame *cf = interp->framePtr->parent; in Jim_TailcallCoreCommand()
18927 JimPanic((cf->tailcallCmd != NULL, "Already have a tailcallCmd")); in Jim_TailcallCoreCommand()
18931 cf->tailcallCmd = cmdPtr; in Jim_TailcallCoreCommand()
18934 JimPanic((cf->tailcallObj != NULL, "Already have a tailcallobj")); in Jim_TailcallCoreCommand()
18936 cf->tailcallObj = Jim_NewListObj(interp, argv + 1, argc - 1); in Jim_TailcallCoreCommand()
18937 Jim_IncrRefCount(cf->tailcallObj); in Jim_TailcallCoreCommand()
18952 Jim_ListInsertElements(interp, cmdList, Jim_ListLength(interp, cmdList), argc - 1, argv + 1); in JimAliasCmd()
18972 prefixListObj = Jim_NewListObj(interp, argv + 2, argc - 2); in Jim_AliasCoreCommand()
19020 if (interp->traceCmdObj) { in Jim_XtraceCoreCommand()
19021 Jim_DecrRefCount(interp, interp->traceCmdObj); in Jim_XtraceCoreCommand()
19022 interp->traceCmdObj = NULL; in Jim_XtraceCoreCommand()
19027 interp->traceCmdObj = argv[1]; in Jim_XtraceCoreCommand()
19028 Jim_IncrRefCount(interp->traceCmdObj); in Jim_XtraceCoreCommand()
19044 interp->local++; in Jim_LocalCoreCommand()
19045 retcode = Jim_EvalObjVector(interp, argc - 1, argv + 1); in Jim_LocalCoreCommand()
19046 interp->local--; in Jim_LocalCoreCommand()
19056 if (interp->framePtr->localCommands == NULL) { in Jim_LocalCoreCommand()
19057 interp->framePtr->localCommands = Jim_Alloc(sizeof(*interp->framePtr->localCommands)); in Jim_LocalCoreCommand()
19058 Jim_InitStack(interp->framePtr->localCommands); in Jim_LocalCoreCommand()
19061 Jim_StackPush(interp->framePtr->localCommands, cmdNameObj); in Jim_LocalCoreCommand()
19078 if (cmdPtr == NULL || !cmdPtr->isproc || !cmdPtr->prevCmd) { in Jim_UpcallCoreCommand()
19083 cmdPtr->u.proc.upcall++; in Jim_UpcallCoreCommand()
19087 retcode = Jim_EvalObjVector(interp, argc - 1, argv + 1); in Jim_UpcallCoreCommand()
19090 cmdPtr->u.proc.upcall--; in Jim_UpcallCoreCommand()
19123 Jim_SetResultString(interp, "namespaces not enabled", -1); in Jim_ApplyCoreCommand()
19134 nargv = Jim_Alloc((argc - 2 + 1) * sizeof(*nargv)); in Jim_ApplyCoreCommand()
19135 nargv[0] = Jim_NewStringObj(interp, "apply lambdaExpr", -1); in Jim_ApplyCoreCommand()
19137 memcpy(&nargv[1], argv + 2, (argc - 2) * sizeof(*nargv)); in Jim_ApplyCoreCommand()
19138 ret = JimCallProcedure(interp, cmd, argc - 2 + 1, nargv); in Jim_ApplyCoreCommand()
19153 Jim_SetResult(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); in Jim_ConcatCoreCommand()
19166 argc--; in Jim_UpvarCoreCommand()
19200 if (interp->framePtr->level == 0) in Jim_GlobalCoreCommand()
19206 if (Jim_SetVariableLink(interp, argv[i], argv[i], interp->topFramePtr) != JIM_OK) in Jim_GlobalCoreCommand()
19223 Jim_SetResultString(interp, "list must contain an even number of elements", -1); in JimStringMap()
19247 Jim_AppendString(interp, resultObjPtr, noMatchStart, str - noMatchStart); in JimStringMap()
19252 strLen -= kl; in JimStringMap()
19262 strLen--; in JimStringMap()
19266 Jim_AppendString(interp, resultObjPtr, noMatchStart, str - noMatchStart); in JimStringMap()
19278 "-nocase", NULL in Jim_StringCoreCommand()
19281 "-nocase", "-length", NULL in Jim_StringCoreCommand()
19312 JIM_DEF_SUBCMD("cat", "?...?", 0, -1), in Jim_StringCoreCommand()
19313 JIM_DEF_SUBCMD("compare", "?-nocase? ?-length int? string1 string2", 2, 5), in Jim_StringCoreCommand()
19314 JIM_DEF_SUBCMD("equal", "?-nocase? ?-length int? string1 string2", 2, 5), in Jim_StringCoreCommand()
19317 JIM_DEF_SUBCMD("is", "class ?-strict? str", 2, 3), in Jim_StringCoreCommand()
19320 JIM_DEF_SUBCMD("map", "?-nocase? mapList string", 2, 3), in Jim_StringCoreCommand()
19321 JIM_DEF_SUBCMD("match", "?-nocase? pattern string", 2, 3), in Jim_StringCoreCommand()
19338 if (ct->function) { in Jim_StringCoreCommand()
19340 return ct->function(interp, argc, argv); in Jim_StringCoreCommand()
19343 option = ct - cmds; in Jim_StringCoreCommand()
19377 long opt_length = -1; in Jim_StringCoreCommand()
19378 int n = argc - 4; in Jim_StringCoreCommand()
19391 n--; in Jim_StringCoreCommand()
19401 n -= 2; in Jim_StringCoreCommand()
19407 argv += argc - 2; in Jim_StringCoreCommand()
19436 Jim_WrongNumArgs(interp, 2, argv, "?-nocase? pattern string"); in Jim_StringCoreCommand()
19452 Jim_WrongNumArgs(interp, 2, argv, "?-nocase? mapList string"); in Jim_StringCoreCommand()
19504 while (count--) { in Jim_StringCoreCommand()
19525 memcpy(p - l, str, l); in Jim_StringCoreCommand()
19526 p -= l; in Jim_StringCoreCommand()
19615 if (argc == 5 && !Jim_CompareStringImmediate(interp, argv[3], "-strict")) { in Jim_StringCoreCommand()
19619 return JimStringIs(interp, argv[argc - 1], argv[2], argc == 5); in Jim_StringCoreCommand()
19642 while (i-- > 0) { in Jim_TimeCoreCommand()
19650 elapsed = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) - start; in Jim_TimeCoreCommand()
19657 Jim_AppendString(interp, Jim_GetResult(interp)," microseconds per iteration", -1); in Jim_TimeCoreCommand()
19690 delta = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) - start; in Jim_TimeRateCoreCommand()
19701 int retval = Jim_EvalObj(interp, interp->nullScriptObj); in Jim_TimeRateCoreCommand()
19702 overhead = Jim_GetTimeUsec(CLOCK_MONOTONIC_RAW) - start; in Jim_TimeRateCoreCommand()
19709 delta -= overhead; in Jim_TimeRateCoreCommand()
19714 Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "us_per_iter", -1)); in Jim_TimeRateCoreCommand()
19716 Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "iters_per_sec", -1)); in Jim_TimeRateCoreCommand()
19718 Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "count", -1)); in Jim_TimeRateCoreCommand()
19720 Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, "elapsed_us", -1)); in Jim_TimeRateCoreCommand()
19740 interp->exitCode = exitCode; in Jim_ExitCoreCommand()
19757 return -1; in JimMatchReturnCodes()
19764 "?-?no?code ... --? script ?resultVarName? ?optionVarName?", in JimCatchTryHelper()
19765 "?-?no?code ... --? script ?on|trap codes vars script? ... ?finally script?" in JimCatchTryHelper()
19784 Jim_SetGlobalVariableStr(interp, "errorCode", Jim_NewStringObj(interp, "NONE", -1)); in JimCatchTryHelper()
19786 for (i = 1; i < argc - 1; i++) { in JimCatchTryHelper()
19792 if (strcmp(arg, "--") == 0) { in JimCatchTryHelper()
19796 if (*arg != '-') { in JimCatchTryHelper()
19800 if (strncmp(arg, "-no", 3) == 0) { in JimCatchTryHelper()
19810 option = -1; in JimCatchTryHelper()
19829 if (argc - idx < 1) { in JimCatchTryHelper()
19839 interp->signal_level += sig; in JimCatchTryHelper()
19847 interp->errorFlag = 0; in JimCatchTryHelper()
19849 interp->signal_level -= sig; in JimCatchTryHelper()
19881 ret = -1; in JimCatchTryHelper()
19891 ret = -1; in JimCatchTryHelper()
19899 ret = -1; in JimCatchTryHelper()
19920 if (argc - idx >= 1) { in JimCatchTryHelper()
19923 if (argc - idx >= 1) { in JimCatchTryHelper()
19941 if (interp->signal_set_result) { in JimCatchTryHelper()
19942 interp->signal_set_result(interp, interp->sigmask); in JimCatchTryHelper()
19945 Jim_SetResultInt(interp, interp->sigmask); in JimCatchTryHelper()
19947 interp->sigmask = 0; in JimCatchTryHelper()
19959 Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-code", -1)); in JimCatchTryHelper()
19961 Jim_NewIntObj(interp, exitCode == JIM_RETURN ? interp->returnCode : exitCode)); in JimCatchTryHelper()
19962 Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-level", -1)); in JimCatchTryHelper()
19963 Jim_ListAppendElement(interp, optListObj, Jim_NewIntObj(interp, interp->returnLevel)); in JimCatchTryHelper()
19965 Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-errorinfo", in JimCatchTryHelper()
19966 -1)); in JimCatchTryHelper()
19967 Jim_ListAppendElement(interp, optListObj, interp->stackTrace); in JimCatchTryHelper()
19970 … Jim_ListAppendElement(interp, optListObj, Jim_NewStringObj(interp, "-errorcode", -1)); in JimCatchTryHelper()
20039 dict = objPtr->internalRep.dictValue; in Jim_DictMatchTypes()
20043 for (i = 0; i < dict->len; i += 2 ) { in Jim_DictMatchTypes()
20044 Jim_Obj *keyObj = dict->table[i]; in Jim_DictMatchTypes()
20045 Jim_Obj *valObj = dict->table[i + 1]; in Jim_DictMatchTypes()
20068 return -1; in Jim_DictSize()
20070 return objPtr->internalRep.dictValue->len / 2; in Jim_DictSize()
20109 dict = objPtr->internalRep.dictValue; in Jim_DictInfo()
20112 snprintf(buffer, sizeof(buffer), "%d entries in table, %d buckets", dict->len, dict->size); in Jim_DictInfo()
20113 output = Jim_NewStringObj(interp, buffer, -1); in Jim_DictInfo()
20120 Jim_Obj *prefixObj = Jim_NewStringObj(interp, basecmd, -1); in Jim_EvalEnsemble()
20123 Jim_AppendString(interp, prefixObj, subcmd, -1); in Jim_EvalEnsemble()
20211 JIM_DEF_SUBCMD("create", "?key value ...?", 0, -2), in Jim_DictCoreCommand()
20212 JIM_DEF_SUBCMD("get", "dictionary ?key ...?", 1, -1), in Jim_DictCoreCommand()
20213 JIM_DEF_SUBCMD_HIDDEN("getdef", "dictionary ?key ...? key default", 3, -1), in Jim_DictCoreCommand()
20214 JIM_DEF_SUBCMD("getwithdefault", "dictionary ?key ...? key default", 3, -1), in Jim_DictCoreCommand()
20215 JIM_DEF_SUBCMD("set", "varName key ?key ...? value", 3, -1), in Jim_DictCoreCommand()
20216 JIM_DEF_SUBCMD("unset", "varName key ?key ...?", 2, -1), in Jim_DictCoreCommand()
20217 JIM_DEF_SUBCMD("exists", "dictionary key ?key ...?", 2, -1), in Jim_DictCoreCommand()
20221 JIM_DEF_SUBCMD("merge", "?...?", 0, -1), in Jim_DictCoreCommand()
20222 JIM_DEF_SUBCMD("with", "dictVar ?key ...? script", 2, -1), in Jim_DictCoreCommand()
20223 JIM_DEF_SUBCMD("append", "varName key ?value ...?", 2, -1), in Jim_DictCoreCommand()
20224 JIM_DEF_SUBCMD("lappend", "varName key ?value ...?", 2, -1), in Jim_DictCoreCommand()
20226 JIM_DEF_SUBCMD("remove", "dictionary ?key ...?", 1, -1), in Jim_DictCoreCommand()
20229 JIM_DEF_SUBCMD("replace", "dictionary ?key value ...?", 1, -1), in Jim_DictCoreCommand()
20230 JIM_DEF_SUBCMD("update", "varName ?arg ...? script", 2, -1), in Jim_DictCoreCommand()
20237 if (ct->function) { in Jim_DictCoreCommand()
20239 return ct->function(interp, argc, argv); in Jim_DictCoreCommand()
20243 switch (ct - cmds) { in Jim_DictCoreCommand()
20245 if (Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 3, &objPtr, in Jim_DictCoreCommand()
20254 int rc = Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 4, &objPtr, JIM_ERRMSG); in Jim_DictCoreCommand()
20255 if (rc == -1) { in Jim_DictCoreCommand()
20260 Jim_SetResult(interp, argv[argc - 1]); in Jim_DictCoreCommand()
20269 …return Jim_SetDictKeysVector(interp, argv[2], argv + 3, argc - 4, argv[argc - 1], JIM_ERRMSG | JIM… in Jim_DictCoreCommand()
20272 int rc = Jim_DictKeysVector(interp, argv[2], argv + 3, argc - 3, &objPtr, JIM_NONE); in Jim_DictCoreCommand()
20281 … if (Jim_SetDictKeysVector(interp, argv[2], argv + 3, argc - 3, NULL, JIM_UNSHARED) != JIM_OK) { in Jim_DictCoreCommand()
20303 objPtr = Jim_DictMerge(interp, argc - 2, argv + 2); in Jim_DictCoreCommand()
20311 objPtr = Jim_NewDictObj(interp, argv + 2, argc - 2); in Jim_DictCoreCommand()
20319 return JimDictWith(interp, argv[2], argv + 3, argc - 4, argv[argc - 1]); in Jim_DictCoreCommand()
20328 return Jim_EvalEnsemble(interp, "dict", Jim_String(argv[1]), argc - 2, argv + 2); in Jim_DictCoreCommand()
20336 "-nobackslashes", "-nocommands", "-novariables", NULL in Jim_SubstCoreCommand()
20348 for (i = 1; i < (argc - 1); i++) { in Jim_SubstCoreCommand()
20367 if (Jim_SubstObj(interp, argv[argc - 1], &objPtr, flags) != JIM_OK) { in Jim_SubstCoreCommand()
20446 if (argc > 2 && Jim_CompareStringImmediate(interp, argv[1], "-nons")) { in Jim_InfoCoreCommand()
20448 argc--; in Jim_InfoCoreCommand()
20457 if (ct->function) { in Jim_InfoCoreCommand()
20459 return ct->function(interp, argc, argv); in Jim_InfoCoreCommand()
20462 int option = ct - cmds; in Jim_InfoCoreCommand()
20475 if (cmdPtr->isproc || cmdPtr->u.native.cmdProc != JimAliasCmd) { in Jim_InfoCoreCommand()
20479 Jim_SetResult(interp, (Jim_Obj *)cmdPtr->u.native.privData); in Jim_InfoCoreCommand()
20486 Jim_SetResultString(interp, "aio not enabled", -1); in Jim_InfoCoreCommand()
20497 … if (Jim_Length(interp->framePtr->nsObj) || (argc == 3 && JimIsGlobalNamespace(argv[2]))) { in Jim_InfoCoreCommand()
20498 return Jim_EvalPrefix(interp, "namespace info", argc - 1, argv + 1); in Jim_InfoCoreCommand()
20515 … if (Jim_Length(interp->framePtr->nsObj) || (argc == 3 && JimIsGlobalNamespace(argv[2]))) { in Jim_InfoCoreCommand()
20516 return Jim_EvalPrefix(interp, "namespace info", argc - 1, argv + 1); in Jim_InfoCoreCommand()
20526 Jim_DecrRefCount(interp, interp->currentFilenameObj); in Jim_InfoCoreCommand()
20527 interp->currentFilenameObj = argv[2]; in Jim_InfoCoreCommand()
20529 Jim_SetResult(interp, interp->currentFilenameObj); in Jim_InfoCoreCommand()
20560 Jim_SetResult(interp, interp->stackTrace); in Jim_InfoCoreCommand()
20565 Jim_SetResultInt(interp, interp->framePtr->level); in Jim_InfoCoreCommand()
20577 Jim_SetResultInt(interp, interp->procLevel + 1); in Jim_InfoCoreCommand()
20595 if (!cmdPtr->isproc) { in Jim_InfoCoreCommand()
20602 Jim_SetResultString(interp, "unsupported", -1); in Jim_InfoCoreCommand()
20606 Jim_SetResult(interp, cmdPtr->u.proc.bodyObjPtr); in Jim_InfoCoreCommand()
20609 Jim_SetResult(interp, cmdPtr->u.proc.argListObjPtr); in Jim_InfoCoreCommand()
20613 if (cmdPtr->u.proc.staticVars) { in Jim_InfoCoreCommand()
20614 … Jim_SetResult(interp, JimHashtablePatternMatch(interp, cmdPtr->u.proc.staticVars, in Jim_InfoCoreCommand()
20627 Jim_SetResultString(interp, buf, -1); in Jim_InfoCoreCommand()
20657 jimReturnCodes[i], -1)); in Jim_InfoCoreCommand()
20674 Jim_SetResultString(interp, name, -1); in Jim_InfoCoreCommand()
20682 Jim_SetResultString(interp, "not supported", -1); in Jim_InfoCoreCommand()
20697 "-command", "-proc", "-alias", "-var", NULL in Jim_ExistsCoreCommand()
20734 result = cmd->isproc == 0 && cmd->u.native.cmdProc == JimAliasCmd; in Jim_ExistsCoreCommand()
20738 result = cmd->isproc; in Jim_ExistsCoreCommand()
20783 while (strLen--) { in Jim_SplitCoreCommand()
20787 while (scLen--) { in Jim_SplitCoreCommand()
20791 objPtr = Jim_NewStringObj(interp, noMatchStart, (str - noMatchStart)); in Jim_SplitCoreCommand()
20799 objPtr = Jim_NewStringObj(interp, noMatchStart, (str - noMatchStart)); in Jim_SplitCoreCommand()
20804 #define NUM_COMMON (128 - 9) in Jim_SplitCoreCommand()
20805 while (strLen--) { in Jim_SplitCoreCommand()
20810 c -= 9; in Jim_SplitCoreCommand()
20864 objPtr = Jim_FormatString(interp, argv[1], argc - 2, argv + 2); in Jim_FormatCoreCommand()
20881 if (argv[2]->typePtr != &scanFmtStringObjType) in Jim_ScanCoreCommand()
20884 Jim_SetResultString(interp, FormatGetError(argv[2]), -1); in Jim_ScanCoreCommand()
20891 if (maxPos > argc - 3) { in Jim_ScanCoreCommand()
20892 Jim_SetResultString(interp, "\"%n$\" argument index out of range", -1); in Jim_ScanCoreCommand()
20895 else if (count > argc - 3) { in Jim_ScanCoreCommand()
20897 "field specifiers", -1); in Jim_ScanCoreCommand()
20900 else if (count < argc - 3) { in Jim_ScanCoreCommand()
20902 "conversion specifiers", -1); in Jim_ScanCoreCommand()
20930 count = -1; in Jim_ScanCoreCommand()
20992 argc -= 2; in Jim_LrepeatCoreCommand()
20997 while (count--) { in Jim_LrepeatCoreCommand()
20998 ListInsertElements(objPtr, -1, argc, argv); in Jim_LrepeatCoreCommand()
21051 equals - e[i])); in Jim_EnvCoreCommand()
21052 Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, equals + 1, -1)); in Jim_EnvCoreCommand()
21073 Jim_SetResult(interp, Jim_NewStringObj(interp, val, -1)); in Jim_EnvCoreCommand()
21105 len--; in Jim_LreverseCoreCommand()
21107 ListAppendElement(revObjPtr, ele[len--]); in Jim_LreverseCoreCommand()
21117 return -1; in JimRangeLen()
21121 return -1; in JimRangeLen()
21123 return -1; in JimRangeLen()
21124 len = end - start; in JimRangeLen()
21126 len = -len; in JimRangeLen()
21128 step = -step; in JimRangeLen()
21129 len = 1 + ((len - 1) / step); in JimRangeLen()
21132 return (int)((len < 0) ? -1 : len); in JimRangeLen()
21157 if ((len = JimRangeLen(start, end, step)) == -1) { in Jim_RangeCoreCommand()
21158 Jim_SetResultString(interp, "Invalid (infinite?) range specified", -1); in Jim_RangeCoreCommand()
21188 len = max-min; in Jim_RandCoreCommand()
21190 Jim_SetResultString(interp, "Invalid arguments (max < min)", -1); in Jim_RandCoreCommand()
21193 maxMul = JIM_WIDE_MAX - (len ? (JIM_WIDE_MAX%len) : 0); in Jim_RandCoreCommand()
21215 {"-", Jim_SubCoreCommand},
21300 argv[0] = Jim_NewStringObj(interp, "errorInfo", -1); in Jim_MakeErrorMessage()
21301 argv[1] = interp->result; in Jim_MakeErrorMessage()
21338 Jim_AppendString(interp, Jim_GetResult(interp), "or ", -1); in JimSetFailedEnumResult()
21342 Jim_AppendString(interp, Jim_GetResult(interp), ", ", -1); in JimSetFailedEnumResult()
21351 if (Jim_CompareStringImmediate(interp, objPtr, "-commands")) { in Jim_CheckShowCommands()
21356 …_ListAppendElement(interp, Jim_GetResult(interp), Jim_NewStringObj(interp, tablePtrSorted[i], -1)); in Jim_CheckShowCommands()
21365 "get-enum",
21378 int match = -1; in Jim_GetEnum()
21382 if (objPtr->typePtr == &getEnumObjType) { in Jim_GetEnum()
21383 …if (objPtr->internalRep.ptrIntValue.ptr == tablePtr && objPtr->internalRep.ptrIntValue.int1 == fla… in Jim_GetEnum()
21384 *indexPtr = objPtr->internalRep.ptrIntValue.int2; in Jim_GetEnum()
21391 *indexPtr = -1; in Jim_GetEnum()
21401 if (*arg == '-' && arglen == 1) { in Jim_GetEnum()
21418 objPtr->typePtr = &getEnumObjType; in Jim_GetEnum()
21419 objPtr->internalRep.ptrIntValue.ptr = (void *)tablePtr; in Jim_GetEnum()
21420 objPtr->internalRep.ptrIntValue.int1 = flags; in Jim_GetEnum()
21421 objPtr->internalRep.ptrIntValue.int2 = match; in Jim_GetEnum()
21443 return -1; in Jim_FindByName()
21448 return objPtr->typePtr == &dictObjType; in Jim_IsDict()
21453 return objPtr->typePtr == &listObjType; in Jim_IsList()
21512 Jim_SetResultString(interp, "ABI version mismatch", -1); in Jim_CheckAbiVersion()
21528 return -1; in Jim_AioFilehandle()
21553 for (; ct->cmd; ct++) { in subcmd_cmd_list()
21554 if (!(ct->flags & JIM_MODFLAG_HIDDEN)) { in subcmd_cmd_list()
21555 Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, ct->cmd, -1)); in subcmd_cmd_list()
21560 sortCmd[0] = Jim_NewStringObj(interp, "lsort", -1); in subcmd_cmd_list()
21589 Jim_AppendStrings(interp, Jim_GetResult(interp), ct->cmd, NULL); in add_cmd_usage()
21590 if (ct->args && *ct->args) { in add_cmd_usage()
21591 Jim_AppendStrings(interp, Jim_GetResult(interp), " ", ct->args, NULL); in add_cmd_usage()
21597 Jim_SetResultString(interp, "wrong # args: should be \"", -1); in Jim_SubCmdArgError()
21603 "subcmd-lookup",
21623 "Use \"%#s -help ?command?\" for help", argv[0], argv[0]); in Jim_ParseSubCmd()
21630 if (cmd->typePtr == &subcmdLookupObjType) { in Jim_ParseSubCmd()
21631 if (cmd->internalRep.ptrIntValue.ptr == command_table) { in Jim_ParseSubCmd()
21632 ct = command_table + cmd->internalRep.ptrIntValue.int1; in Jim_ParseSubCmd()
21638 if (Jim_CompareStringImmediate(interp, cmd, "-help")) { in Jim_ParseSubCmd()
21651 if (Jim_CompareStringImmediate(interp, cmd, "-commands")) { in Jim_ParseSubCmd()
21658 for (ct = command_table; ct->cmd; ct++) { in Jim_ParseSubCmd()
21659 if (Jim_CompareStringImmediate(interp, cmd, ct->cmd)) { in Jim_ParseSubCmd()
21663 if (strncmp(cmdstr, ct->cmd, cmdlen) == 0) { in Jim_ParseSubCmd()
21680 if (partial && !ct->cmd) { in Jim_ParseSubCmd()
21684 if (!ct->cmd) { in Jim_ParseSubCmd()
21696 Jim_SetResultString(interp, "Usage: ", -1); in Jim_ParseSubCmd()
21704 cmd->typePtr = &subcmdLookupObjType; in Jim_ParseSubCmd()
21705 cmd->internalRep.ptrIntValue.ptr = (void *)command_table; in Jim_ParseSubCmd()
21706 cmd->internalRep.ptrIntValue.int1 = ct - command_table; in Jim_ParseSubCmd()
21711 if (argc - 2 < ct->minargs) { in Jim_ParseSubCmd()
21714 else if (ct->maxargs >= 0 && argc - 2 > ct->maxargs) { in Jim_ParseSubCmd()
21717 else if (ct->maxargs < -1 && (argc - 2) % -ct->maxargs != 0) { in Jim_ParseSubCmd()
21722 Jim_SetResultString(interp, "wrong # args: should be \"", -1); in Jim_ParseSubCmd()
21739 if (ct->flags & JIM_MODFLAG_FULLARGV) { in Jim_CallSubCmd()
21740 ret = ct->function(interp, argc, argv); in Jim_CallSubCmd()
21743 ret = ct->function(interp, argc - 2, argv + 2); in Jim_CallSubCmd()
21866 objIndex = position - 1; in Jim_FormatString()
21896 case '-': in Jim_FormatString()
21914 } while (sawFlag && (p - spec <= 5)); in Jim_FormatString()
21923 if (objIndex >= objc - 1) { in Jim_FormatString()
21931 width = -width; in Jim_FormatString()
21933 *p++ = '-'; in Jim_FormatString()
21954 if (objIndex >= objc - 1) { in Jim_FormatString()
22043 i--; in Jim_FormatString()
22114 Jim_SetResultString(interp, "format too long", -1); in Jim_FormatString()
22177 Jim_SetResultString(interp, msg, -1); in Jim_FormatString()
22229 #define OP(preg, p) (preg->program[p])
22230 #define NEXT(preg, p) (preg->program[p + 1])
22236 #define FAIL(R,M) { (R)->err = (M); return (M); }
22296 preg->cflags = cflags; in jim_regcomp()
22297 preg->regparse = exp; in jim_regcomp()
22300 preg->proglen = (strlen(exp) + 1) * 5; in jim_regcomp()
22301 preg->program = malloc(preg->proglen * sizeof(int)); in jim_regcomp()
22302 if (preg->program == NULL) in jim_regcomp()
22307 return preg->err; in jim_regcomp()
22311 if (preg->re_nsub >= REG_MAX_PAREN) in jim_regcomp()
22315 preg->regstart = 0; in jim_regcomp()
22316 preg->reganch = 0; in jim_regcomp()
22317 preg->regmust = 0; in jim_regcomp()
22318 preg->regmlen = 0; in jim_regcomp()
22325 preg->regstart = preg->program[OPERAND(scan)]; in jim_regcomp()
22328 preg->reganch++; in jim_regcomp()
22335 int plen = str_int_len(preg->program + OPERAND(scan)); in jim_regcomp()
22342 preg->regmust = longest; in jim_regcomp()
22343 preg->regmlen = len; in jim_regcomp()
22366 if (preg->regparse[0] == '?' && preg->regparse[1] == ':') { in reg()
22368 preg->regparse += 2; in reg()
22369 parno = -1; in reg()
22372 parno = ++preg->re_nsub; in reg()
22389 while (*preg->regparse == '|') { in reg()
22390 preg->regparse++; in reg()
22409 if (paren && *preg->regparse++ != ')') { in reg()
22410 preg->err = REG_ERR_UNMATCHED_PAREN; in reg()
22412 } else if (!paren && *preg->regparse != '\0') { in reg()
22413 if (*preg->regparse == ')') { in reg()
22414 preg->err = REG_ERR_UNMATCHED_PAREN; in reg()
22417 preg->err = REG_ERR_JUNK_ON_END; in reg()
22436 while (*preg->regparse != '\0' && *preg->regparse != ')' && in regbranch()
22437 *preg->regparse != '|') { in regbranch()
22469 op = *preg->regparse; in regpiece()
22476 preg->err = REG_ERR_OPERAND_COULD_BE_EMPTY; in regpiece()
22484 min = strtoul(preg->regparse + 1, &end, 10); in regpiece()
22485 if (end == preg->regparse + 1) { in regpiece()
22486 preg->err = REG_ERR_BAD_COUNT; in regpiece()
22493 preg->err = REG_ERR_UNMATCHED_BRACES; in regpiece()
22497 preg->regparse = end; in regpiece()
22498 max = strtoul(preg->regparse + 1, &end, 10); in regpiece()
22500 preg->err = REG_ERR_UNMATCHED_BRACES; in regpiece()
22504 if (end == preg->regparse + 1) { in regpiece()
22508 preg->err = REG_ERR_BAD_COUNT; in regpiece()
22512 preg->err = REG_ERR_BAD_COUNT; in regpiece()
22516 preg->regparse = strchr(preg->regparse, '}'); in regpiece()
22523 if (preg->regparse[1] == '?') { in regpiece()
22524 preg->regparse++; in regpiece()
22530 preg->program[ret + 2] = max; in regpiece()
22531 preg->program[ret + 3] = min; in regpiece()
22532 preg->program[ret + 4] = 0; in regpiece()
22542 preg->regparse++; in regpiece()
22543 if (ISMULT(*preg->regparse)) { in regpiece()
22544 preg->err = REG_ERR_NESTED_COUNT; in regpiece()
22557 regc(preg, upper - lower + 1); in reg_addrange()
22581 return c - '0'; in hexdigitval()
22583 return c - 'a' + 10; in hexdigitval()
22585 return c - 'A' + 10; in hexdigitval()
22586 return -1; in hexdigitval()
22596 if (c == -1) { in parse_hex()
22649 s--; in reg_decode_escape()
22653 return s - s0; in reg_decode_escape()
22660 int nocase = (preg->cflags & REG_ICASE); in regatom()
22663 int n = reg_utf8_tounicode_case(preg->regparse, &ch, nocase); in regatom()
22667 preg->regparse += n; in regatom()
22681 const char *pattern = preg->regparse; in regatom()
22690 if (*pattern == ']' || *pattern == '-') { in regatom()
22708 preg->err = REG_ERR_UNMATCHED_BRACKET; in regatom()
22732 preg->err = REG_ERR_NULL_CHAR; in regatom()
22736 preg->err = REG_ERR_INVALID_ESCAPE; in regatom()
22740 if (pattern[0] == '-' && pattern[1] && pattern[1] != ']') { in regatom()
22747 preg->err = REG_ERR_NULL_CHAR; in regatom()
22751 preg->err = REG_ERR_INVALID_ESCAPE; in regatom()
22769 preg->err = REG_ERR_UNMATCHED_BRACKET; in regatom()
22784 if ((preg->cflags & REG_ICASE) == 0) { in regatom()
22836 preg->regparse = pattern; in regatom()
22850 preg->err = REG_ERR_INTERNAL; in regatom()
22856 preg->err = REG_ERR_COUNT_FOLLOWS_NOTHING; in regatom()
22859 ch = *preg->regparse++; in regatom()
22862 preg->err = REG_ERR_INVALID_ESCAPE; in regatom()
22888 if ((preg->cflags & REG_ICASE) == 0) { in regatom()
22908 preg->regparse--; in regatom()
22917 preg->regparse -= n; in regatom()
22923 while (*preg->regparse && strchr(META, *preg->regparse) == NULL) { in regatom()
22924 n = reg_utf8_tounicode_case(preg->regparse, &ch, (preg->cflags & REG_ICASE)); in regatom()
22925 if (ch == '\\' && preg->regparse[n]) { in regatom()
22926 if (strchr("<>mMwWdDsSAZ", preg->regparse[n])) { in regatom()
22930 n += reg_decode_escape(preg->regparse + n, &ch); in regatom()
22932 preg->err = REG_ERR_NULL_CHAR; in regatom()
22938 if (ISMULT(preg->regparse[n])) { in regatom()
22947 preg->regparse += n; in regatom()
22954 preg->regparse += n; in regatom()
22971 if (preg->p + n >= preg->proglen) { in reg_grow()
22972 preg->proglen = (preg->p + n) * 2; in reg_grow()
22973 preg->program = realloc(preg->program, preg->proglen * sizeof(int)); in reg_grow()
22983 preg->program[preg->p++] = op; in regnode()
22984 preg->program[preg->p++] = 0; in regnode()
22987 return preg->p - 2; in regnode()
22993 preg->program[preg->p++] = b; in regc()
23001 memmove(preg->program + opnd + size, preg->program + opnd, sizeof(int) * (preg->p - opnd)); in reginsert()
23003 memset(preg->program + opnd, 0, sizeof(int) * size); in reginsert()
23005 preg->program[opnd] = op; in reginsert()
23007 preg->p += size; in reginsert()
23015 int temp; in regtail() local
23021 temp = regnext(preg, scan); in regtail()
23022 if (temp == 0) in regtail()
23024 scan = temp; in regtail()
23028 offset = scan - val; in regtail()
23030 offset = val - scan; in regtail()
23032 preg->program[scan + 1] = offset; in regtail()
23055 if (preg == NULL || preg->program == NULL || string == NULL) { in jim_regexec()
23060 if (*preg->program != REG_MAGIC) { in jim_regexec()
23069 preg->eflags = eflags; in jim_regexec()
23070 preg->pmatch = pmatch; in jim_regexec()
23071 preg->nmatch = nmatch; in jim_regexec()
23072 preg->start = string; in jim_regexec()
23080 preg->program[scan + 4] = 0; in jim_regexec()
23084 if (preg->regmust != 0) { in jim_regexec()
23086 while ((s = str_find(s, preg->program[preg->regmust], preg->cflags & REG_ICASE)) != NULL) { in jim_regexec()
23087 if (prefix_cmp(preg->program + preg->regmust, preg->regmlen, s, preg->cflags & REG_ICASE) >= 0) { in jim_regexec()
23097 preg->regbol = string; in jim_regexec()
23100 if (preg->reganch) { in jim_regexec()
23111 if (preg->cflags & REG_NEWLINE) { in jim_regexec()
23115 preg->regbol = ++string; in jim_regexec()
23126 if (preg->regstart != '\0') { in jim_regexec()
23128 while ((s = str_find(s, preg->regstart, preg->cflags & REG_ICASE)) != NULL) { in jim_regexec()
23157 preg->reginput = string; in regtry()
23159 for (i = 0; i < preg->nmatch; i++) { in regtry()
23160 preg->pmatch[i].rm_so = -1; in regtry()
23161 preg->pmatch[i].rm_eo = -1; in regtry()
23164 preg->pmatch[0].rm_so = string - preg->start; in regtry()
23165 preg->pmatch[0].rm_eo = preg->reginput - preg->start; in regtry()
23178 return -1; in prefix_cmp()
23182 proglen--; in prefix_cmp()
23185 return s - string; in prefix_cmp()
23187 return -1; in prefix_cmp()
23194 if (c >= range[1] && c <= (range[0] + range[1] - 1)) { in reg_range_find()
23221 if (preg->cflags & REG_NEWLINE) { in reg_iseol()
23236 int max = preg->program[scan + 2]; in regmatchsimplerepeat()
23237 int min = preg->program[scan + 3]; in regmatchsimplerepeat()
23241 nextch = preg->program[OPERAND(next)]; in regmatchsimplerepeat()
23243 save = preg->reginput; in regmatchsimplerepeat()
23265 preg->reginput = save + utf8_index(save, no); in regmatchsimplerepeat()
23266 reg_utf8_tounicode_case(preg->reginput, &c, (preg->cflags & REG_ICASE)); in regmatchsimplerepeat()
23279 no--; in regmatchsimplerepeat()
23287 int *scanpt = preg->program + scan; in regmatchrepeat()
23299 scanpt[4]--; in regmatchrepeat()
23316 scanpt[4]--; in regmatchrepeat()
23325 scanpt[4]--; in regmatchrepeat()
23353 n = reg_utf8_tounicode_case(preg->reginput, &c, (preg->cflags & REG_ICASE)); in regmatch()
23357 if ((preg->eflags & REG_NOTBOL)) { in regmatch()
23362 if (preg->reginput != preg->regbol) { in regmatch()
23382 if (preg->reginput > preg->regbol && in regmatch()
23383 (isalnum(UCHAR(preg->reginput[-1])) || preg->reginput[-1] == '_')) in regmatch()
23388 if (preg->reginput > preg->regbol) { in regmatch()
23391 c = preg->reginput[-1]; in regmatch()
23404 preg->reginput += n; in regmatch()
23412 len = str_int_len(preg->program + opnd); in regmatch()
23414 slen = prefix_cmp(preg->program + opnd, len, preg->reginput, preg->cflags & REG_ICASE); in regmatch()
23418 preg->reginput += slen; in regmatch()
23422 if (reg_iseol(preg, c) || reg_range_find(preg->program + OPERAND(scan), c) == 0) { in regmatch()
23425 preg->reginput += n; in regmatch()
23428 if (reg_iseol(preg, c) || reg_range_find(preg->program + OPERAND(scan), c) != 0) { in regmatch()
23431 preg->reginput += n; in regmatch()
23442 save = preg->reginput; in regmatch()
23446 preg->reginput = save; in regmatch()
23470 save = preg->reginput; in regmatch()
23473 int no = OP(preg, scan) - OPEN; in regmatch()
23474 if (no < preg->nmatch && preg->pmatch[no].rm_so == -1) { in regmatch()
23475 preg->pmatch[no].rm_so = save - preg->start; in regmatch()
23479 int no = OP(preg, scan) - CLOSE; in regmatch()
23480 if (no < preg->nmatch && preg->pmatch[no].rm_eo == -1) { in regmatch()
23481 preg->pmatch[no].rm_eo = save - preg->start; in regmatch()
23487 preg->reginput = save; in regmatch()
23507 scan = preg->reginput; in regrepeat()
23518 n = reg_utf8_tounicode_case(scan, &ch, preg->cflags & REG_ICASE); in regrepeat()
23519 if (preg->program[opnd] != ch) { in regrepeat()
23528 n = reg_utf8_tounicode_case(scan, &ch, preg->cflags & REG_ICASE); in regrepeat()
23529 if (reg_iseol(preg, ch) || reg_range_find(preg->program + opnd, ch) == 0) { in regrepeat()
23538 n = reg_utf8_tounicode_case(scan, &ch, preg->cflags & REG_ICASE); in regrepeat()
23539 if (reg_iseol(preg, ch) || reg_range_find(preg->program + opnd, ch) != 0) { in regrepeat()
23547 preg->err = REG_ERR_INTERNAL; in regrepeat()
23551 preg->reginput = scan; in regrepeat()
23566 return(p-offset); in regnext()
23585 while (preg->program[s++]) { in regopsize()
23587 return s - p; in regopsize()
23632 free(preg->program); in jim_regfree()
23730 return -1; in JimProcessPid()
23756 return -1; in waitpid()
23772 return -1; in Jim_MakeTempFile()
23783 Jim_SetResultString(interp, name, -1); in Jim_MakeTempFile()
23789 return -1; in Jim_MakeTempFile()
23828 filenameObj = Jim_NewStringObj(interp, tmpdir, -1); in Jim_MakeTempFile()
23829 if (tmpdir[0] && tmpdir[strlen(tmpdir) - 1] != '/') { in Jim_MakeTempFile()
23832 Jim_AppendString(interp, filenameObj, "tcl.tmp.XXXXXX", -1); in Jim_MakeTempFile()
23835 filenameObj = Jim_NewStringObj(interp, filename_template, -1); in Jim_MakeTempFile()
23843 fd = mkstemp(filenameObj->bytes); in Jim_MakeTempFile()
23845 if (mktemp(filenameObj->bytes) == NULL) { in Jim_MakeTempFile()
23846 fd = -1; in Jim_MakeTempFile()
23849 fd = open(filenameObj->bytes, O_RDWR | O_CREAT | O_TRUNC); in Jim_MakeTempFile()
23858 return -1; in Jim_MakeTempFile()
23910 LANG_NEUTRAL, msg, sizeof(msg) - 1, NULL); in dlerror()
23925 tv->tv_sec = tb.time; in gettimeofday()
23926 tv->tv_usec = tb.millitm * 1000; in gettimeofday()
23939 strchr("/\\", name[base_length - 1]) ? "*" : "/*"; in opendir()
23942 (dir->name = (char *)Jim_Alloc(base_length + strlen(all) + 1)) != 0) { in opendir()
23943 strcat(strcpy(dir->name, name), all); in opendir()
23945 if ((dir->handle = (long)_findfirst(dir->name, &dir->info)) != -1) in opendir()
23946 dir->result.d_name = 0; in opendir()
23948 Jim_Free(dir->name); in opendir()
23967 int result = -1; in closedir()
23970 if (dir->handle != -1) in closedir()
23971 result = _findclose(dir->handle); in closedir()
23972 Jim_Free(dir->name); in closedir()
23975 if (result == -1) in closedir()
23984 if (dir && dir->handle != -1) { in readdir()
23985 if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) { in readdir()
23986 result = &dir->result; in readdir()
23987 result->d_name = dir->info.name; in readdir()
24051 static const char completion_callback_assoc_key[] = "interactive-completion";
24063 if (compinfo->completion_command) { in Jim_HistoryGetline()
24066 if (compinfo->hints_command) { in Jim_HistoryGetline()
24093 if (len && line[len - 1] == '\n') { in Jim_HistoryGetline()
24094 line[len - 1] = '\0'; in Jim_HistoryGetline()
24164 objv[0] = info->completion_command; in JimCompletionCallback()
24165 objv[1] = Jim_NewStringObj(info->interp, prefix, -1); in JimCompletionCallback()
24167 ret = Jim_EvalObjVector(info->interp, 2, objv); in JimCompletionCallback()
24172 Jim_Obj *listObj = Jim_GetResult(info->interp); in JimCompletionCallback()
24173 int len = Jim_ListLength(info->interp, listObj); in JimCompletionCallback()
24175 linenoiseAddCompletion(comp, Jim_String(Jim_ListGetIndex(info->interp, listObj, i))); in JimCompletionCallback()
24187 objv[0] = info->hints_command; in JimHintsCallback()
24188 objv[1] = Jim_NewStringObj(info->interp, prefix, -1); in JimHintsCallback()
24190 ret = Jim_EvalObjVector(info->interp, 2, objv); in JimHintsCallback()
24194 Jim_Obj *listObj = Jim_GetResult(info->interp); in JimHintsCallback()
24197 int len = Jim_ListLength(info->interp, listObj); in JimHintsCallback()
24200 result = Jim_StrDup(Jim_String(Jim_ListGetIndex(info->interp, listObj, 0))); in JimHintsCallback()
24201 …if (len >= 2 && Jim_GetLong(info->interp, Jim_ListGetIndex(info->interp, listObj, 1), &x) == JIM_O… in JimHintsCallback()
24204 …if (len >= 3 && Jim_GetLong(info->interp, Jim_ListGetIndex(info->interp, listObj, 2), &x) == JIM_O… in JimHintsCallback()
24208 Jim_DecrRefCount(info->interp, listObj); in JimHintsCallback()
24222 if (compinfo->completion_command) { in JimHistoryFreeCompletion()
24223 Jim_DecrRefCount(interp, compinfo->completion_command); in JimHistoryFreeCompletion()
24225 if (compinfo->hints_command) { in JimHistoryFreeCompletion()
24226 Jim_DecrRefCount(interp, compinfo->hints_command); in JimHistoryFreeCompletion()
24237 compinfo->interp = interp; in JimGetCompletionInfo()
24238 compinfo->completion_command = NULL; in JimGetCompletionInfo()
24239 compinfo->hints_command = NULL; in JimGetCompletionInfo()
24255 if (compinfo->completion_command) { in Jim_HistorySetCompletion()
24256 Jim_DecrRefCount(interp, compinfo->completion_command); in Jim_HistorySetCompletion()
24258 compinfo->completion_command = completionCommandObj; in Jim_HistorySetCompletion()
24271 if (compinfo->hints_command) { in Jim_HistorySetHints()
24272 Jim_DecrRefCount(interp, compinfo->hints_command); in Jim_HistorySetHints()
24274 compinfo->hints_command = hintsCommandObj; in Jim_HistorySetHints()
24293 Jim_HistorySetCompletion(interp, Jim_NewStringObj(interp, "tcl::autocomplete", -1)); in Jim_InteractivePrompt()
24294 Jim_HistorySetHints(interp, Jim_NewStringObj(interp, "tcl::stdhint", -1)); in Jim_InteractivePrompt()
24311 snprintf(prompt, sizeof(prompt) - 3, "[%d] . ", retcode); in Jim_InteractivePrompt()
24314 snprintf(prompt, sizeof(prompt) - 3, "[%s] . ", retcodestr); in Jim_InteractivePrompt()
24340 Jim_AppendString(interp, scriptObjPtr, line, -1); in Jim_InteractivePrompt()
24398 Jim_Obj *obj = Jim_NewStringObj(interp, argv[n], -1); in JimSetArgv()
24422 printf(" --version : prints the version string\n"); in usage()
24423 printf(" --help : prints this text\n"); in usage()
24424 printf(" -e CMD : executes command CMD\n"); in usage()
24426 …printf(" [filename|-] : executes the script contained in the named file, or from stdin if \"-\"… in usage()
24437 if (argc > 1 && strcmp(argv[1], "--version") == 0) { in main()
24441 else if (argc > 1 && strcmp(argv[1], "--help") == 0) { in main()
24480 if (argc > 2 && strcmp(argv[1], "-e") == 0) { in main()
24482 JimSetArgv(interp, argc - 3, argv + 3); in main()
24494 Jim_SetVariableStr(interp, "argv0", Jim_NewStringObj(interp, argv[1], -1)); in main()
24495 JimSetArgv(interp, argc - 2, argv + 2); in main()
24496 if (strcmp(argv[1], "-") == 0) { in main()