Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Latest upstream autosetup, primarily for an OpenBSD-specific fix. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
4eef2de39f9f496909353dbe8a4a19c1 |
User & Date: | stephan 2024-09-03 15:31:41.748 |
Context
2024-09-03
| ||
17:03 | Merged experimental branch md-col-header-alignment ... (check-in: 9f8bf69185 user: wyoung tags: trunk) | |
15:31 | Latest upstream autosetup, primarily for an OpenBSD-specific fix. ... (check-in: 4eef2de39f user: stephan tags: trunk) | |
11:55 | Reuse scroll-related callbacks where possible instead of redefining them on a per-element basis. ... (check-in: ddeba72d13 user: stephan tags: trunk) | |
Changes
Changes to autosetup/README.autosetup.
|
| | | 1 2 3 4 5 6 7 8 | README.autosetup created by autosetup v0.7.2 This is the autosetup directory for a local install of autosetup. It contains autosetup, support files and loadable modules. *.tcl files in this directory are optional modules which can be loaded with the 'use' directive. |
︙ | ︙ |
Changes to autosetup/autosetup.
1 2 3 4 5 6 7 8 | #!/bin/sh # Copyright (c) 2006-2011 WorkWare Systems http://www.workware.net.au/ # All rights reserved # vim:se syntax=tcl: # \ dir=`dirname "$0"`; exec "`$dir/autosetup-find-tclsh`" "$0" "$@" # Note that the version has a trailing + on unreleased versions | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh # Copyright (c) 2006-2011 WorkWare Systems http://www.workware.net.au/ # All rights reserved # vim:se syntax=tcl: # \ dir=`dirname "$0"`; exec "`$dir/autosetup-find-tclsh`" "$0" "$@" # Note that the version has a trailing + on unreleased versions set autosetup(version) 0.7.2 # Can be set to 1 to debug early-init problems set autosetup(debug) [expr {"--debug" in $argv}] ################################################################## # # Main flow of control, option handling |
︙ | ︙ |
Changes to autosetup/autosetup-find-tclsh.
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh # Looks for a suitable tclsh or jimsh in the PATH # If not found, builds a bootstrap jimsh in current dir from source # Prefer $autosetup_tclsh if is set in the environment (unless ./jimsh0 works) # If an argument is given, use that as the test instead of autosetup-test-tclsh d="`dirname "$0"`" for tclsh in ./jimsh0 $autosetup_tclsh jimsh tclsh tclsh8.5 tclsh8.6 tclsh8.7; do { $tclsh "$d/${1-autosetup-test-tclsh}"; } 2>/dev/null && exit 0 done echo 1>&2 "No installed jimsh or tclsh, building local bootstrap jimsh0" for cc in ${CC_FOR_BUILD:-cc} gcc; do | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh # Looks for a suitable tclsh or jimsh in the PATH # If not found, builds a bootstrap jimsh in current dir from source # Prefer $autosetup_tclsh if is set in the environment (unless ./jimsh0 works) # If an argument is given, use that as the test instead of autosetup-test-tclsh d="`dirname "$0"`" for tclsh in ./jimsh0 $autosetup_tclsh jimsh tclsh tclsh8.5 tclsh8.6 tclsh8.7; do { $tclsh "$d/${1-autosetup-test-tclsh}"; } 2>/dev/null && exit 0 done echo 1>&2 "No installed jimsh or tclsh, building local bootstrap jimsh0" for cc in ${CC_FOR_BUILD:-cc} gcc; do { $cc -o jimsh0 "$d/jimsh0.c"; } 2>&1 >/dev/null || continue ./jimsh0 "$d/${1-autosetup-test-tclsh}" && exit 0 done echo 1>&2 "No working C compiler found. Tried ${CC_FOR_BUILD:-cc} and gcc." echo false |
Changes to autosetup/jimsh0.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* This is single source file, bootstrap version of Jim Tcl. See http://jim.tcl.tk/ */ #define JIM_TCL_COMPAT #define JIM_ANSIC #define JIM_REGEXP #define HAVE_NO_AUTOCONF #define _JIMAUTOCONF_H #define TCL_LIBRARY "." #define jim_ext_bootstrap #define jim_ext_aio #define jim_ext_readdir #define jim_ext_regexp #define jim_ext_file | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | /* This is single source file, bootstrap version of Jim Tcl. See http://jim.tcl.tk/ */ #define JIM_TCL_COMPAT #define JIM_ANSIC #define JIM_REGEXP #define HAVE_NO_AUTOCONF #define JIM_TINY #define _JIMAUTOCONF_H #define TCL_LIBRARY "." #define jim_ext_bootstrap #define jim_ext_aio #define jim_ext_readdir #define jim_ext_regexp #define jim_ext_file |
︙ | ︙ | |||
58 59 60 61 62 63 64 | #define HAVE_SYS_TIME_H #define HAVE_DIRENT_H #define HAVE_UNISTD_H #define HAVE_UMASK #define HAVE_PIPE #define _FILE_OFFSET_BITS 64 #endif | | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #define HAVE_SYS_TIME_H #define HAVE_DIRENT_H #define HAVE_UNISTD_H #define HAVE_UMASK #define HAVE_PIPE #define _FILE_OFFSET_BITS 64 #endif #define JIM_VERSION 83 #ifndef JIM_WIN32COMPAT_H #define JIM_WIN32COMPAT_H #ifdef __cplusplus extern "C" { |
︙ | ︙ | |||
572 573 574 575 576 577 578 | unsigned int i, j; } Jim_PrngState; typedef struct Jim_Interp { Jim_Obj *result; int unused_errorLine; Jim_Obj *currentFilenameObj; | | | 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 | unsigned int i, j; } Jim_PrngState; typedef struct Jim_Interp { Jim_Obj *result; int unused_errorLine; Jim_Obj *currentFilenameObj; int break_level; int maxCallFrameDepth; int maxEvalDepth; int evalDepth; int returnCode; int returnLevel; int exitCode; long id; |
︙ | ︙ | |||
714 715 716 717 718 719 720 721 722 723 724 725 726 727 | JIM_EXPORT int Jim_EvalObjList(Jim_Interp *interp, Jim_Obj *listObj); JIM_EXPORT int Jim_EvalObjPrefix(Jim_Interp *interp, Jim_Obj *prefix, int objc, Jim_Obj *const *objv); #define Jim_EvalPrefix(i, p, oc, ov) Jim_EvalObjPrefix((i), Jim_NewStringObj((i), (p), -1), (oc), (ov)) JIM_EXPORT int Jim_EvalNamespace(Jim_Interp *interp, Jim_Obj *scriptObj, Jim_Obj *nsObj); JIM_EXPORT int Jim_SubstObj (Jim_Interp *interp, Jim_Obj *substObjPtr, Jim_Obj **resObjPtrPtr, int flags); JIM_EXPORT void Jim_InitStack(Jim_Stack *stack); JIM_EXPORT void Jim_FreeStack(Jim_Stack *stack); JIM_EXPORT int Jim_StackLen(Jim_Stack *stack); JIM_EXPORT void Jim_StackPush(Jim_Stack *stack, void *element); JIM_EXPORT void * Jim_StackPop(Jim_Stack *stack); | > > > > > > > > | 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 | JIM_EXPORT int Jim_EvalObjList(Jim_Interp *interp, Jim_Obj *listObj); JIM_EXPORT int Jim_EvalObjPrefix(Jim_Interp *interp, Jim_Obj *prefix, int objc, Jim_Obj *const *objv); #define Jim_EvalPrefix(i, p, oc, ov) Jim_EvalObjPrefix((i), Jim_NewStringObj((i), (p), -1), (oc), (ov)) JIM_EXPORT int Jim_EvalNamespace(Jim_Interp *interp, Jim_Obj *scriptObj, Jim_Obj *nsObj); JIM_EXPORT int Jim_SubstObj (Jim_Interp *interp, Jim_Obj *substObjPtr, Jim_Obj **resObjPtrPtr, int flags); JIM_EXPORT Jim_Obj *Jim_GetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, int *lineptr); JIM_EXPORT void Jim_SetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *fileNameObj, int lineNumber); JIM_EXPORT void Jim_InitStack(Jim_Stack *stack); JIM_EXPORT void Jim_FreeStack(Jim_Stack *stack); JIM_EXPORT int Jim_StackLen(Jim_Stack *stack); JIM_EXPORT void Jim_StackPush(Jim_Stack *stack, void *element); JIM_EXPORT void * Jim_StackPop(Jim_Stack *stack); |
︙ | ︙ | |||
2341 2342 2343 2344 2345 2346 2347 | neededLen -= retval; } continue; } if (JimCheckStreamError(interp, af)) { return JIM_ERR; } | < | < | 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 | neededLen -= retval; } continue; } if (JimCheckStreamError(interp, af)) { return JIM_ERR; } break; } return JIM_OK; } static Jim_Obj *aio_read_consume(Jim_Interp *interp, AioFile *af, int neededLen) { |
︙ | ︙ | |||
2615 2616 2617 2618 2619 2620 2621 | aio_consume(af->readbuf, nl - pt + 1); break; } offset = len; len = af->fops->reader(af, buf, AIO_BUF_LEN, nb); if (len <= 0) { | < < | | < < | < | 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 | aio_consume(af->readbuf, nl - pt + 1); break; } offset = len; len = af->fops->reader(af, buf, AIO_BUF_LEN, nb); if (len <= 0) { break; } Jim_AppendString(interp, af->readbuf, buf, len); } aio_set_nonblocking(af, nb); if (!nl && aio_eof(af)) { objPtr = af->readbuf; |
︙ | ︙ | |||
3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 | #define MAX_SUB_MATCHES 50 int Jim_RegsubCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int regcomp_flags = 0; int regexec_flags = 0; int opt_all = 0; int offset = 0; regex_t *regex; const char *p; | > | > > | | | | 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 | #define MAX_SUB_MATCHES 50 int Jim_RegsubCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int regcomp_flags = 0; int regexec_flags = 0; int opt_all = 0; int opt_command = 0; int offset = 0; regex_t *regex; const char *p; int result = JIM_OK; regmatch_t pmatch[MAX_SUB_MATCHES + 1]; int num_matches = 0; int i, j, n; Jim_Obj *varname; Jim_Obj *resultObj; Jim_Obj *cmd_prefix = NULL; Jim_Obj *regcomp_obj = NULL; const char *source_str; int source_len; const char *replace_str = NULL; int replace_len; const char *pattern; int option; enum { OPT_NOCASE, OPT_LINE, OPT_ALL, OPT_START, OPT_COMMAND, OPT_END }; static const char * const options[] = { "-nocase", "-line", "-all", "-start", "-command", "--", NULL }; if (argc < 4) { wrongNumArgs: Jim_WrongNumArgs(interp, 1, argv, "?-switch ...? exp string subSpec ?varName?"); return JIM_ERR; |
︙ | ︙ | |||
3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 | if (++i == argc) { goto wrongNumArgs; } if (Jim_GetIndex(interp, argv[i], &offset) != JIM_OK) { return JIM_ERR; } break; } } if (argc - i != 3 && argc - i != 4) { goto wrongNumArgs; } | > > > > > > > | > > > > > > > > > > > | > | 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 | if (++i == argc) { goto wrongNumArgs; } if (Jim_GetIndex(interp, argv[i], &offset) != JIM_OK) { return JIM_ERR; } break; case OPT_COMMAND: opt_command = 1; break; } } if (argc - i != 3 && argc - i != 4) { goto wrongNumArgs; } regcomp_obj = Jim_DuplicateObj(interp, argv[i]); Jim_IncrRefCount(regcomp_obj); regex = SetRegexpFromAny(interp, regcomp_obj, regcomp_flags); if (!regex) { Jim_DecrRefCount(interp, regcomp_obj); return JIM_ERR; } pattern = Jim_String(argv[i]); source_str = Jim_GetString(argv[i + 1], &source_len); if (opt_command) { cmd_prefix = argv[i + 2]; if (Jim_ListLength(interp, cmd_prefix) == 0) { Jim_SetResultString(interp, "command prefix must be a list of at least one element", -1); Jim_DecrRefCount(interp, regcomp_obj); return JIM_ERR; } Jim_IncrRefCount(cmd_prefix); } else { replace_str = Jim_GetString(argv[i + 2], &replace_len); } varname = argv[i + 3]; resultObj = Jim_NewStringObj(interp, "", 0); if (offset) { if (offset < 0) { |
︙ | ︙ | |||
3889 3890 3891 3892 3893 3894 3895 3896 | break; } num_matches++; Jim_AppendString(interp, resultObj, p, pmatch[0].rm_so); | > > > > > > > > > > > > > > > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 | break; } num_matches++; Jim_AppendString(interp, resultObj, p, pmatch[0].rm_so); if (opt_command) { Jim_Obj *cmdListObj = Jim_DuplicateObj(interp, cmd_prefix); for (j = 0; j < MAX_SUB_MATCHES; j++) { if (pmatch[j].rm_so == -1) { break; } else { Jim_Obj *srcObj = Jim_NewStringObj(interp, p + pmatch[j].rm_so, pmatch[j].rm_eo - pmatch[j].rm_so); Jim_ListAppendElement(interp, cmdListObj, srcObj); } } Jim_IncrRefCount(cmdListObj); result = Jim_EvalObj(interp, cmdListObj); Jim_DecrRefCount(interp, cmdListObj); if (result != JIM_OK) { goto cmd_error; } Jim_AppendString(interp, resultObj, Jim_String(Jim_GetResult(interp)), -1); } else { for (j = 0; j < replace_len; j++) { int idx; int c = replace_str[j]; if (c == '&') { idx = 0; } else if (c == '\\' && j < replace_len) { c = replace_str[++j]; if ((c >= '0') && (c <= '9')) { idx = c - '0'; } else if ((c == '\\') || (c == '&')) { Jim_AppendString(interp, resultObj, replace_str + j, 1); continue; } else { Jim_AppendString(interp, resultObj, replace_str + j - 1, (j == replace_len) ? 1 : 2); continue; } } else { Jim_AppendString(interp, resultObj, replace_str + j, 1); continue; } if ((idx < MAX_SUB_MATCHES) && pmatch[idx].rm_so != -1 && pmatch[idx].rm_eo != -1) { Jim_AppendString(interp, resultObj, p + pmatch[idx].rm_so, pmatch[idx].rm_eo - pmatch[idx].rm_so); } } } p += pmatch[0].rm_eo; n -= pmatch[0].rm_eo; |
︙ | ︙ | |||
3954 3955 3956 3957 3958 3959 3960 3961 | regexec_flags = 0; } } while (n); Jim_AppendString(interp, resultObj, p, -1); | > > | | | | | | | | | | | | | > > > > > > > > > > | 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 | regexec_flags = 0; } } while (n); Jim_AppendString(interp, resultObj, p, -1); cmd_error: if (result == JIM_OK) { if (argc - i == 4) { result = Jim_SetVariable(interp, varname, resultObj); if (result == JIM_OK) { Jim_SetResultInt(interp, num_matches); } else { Jim_FreeObj(interp, resultObj); } } else { Jim_SetResult(interp, resultObj); result = JIM_OK; } } else { Jim_FreeObj(interp, resultObj); } if (opt_command) { Jim_DecrRefCount(interp, cmd_prefix); } Jim_DecrRefCount(interp, regcomp_obj); return result; } int Jim_regexpInit(Jim_Interp *interp) { Jim_PackageProvideCheck(interp, "regexp"); |
︙ | ︙ | |||
6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 | pt = strptime(Jim_String(argv[0]), options.format, &tm); if (pt == 0 || *pt != 0) { Jim_SetResultString(interp, "Failed to parse time according to format", -1); return JIM_ERR; } Jim_SetResultInt(interp, options.gmt ? jim_timegm(&tm) : mktime(&tm)); return JIM_OK; } #endif static int clock_cmd_seconds(Jim_Interp *interp, int argc, Jim_Obj *const *argv) | > | 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 | pt = strptime(Jim_String(argv[0]), options.format, &tm); if (pt == 0 || *pt != 0) { Jim_SetResultString(interp, "Failed to parse time according to format", -1); return JIM_ERR; } tm.tm_isdst = options.gmt ? 0 : -1; Jim_SetResultInt(interp, options.gmt ? jim_timegm(&tm) : mktime(&tm)); return JIM_OK; } #endif static int clock_cmd_seconds(Jim_Interp *interp, int argc, Jim_Obj *const *argv) |
︙ | ︙ | |||
6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 | Jim_posixInit(interp); Jim_clockInit(interp); Jim_arrayInit(interp); Jim_stdlibInit(interp); Jim_tclcompatInit(interp); return JIM_OK; } #define JIM_OPTIMIZATION #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> #include <ctype.h> | > > | 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 | Jim_posixInit(interp); Jim_clockInit(interp); Jim_arrayInit(interp); Jim_stdlibInit(interp); Jim_tclcompatInit(interp); return JIM_OK; } #ifndef JIM_TINY #define JIM_OPTIMIZATION #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> #include <ctype.h> |
︙ | ︙ | |||
6790 6791 6792 6793 6794 6795 6796 | #define JIM_DEBUG_PANIC #endif #define JIM_INTEGER_SPACE 24 | > | > | 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 | #define JIM_DEBUG_PANIC #endif #define JIM_INTEGER_SPACE 24 #if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_SUBST) static const char *jim_tt_name(int type); #endif #ifdef JIM_DEBUG_PANIC static void JimPanicDump(int fail_condition, const char *fmt, ...); #define JimPanic(X) JimPanicDump X #else #define JimPanic(X) #endif |
︙ | ︙ | |||
6826 6827 6828 6829 6830 6831 6832 | static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj *const *argv); static int JimGetWideNoErr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr); static int JimSign(jim_wide w); static void JimPrngSeed(Jim_Interp *interp, unsigned char *seed, int seedLen); static void JimRandomBytes(Jim_Interp *interp, void *dest, unsigned int len); static int JimSetNewVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr, Jim_VarVal *vv); static Jim_VarVal *JimFindVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr); | < | 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 | static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj *const *argv); static int JimGetWideNoErr(Jim_Interp *interp, Jim_Obj *objPtr, jim_wide * widePtr); static int JimSign(jim_wide w); static void JimPrngSeed(Jim_Interp *interp, unsigned char *seed, int seedLen); static void JimRandomBytes(Jim_Interp *interp, void *dest, unsigned int len); static int JimSetNewVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr, Jim_VarVal *vv); static Jim_VarVal *JimFindVariable(Jim_HashTable *ht, Jim_Obj *nameObjPtr); static int SetVariableFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); #define JIM_DICT_SUGAR 100 |
︙ | ︙ | |||
7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 | const char *tend; int tline; int tt; int eof; int inquote; int comment; struct JimParseMissing missing; }; static int JimParseScript(struct JimParserCtx *pc); static int JimParseSep(struct JimParserCtx *pc); static int JimParseEol(struct JimParserCtx *pc); static int JimParseCmd(struct JimParserCtx *pc); static int JimParseQuote(struct JimParserCtx *pc); | > | 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 | const char *tend; int tline; int tt; int eof; int inquote; int comment; struct JimParseMissing missing; const char *errmsg; }; static int JimParseScript(struct JimParserCtx *pc); static int JimParseSep(struct JimParserCtx *pc); static int JimParseEol(struct JimParserCtx *pc); static int JimParseCmd(struct JimParserCtx *pc); static int JimParseQuote(struct JimParserCtx *pc); |
︙ | ︙ | |||
9505 9506 9507 9508 9509 9510 9511 | void DupSourceInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { dupPtr->internalRep.sourceValue = srcPtr->internalRep.sourceValue; Jim_IncrRefCount(dupPtr->internalRep.sourceValue.fileNameObj); } | < < < < < < < < < < < | 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 | void DupSourceInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { dupPtr->internalRep.sourceValue = srcPtr->internalRep.sourceValue; Jim_IncrRefCount(dupPtr->internalRep.sourceValue.fileNameObj); } static const Jim_ObjType scriptLineObjType = { "scriptline", NULL, NULL, NULL, JIM_NONE, }; |
︙ | ︙ | |||
9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 | int linenr; int missing; } ScriptObj; static void JimSetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static int JimParseCheckMissing(Jim_Interp *interp, int ch); static ScriptObj *JimGetScript(Jim_Interp *interp, Jim_Obj *objPtr); void FreeScriptInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { int i; struct ScriptObj *script = (void *)objPtr->internalRep.ptr; if (--script->inUse != 0) | > | 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 | int linenr; int missing; } ScriptObj; static void JimSetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static int JimParseCheckMissing(Jim_Interp *interp, int ch); static ScriptObj *JimGetScript(Jim_Interp *interp, Jim_Obj *objPtr); static void JimSetErrorStack(Jim_Interp *interp, ScriptObj *script); void FreeScriptInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { int i; struct ScriptObj *script = (void *)objPtr->internalRep.ptr; if (--script->inUse != 0) |
︙ | ︙ | |||
9791 9792 9793 9794 9795 9796 9797 | while (wordtokens--) { const ParseToken *t = &tokenlist->list[i++]; token->type = t->type; token->objPtr = JimMakeScriptObj(interp, t); Jim_IncrRefCount(token->objPtr); | | | 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 | while (wordtokens--) { const ParseToken *t = &tokenlist->list[i++]; token->type = t->type; token->objPtr = JimMakeScriptObj(interp, t); Jim_IncrRefCount(token->objPtr); Jim_SetSourceInfo(interp, token->objPtr, script->fileNameObj, t->line); token++; } } if (lineargs == 0) { token--; } |
︙ | ︙ | |||
9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 | msg = "missing quote"; break; } Jim_SetResultString(interp, msg, -1); return JIM_ERR; } static void SubstObjAddTokens(Jim_Interp *interp, struct ScriptObj *script, ParseTokenList *tokenlist) { int i; struct ScriptToken *token; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 | msg = "missing quote"; break; } Jim_SetResultString(interp, msg, -1); return JIM_ERR; } Jim_Obj *Jim_GetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, int *lineptr) { int line; Jim_Obj *fileNameObj; if (objPtr->typePtr == &sourceObjType) { fileNameObj = objPtr->internalRep.sourceValue.fileNameObj; line = objPtr->internalRep.sourceValue.lineNumber; } else if (objPtr->typePtr == &scriptObjType) { ScriptObj *script = JimGetScript(interp, objPtr); fileNameObj = script->fileNameObj; line = script->firstline; } else { fileNameObj = interp->emptyObj; line = 1; } *lineptr = line; return fileNameObj; } void Jim_SetSourceInfo(Jim_Interp *interp, Jim_Obj *objPtr, Jim_Obj *fileNameObj, int lineNumber) { JimPanic((Jim_IsShared(objPtr), "Jim_SetSourceInfo called with shared object")); Jim_FreeIntRep(interp, objPtr); Jim_IncrRefCount(fileNameObj); objPtr->internalRep.sourceValue.fileNameObj = fileNameObj; objPtr->internalRep.sourceValue.lineNumber = lineNumber; objPtr->typePtr = &sourceObjType; } static void SubstObjAddTokens(Jim_Interp *interp, struct ScriptObj *script, ParseTokenList *tokenlist) { int i; struct ScriptToken *token; |
︙ | ︙ | |||
9879 9880 9881 9882 9883 9884 9885 | static void JimSetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { int scriptTextLen; const char *scriptText = Jim_GetString(objPtr, &scriptTextLen); struct JimParserCtx parser; struct ScriptObj *script; ParseTokenList tokenlist; | > | | < < < < < < | < | 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 | static void JimSetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { int scriptTextLen; const char *scriptText = Jim_GetString(objPtr, &scriptTextLen); struct JimParserCtx parser; struct ScriptObj *script; ParseTokenList tokenlist; Jim_Obj *fileNameObj; int line; fileNameObj = Jim_GetSourceInfo(interp, objPtr, &line); ScriptTokenListInit(&tokenlist); JimParserInit(&parser, scriptText, scriptTextLen, line); while (!parser.eof) { JimParseScript(&parser); ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, parser.tline); } ScriptAddToken(&tokenlist, scriptText + scriptTextLen, 0, JIM_TT_EOF, 0); script = Jim_Alloc(sizeof(*script)); memset(script, 0, sizeof(*script)); script->inUse = 1; script->fileNameObj = fileNameObj; Jim_IncrRefCount(script->fileNameObj); script->missing = parser.missing.ch; script->linenr = parser.missing.line; ScriptObjAddTokens(interp, script, &tokenlist); |
︙ | ︙ | |||
11384 11385 11386 11387 11388 11389 11390 11391 11392 11393 | Jim_DecrRefCount(i, i->stackTrace); Jim_DecrRefCount(i, i->errorProc); Jim_DecrRefCount(i, i->unknown); Jim_DecrRefCount(i, i->defer); Jim_DecrRefCount(i, i->nullScriptObj); Jim_DecrRefCount(i, i->currentFilenameObj); Jim_InterpIncrProcEpoch(i); | > > < | 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 | Jim_DecrRefCount(i, i->stackTrace); Jim_DecrRefCount(i, i->errorProc); Jim_DecrRefCount(i, i->unknown); Jim_DecrRefCount(i, i->defer); Jim_DecrRefCount(i, i->nullScriptObj); Jim_DecrRefCount(i, i->currentFilenameObj); Jim_FreeHashTable(&i->commands); Jim_InterpIncrProcEpoch(i); #ifdef JIM_REFERENCES Jim_FreeHashTable(&i->references); #endif Jim_FreeHashTable(&i->packages); Jim_Free(i->prngState); Jim_FreeHashTable(&i->assocData); if (i->traceCmdObj) { |
︙ | ︙ | |||
11586 11587 11588 11589 11590 11591 11592 | Jim_IncrRefCount(stackTraceObj); Jim_DecrRefCount(interp, interp->stackTrace); interp->stackTrace = stackTraceObj; interp->errorFlag = 1; } | | > > > > > > > | | | | > | 11668 11669 11670 11671 11672 11673 11674 11675 11676 11677 11678 11679 11680 11681 11682 11683 11684 11685 11686 11687 11688 11689 11690 11691 11692 11693 11694 11695 11696 11697 11698 11699 | Jim_IncrRefCount(stackTraceObj); Jim_DecrRefCount(interp, interp->stackTrace); interp->stackTrace = stackTraceObj; interp->errorFlag = 1; } static void JimSetErrorStack(Jim_Interp *interp, ScriptObj *script) { if (!interp->errorFlag) { int i; Jim_Obj *stackTrace = Jim_NewListObj(interp, NULL, 0); if (interp->procLevel == 0 && script) { Jim_ListAppendElement(interp, stackTrace, interp->emptyObj); Jim_ListAppendElement(interp, stackTrace, script->fileNameObj); Jim_ListAppendElement(interp, stackTrace, Jim_NewIntObj(interp, script->linenr)); Jim_ListAppendElement(interp, stackTrace, interp->emptyObj); } else { for (i = 0; i <= interp->procLevel; i++) { Jim_EvalFrame *frame = JimGetEvalFrameByProcLevel(interp, -i); if (frame) { JimAddStackFrame(interp, frame, stackTrace); } } } JimSetStackTrace(interp, stackTrace); } } int Jim_SetAssocData(Jim_Interp *interp, const char *key, Jim_InterpDeleteProc * delProc, |
︙ | ︙ | |||
12286 12287 12288 12289 12290 12291 12292 | Jim_Free(dict); return JIM_OK; } | < < < < < | < < | 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 | Jim_Free(dict); return JIM_OK; } fileNameObj = Jim_GetSourceInfo(interp, objPtr, &linenr); Jim_IncrRefCount(fileNameObj); str = Jim_GetString(objPtr, &strLen); Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &listObjType; |
︙ | ︙ | |||
12315 12316 12317 12318 12319 12320 12321 | while (!parser.eof) { Jim_Obj *elementPtr; JimParseList(&parser); if (parser.tt != JIM_TT_STR && parser.tt != JIM_TT_ESC) continue; elementPtr = JimParserGetTokenObj(interp, &parser); | | | 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 | while (!parser.eof) { Jim_Obj *elementPtr; JimParseList(&parser); if (parser.tt != JIM_TT_STR && parser.tt != JIM_TT_ESC) continue; elementPtr = JimParserGetTokenObj(interp, &parser); Jim_SetSourceInfo(interp, elementPtr, fileNameObj, parser.tline); ListAppendElement(objPtr, elementPtr); } } Jim_DecrRefCount(interp, fileNameObj); return JIM_OK; } |
︙ | ︙ | |||
12370 12371 12372 12373 12374 12375 12376 | Jim_Obj *command; Jim_Interp *interp; enum { JIM_LSORT_ASCII, JIM_LSORT_NOCASE, JIM_LSORT_INTEGER, JIM_LSORT_REAL, | | > | 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 | Jim_Obj *command; Jim_Interp *interp; enum { JIM_LSORT_ASCII, JIM_LSORT_NOCASE, JIM_LSORT_INTEGER, JIM_LSORT_REAL, JIM_LSORT_COMMAND, JIM_LSORT_DICT } type; int order; Jim_Obj **indexv; int indexc; int unique; int (*subfn)(Jim_Obj **, Jim_Obj **); }; |
︙ | ︙ | |||
12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 | return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; } static int ListSortStringNoCase(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 1) * sort_info->order; } static int ListSortInteger(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { jim_wide lhs = 0, rhs = 0; if (Jim_GetWide(sort_info->interp, *lhsObj, &lhs) != JIM_OK || Jim_GetWide(sort_info->interp, *rhsObj, &rhs) != JIM_OK) { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 | return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; } static int ListSortStringNoCase(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 1) * sort_info->order; } static int ListSortDict(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { const char *left = Jim_String(*lhsObj); const char *right = Jim_String(*rhsObj); while (1) { if (isdigit(UCHAR(*left)) && isdigit(UCHAR(*right))) { jim_wide lint, rint; char *lend, *rend; lint = jim_strtoull(left, &lend); rint = jim_strtoull(right, &rend); if (lint != rint) { return JimSign(lint - rint) * sort_info->order; } if (lend -left != rend - right) { return JimSign((lend - left) - (rend - right)) * sort_info->order; } left = lend; right = rend; } else { int cl, cr; left += utf8_tounicode_case(left, &cl, 1); right += utf8_tounicode_case(right, &cr, 1); if (cl != cr) { return JimSign(cl - cr) * sort_info->order; } if (cl == 0) { return Jim_StringCompareObj(sort_info->interp, *lhsObj, *rhsObj, 0) * sort_info->order; } } } } static int ListSortInteger(Jim_Obj **lhsObj, Jim_Obj **rhsObj) { jim_wide lhs = 0, rhs = 0; if (Jim_GetWide(sort_info->interp, *lhsObj, &lhs) != JIM_OK || Jim_GetWide(sort_info->interp, *rhsObj, &rhs) != JIM_OK) { |
︙ | ︙ | |||
12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 | break; case JIM_LSORT_REAL: fn = ListSortReal; break; case JIM_LSORT_COMMAND: fn = ListSortCommand; break; default: fn = NULL; JimPanic((1, "ListSort called with invalid sort type")); return -1; } if (info->indexc) { | > > > | 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 | break; case JIM_LSORT_REAL: fn = ListSortReal; break; case JIM_LSORT_COMMAND: fn = ListSortCommand; break; case JIM_LSORT_DICT: fn = ListSortDict; break; default: fn = NULL; JimPanic((1, "ListSort called with invalid sort type")); return -1; } if (info->indexc) { |
︙ | ︙ | |||
12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 | static void ListInsertElements(Jim_Obj *listPtr, int idx, int elemc, Jim_Obj *const *elemVec) { int currentLen = listPtr->internalRep.listValue.len; int requiredLen = currentLen + elemc; int i; Jim_Obj **point; if (requiredLen > listPtr->internalRep.listValue.maxLen) { if (currentLen) { requiredLen *= 2; } ListEnsureLength(listPtr, requiredLen); | > > > > > | 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 | static void ListInsertElements(Jim_Obj *listPtr, int idx, int elemc, Jim_Obj *const *elemVec) { int currentLen = listPtr->internalRep.listValue.len; int requiredLen = currentLen + elemc; int i; Jim_Obj **point; if (elemc == 0) { return; } if (requiredLen > listPtr->internalRep.listValue.maxLen) { if (currentLen) { requiredLen *= 2; } ListEnsureLength(listPtr, requiredLen); |
︙ | ︙ | |||
14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 | #undef OPRINIT_ATTR #define JIM_EXPR_OPERATORS_NUM \ (sizeof(Jim_ExprOperators)/sizeof(struct Jim_ExprOperator)) static int JimParseExpression(struct JimParserCtx *pc) { while (1) { while (isspace(UCHAR(*pc->p)) || (*(pc->p) == '\\' && *(pc->p + 1) == '\n')) { if (*pc->p == '\n') { pc->linenr++; } pc->p++; | > > | 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 | #undef OPRINIT_ATTR #define JIM_EXPR_OPERATORS_NUM \ (sizeof(Jim_ExprOperators)/sizeof(struct Jim_ExprOperator)) static int JimParseExpression(struct JimParserCtx *pc) { pc->errmsg = NULL; while (1) { while (isspace(UCHAR(*pc->p)) || (*(pc->p) == '\\' && *(pc->p + 1) == '\n')) { if (*pc->p == '\n') { pc->linenr++; } pc->p++; |
︙ | ︙ | |||
14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 | return JimParseCmd(pc); case '$': if (JimParseVar(pc) == JIM_ERR) return JimParseExprOperator(pc); else { if (pc->tt == JIM_TT_EXPRSUGAR) { return JIM_ERR; } return JIM_OK; } break; case '0': case '1': | > | 14511 14512 14513 14514 14515 14516 14517 14518 14519 14520 14521 14522 14523 14524 14525 | return JimParseCmd(pc); case '$': if (JimParseVar(pc) == JIM_ERR) return JimParseExprOperator(pc); else { if (pc->tt == JIM_TT_EXPRSUGAR) { pc->errmsg = "nesting expr in expr is not allowed"; return JIM_ERR; } return JIM_OK; } break; case '0': case '1': |
︙ | ︙ | |||
14524 14525 14526 14527 14528 14529 14530 14531 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 | int len = pc->len - bestLen; while (len && isspace(UCHAR(*p))) { len--; p++; } if (*p != '(') { return JIM_ERR; } } pc->tend = pc->p + bestLen - 1; pc->p += bestLen; pc->len -= bestLen; pc->tt = (bestOp - Jim_ExprOperators) + JIM_TT_EXPR_OP; return JIM_OK; } | > < < < < < < < < < < < < < < < < < < < < < < < < < | 14656 14657 14658 14659 14660 14661 14662 14663 14664 14665 14666 14667 14668 14669 14670 14671 14672 14673 14674 14675 14676 14677 14678 14679 14680 14681 | int len = pc->len - bestLen; while (len && isspace(UCHAR(*p))) { len--; p++; } if (*p != '(') { pc->errmsg = "function requires parentheses"; return JIM_ERR; } } pc->tend = pc->p + bestLen - 1; pc->p += bestLen; pc->len -= bestLen; pc->tt = (bestOp - Jim_ExprOperators) + JIM_TT_EXPR_OP; return JIM_OK; } static void FreeExprInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); static void DupExprInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static int SetExprFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType exprObjType = { "expression", |
︙ | ︙ | |||
14865 14866 14867 14868 14869 14870 14871 | } if (!objPtr) { objPtr = Jim_NewStringObj(interp, t->token, t->len); if (t->type == JIM_TT_CMD) { | | | 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 | } if (!objPtr) { objPtr = Jim_NewStringObj(interp, t->token, t->len); if (t->type == JIM_TT_CMD) { Jim_SetSourceInfo(interp, objPtr, builder->fileNameObj, t->line); } } node = builder->next++; node->objPtr = objPtr; Jim_IncrRefCount(node->objPtr); |
︙ | ︙ | |||
14963 14964 14965 14966 14967 14968 14969 | struct ExprTree *expr; ParseTokenList tokenlist; int line; Jim_Obj *fileNameObj; int rc = JIM_ERR; | < < < < < | < < > > > > > > > > | > > | | 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 | struct ExprTree *expr; ParseTokenList tokenlist; int line; Jim_Obj *fileNameObj; int rc = JIM_ERR; fileNameObj = Jim_GetSourceInfo(interp, objPtr, &line); Jim_IncrRefCount(fileNameObj); exprText = Jim_GetString(objPtr, &exprTextLen); ScriptTokenListInit(&tokenlist); JimParserInit(&parser, exprText, exprTextLen, line); while (!parser.eof) { if (JimParseExpression(&parser) != JIM_OK) { ScriptTokenListFree(&tokenlist); Jim_SetResultFormatted(interp, "syntax error in expression: \"%#s\"", objPtr); if (parser.errmsg) { Jim_AppendStrings(interp, Jim_GetResult(interp), ": ", parser.errmsg, NULL); } expr = NULL; goto err; } ScriptAddToken(&tokenlist, parser.tstart, parser.tend - parser.tstart + 1, parser.tt, parser.tline); } #ifdef DEBUG_SHOW_EXPR_TOKENS { int i; printf("==== Expr Tokens (%s) ====\n", Jim_String(fileNameObj)); for (i = 0; i < tokenlist.count; i++) { printf("[%2d]@%d %s '%.*s'\n", i, tokenlist.list[i].line, jim_tt_name(tokenlist.list[i].type), tokenlist.list[i].len, tokenlist.list[i].token); } } #endif if (tokenlist.count <= 1) { Jim_SetResultString(interp, "empty expression", -1); rc = JIM_ERR; } else { rc = JimParseCheckMissing(interp, parser.missing.ch); } if (rc != JIM_OK) { ScriptTokenListFree(&tokenlist); Jim_DecrRefCount(interp, fileNameObj); return rc; } expr = ExprTreeCreateTree(interp, &tokenlist, objPtr, fileNameObj); ScriptTokenListFree(&tokenlist); |
︙ | ︙ | |||
15856 15857 15858 15859 15860 15861 15862 15863 | { JimPanic((interp->traceCmdObj == NULL, "xtrace invoked with no object")); int ret; Jim_Obj *nargv[7]; Jim_Obj *traceCmdObj = interp->traceCmdObj; Jim_Obj *resultObj = Jim_GetResult(interp); | > > > > | > | | | 15967 15968 15969 15970 15971 15972 15973 15974 15975 15976 15977 15978 15979 15980 15981 15982 15983 15984 15985 15986 15987 15988 15989 15990 15991 15992 | { JimPanic((interp->traceCmdObj == NULL, "xtrace invoked with no object")); int ret; Jim_Obj *nargv[7]; Jim_Obj *traceCmdObj = interp->traceCmdObj; Jim_Obj *resultObj = Jim_GetResult(interp); ScriptObj *script = NULL; if (interp->evalFrame->scriptObj) { script = JimGetScript(interp, interp->evalFrame->scriptObj); } nargv[0] = traceCmdObj; nargv[1] = Jim_NewStringObj(interp, type, -1); nargv[2] = script ? script->fileNameObj : interp->emptyObj; nargv[3] = Jim_NewIntObj(interp, script ? script->linenr : 1); nargv[4] = resultObj; nargv[5] = argv[0]; nargv[6] = Jim_NewListObj(interp, argv + 1, argc - 1); interp->traceCmdObj = NULL; |
︙ | ︙ | |||
15984 15985 15986 15987 15988 15989 15990 | retcode = JimCallProcedure(interp, cmdPtr, objc, objv); } else { interp->cmdPrivData = cmdPtr->u.native.privData; retcode = cmdPtr->u.native.cmdProc(interp, objc, objv); } if (retcode == JIM_ERR) { | | | 16100 16101 16102 16103 16104 16105 16106 16107 16108 16109 16110 16111 16112 16113 16114 | retcode = JimCallProcedure(interp, cmdPtr, objc, objv); } else { interp->cmdPrivData = cmdPtr->u.native.privData; retcode = cmdPtr->u.native.cmdProc(interp, objc, objv); } if (retcode == JIM_ERR) { JimSetErrorStack(interp, NULL); } } if (tailcallObj) { Jim_DecrRefCount(interp, tailcallObj); tailcallObj = NULL; |
︙ | ︙ | |||
16019 16020 16021 16022 16023 16024 16025 | interp->cmdPrivData = prevPrivData; interp->evalDepth--; out: JimDecrCmdRefCount(interp, cmdPtr); if (retcode == JIM_ERR) { | | > | 16135 16136 16137 16138 16139 16140 16141 16142 16143 16144 16145 16146 16147 16148 16149 16150 16151 16152 16153 16154 16155 16156 16157 16158 16159 16160 16161 16162 16163 16164 16165 16166 16167 16168 16169 16170 | interp->cmdPrivData = prevPrivData; interp->evalDepth--; out: JimDecrCmdRefCount(interp, cmdPtr); if (retcode == JIM_ERR) { JimSetErrorStack(interp, NULL); } if (interp->framePtr->tailcallObj) { JimDecrCmdRefCount(interp, interp->framePtr->tailcallCmd); Jim_DecrRefCount(interp, interp->framePtr->tailcallObj); interp->framePtr->tailcallCmd = NULL; interp->framePtr->tailcallObj = NULL; } return retcode; } int Jim_EvalObjVector(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int i, retcode; Jim_EvalFrame frame; for (i = 0; i < objc; i++) Jim_IncrRefCount(objv[i]); JimPushEvalFrame(interp, &frame, NULL); retcode = JimInvokeCommand(interp, objc, objv); JimPopEvalFrame(interp); |
︙ | ︙ | |||
16179 16180 16181 16182 16183 16184 16185 | objPtr->typePtr = &interpolatedObjType; objPtr->internalRep.dictSubstValue.varNameObjPtr = token[0].objPtr; objPtr->internalRep.dictSubstValue.indexObjPtr = intv[2]; Jim_IncrRefCount(intv[2]); } else if (tokens && intv[0] && intv[0]->typePtr == &sourceObjType) { | > > | | 16296 16297 16298 16299 16300 16301 16302 16303 16304 16305 16306 16307 16308 16309 16310 16311 16312 | objPtr->typePtr = &interpolatedObjType; objPtr->internalRep.dictSubstValue.varNameObjPtr = token[0].objPtr; objPtr->internalRep.dictSubstValue.indexObjPtr = intv[2]; Jim_IncrRefCount(intv[2]); } else if (tokens && intv[0] && intv[0]->typePtr == &sourceObjType) { int line; Jim_Obj *fileNameObj = Jim_GetSourceInfo(interp, intv[0], &line); Jim_SetSourceInfo(interp, objPtr, fileNameObj, line); } s = objPtr->bytes = Jim_Alloc(totlen + 1); objPtr->length = totlen; for (i = 0; i < tokens; i++) { if (intv[i]) { |
︙ | ︙ | |||
16246 16247 16248 16249 16250 16251 16252 | if (Jim_IsList(scriptObjPtr) && scriptObjPtr->bytes == NULL) { return JimEvalObjList(interp, scriptObjPtr); } Jim_IncrRefCount(scriptObjPtr); script = JimGetScript(interp, scriptObjPtr); if (JimParseCheckMissing(interp, script->missing) == JIM_ERR) { | | | 16365 16366 16367 16368 16369 16370 16371 16372 16373 16374 16375 16376 16377 16378 16379 | if (Jim_IsList(scriptObjPtr) && scriptObjPtr->bytes == NULL) { return JimEvalObjList(interp, scriptObjPtr); } Jim_IncrRefCount(scriptObjPtr); script = JimGetScript(interp, scriptObjPtr); if (JimParseCheckMissing(interp, script->missing) == JIM_ERR) { JimSetErrorStack(interp, script); Jim_DecrRefCount(interp, scriptObjPtr); return JIM_ERR; } Jim_SetEmptyResult(interp); token = script->token; |
︙ | ︙ | |||
16418 16419 16420 16421 16422 16423 16424 | Jim_Free(argv); argv = sargv; } } if (retcode == JIM_ERR) { | | | 16537 16538 16539 16540 16541 16542 16543 16544 16545 16546 16547 16548 16549 16550 16551 | Jim_Free(argv); argv = sargv; } } if (retcode == JIM_ERR) { JimSetErrorStack(interp, NULL); } JimPopEvalFrame(interp); Jim_FreeIntRep(interp, scriptObjPtr); scriptObjPtr->typePtr = &scriptObjType; Jim_SetIntRepPtr(scriptObjPtr, script); |
︙ | ︙ | |||
16646 16647 16648 16649 16650 16651 16652 | { int retval; Jim_Obj *scriptObjPtr; scriptObjPtr = Jim_NewStringObj(interp, script, -1); Jim_IncrRefCount(scriptObjPtr); if (filename) { | | | 16765 16766 16767 16768 16769 16770 16771 16772 16773 16774 16775 16776 16777 16778 16779 | { int retval; Jim_Obj *scriptObjPtr; scriptObjPtr = Jim_NewStringObj(interp, script, -1); Jim_IncrRefCount(scriptObjPtr); if (filename) { Jim_SetSourceInfo(interp, scriptObjPtr, Jim_NewStringObj(interp, filename, -1), lineno); } retval = Jim_EvalObj(interp, scriptObjPtr); Jim_DecrRefCount(interp, scriptObjPtr); return retval; } int Jim_Eval(Jim_Interp *interp, const char *script) |
︙ | ︙ | |||
16728 16729 16730 16731 16732 16733 16734 | scriptObjPtr = JimReadTextFile(interp, filename); if (!scriptObjPtr) { return JIM_ERR; } filenameObj = Jim_NewStringObj(interp, filename, -1); | | | 16847 16848 16849 16850 16851 16852 16853 16854 16855 16856 16857 16858 16859 16860 16861 | scriptObjPtr = JimReadTextFile(interp, filename); if (!scriptObjPtr) { return JIM_ERR; } filenameObj = Jim_NewStringObj(interp, filename, -1); Jim_SetSourceInfo(interp, scriptObjPtr, filenameObj, 1); oldFilenameObj = JimPushInterpObj(interp->currentFilenameObj, filenameObj); retcode = Jim_EvalObj(interp, scriptObjPtr); JimPopInterpObj(interp, interp->currentFilenameObj, oldFilenameObj); |
︙ | ︙ | |||
16769 16770 16771 16772 16773 16774 16775 | } if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { if (JimParseVar(pc) == JIM_OK) { return; } pc->tstart = pc->p; | | > > | 16888 16889 16890 16891 16892 16893 16894 16895 16896 16897 16898 16899 16900 16901 16902 16903 16904 | } if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { if (JimParseVar(pc) == JIM_OK) { return; } pc->tstart = pc->p; pc->p++; pc->len--; } while (pc->len) { if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) { break; } if (*pc->p == '[' && !(flags & JIM_SUBST_NOCMD)) { break; |
︙ | ︙ | |||
17272 17273 17274 17275 17276 17277 17278 | Jim_SetEmptyResult(interp); return JIM_OK; } static int JimCheckLoopRetcode(Jim_Interp *interp, int retval) { if (retval == JIM_BREAK || retval == JIM_CONTINUE) { | | | 17393 17394 17395 17396 17397 17398 17399 17400 17401 17402 17403 17404 17405 17406 17407 | Jim_SetEmptyResult(interp); return JIM_OK; } static int JimCheckLoopRetcode(Jim_Interp *interp, int retval) { if (retval == JIM_BREAK || retval == JIM_CONTINUE) { if (--interp->break_level > 0) { return 1; } } return 0; } |
︙ | ︙ | |||
17462 17463 17464 17465 17466 17467 17468 | } evalstart: #endif while (boolean && (retval == JIM_OK || retval == JIM_CONTINUE)) { retval = Jim_EvalObj(interp, argv[4]); | > > > | < < < < | 17583 17584 17585 17586 17587 17588 17589 17590 17591 17592 17593 17594 17595 17596 17597 17598 17599 17600 17601 17602 17603 17604 | } evalstart: #endif while (boolean && (retval == JIM_OK || retval == JIM_CONTINUE)) { retval = Jim_EvalObj(interp, argv[4]); if (JimCheckLoopRetcode(interp, retval)) { immediate++; break; } if (retval == JIM_OK || retval == JIM_CONTINUE) { JIM_IF_OPTIM(evalnext:) retval = Jim_EvalObj(interp, argv[3]); if (retval == JIM_OK || retval == JIM_CONTINUE) { JIM_IF_OPTIM(testcond:) retval = Jim_GetBoolFromExpr(interp, argv[2], &boolean); } } } |
︙ | ︙ | |||
18325 18326 18327 18328 18329 18330 18331 | } static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const argv[]) { static const char * const options[] = { "-ascii", "-nocase", "-increasing", "-decreasing", "-command", "-integer", "-real", "-index", "-unique", | | | > > | 18445 18446 18447 18448 18449 18450 18451 18452 18453 18454 18455 18456 18457 18458 18459 18460 18461 18462 18463 18464 18465 18466 18467 18468 18469 18470 18471 | } static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const argv[]) { static const char * const options[] = { "-ascii", "-nocase", "-increasing", "-decreasing", "-command", "-integer", "-real", "-index", "-unique", "-stride", "-dictionary", NULL }; enum { OPT_ASCII, OPT_NOCASE, OPT_INCREASING, OPT_DECREASING, OPT_COMMAND, OPT_INTEGER, OPT_REAL, OPT_INDEX, OPT_UNIQUE, OPT_STRIDE, OPT_DICT }; Jim_Obj *resObj; int i; int retCode; int shared; long stride = 1; Jim_Obj **elements; int listlen; struct lsort_info info; if (argc < 2) { wrongargs: Jim_WrongNumArgs(interp, 1, argv, "?options? list"); return JIM_ERR; |
︙ | ︙ | |||
18362 18363 18364 18365 18366 18367 18368 18369 18370 18371 18372 18373 18374 18375 | if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ENUM_ABBREV | JIM_ERRMSG) != JIM_OK) return JIM_ERR; switch (option) { case OPT_ASCII: info.type = JIM_LSORT_ASCII; break; case OPT_NOCASE: info.type = JIM_LSORT_NOCASE; break; case OPT_INTEGER: info.type = JIM_LSORT_INTEGER; break; case OPT_REAL: | > > > | 18484 18485 18486 18487 18488 18489 18490 18491 18492 18493 18494 18495 18496 18497 18498 18499 18500 | if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ENUM_ABBREV | JIM_ERRMSG) != JIM_OK) return JIM_ERR; switch (option) { case OPT_ASCII: info.type = JIM_LSORT_ASCII; break; case OPT_DICT: info.type = JIM_LSORT_DICT; break; case OPT_NOCASE: info.type = JIM_LSORT_NOCASE; break; case OPT_INTEGER: info.type = JIM_LSORT_INTEGER; break; case OPT_REAL: |
︙ | ︙ | |||
18416 18417 18418 18419 18420 18421 18422 18423 18424 | goto badindex; } i++; break; } } resObj = argv[argc - 1]; if (stride > 1) { Jim_Obj *tmpListObj; | > > > > > > > < < < | 18541 18542 18543 18544 18545 18546 18547 18548 18549 18550 18551 18552 18553 18554 18555 18556 18557 18558 18559 18560 18561 18562 18563 18564 18565 | goto badindex; } i++; break; } } resObj = argv[argc - 1]; JimListGetElements(interp, resObj, &listlen, &elements); if (listlen <= 1) { Jim_SetResult(interp, resObj); return JIM_OK; } if (stride > 1) { Jim_Obj *tmpListObj; int i; if (listlen % stride) { Jim_SetResultString(interp, "list size must be a multiple of the stride length", -1); return JIM_ERR; } tmpListObj = Jim_NewListObj(interp, NULL, 0); Jim_IncrRefCount(tmpListObj); |
︙ | ︙ | |||
18610 18611 18612 18613 18614 18615 18616 | } if (argc == 2) { long level; int ret = Jim_GetLong(interp, argv[1], &level); if (ret != JIM_OK) { return ret; } | | | 18739 18740 18741 18742 18743 18744 18745 18746 18747 18748 18749 18750 18751 18752 18753 | } if (argc == 2) { long level; int ret = Jim_GetLong(interp, argv[1], &level); if (ret != JIM_OK) { return ret; } interp->break_level = level; } return retcode; } static int Jim_BreakCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { |
︙ | ︙ | |||
20328 20329 20330 20331 20332 20333 20334 | Jim_DecrRefCount(interp, interp->currentFilenameObj); interp->currentFilenameObj = argv[2]; } Jim_SetResult(interp, interp->currentFilenameObj); return JIM_OK; case INFO_SOURCE:{ | < > | < < < < < < < | < < | < < | 20457 20458 20459 20460 20461 20462 20463 20464 20465 20466 20467 20468 20469 20470 20471 20472 20473 20474 20475 20476 20477 20478 20479 20480 20481 20482 20483 20484 20485 20486 20487 20488 | Jim_DecrRefCount(interp, interp->currentFilenameObj); interp->currentFilenameObj = argv[2]; } Jim_SetResult(interp, interp->currentFilenameObj); return JIM_OK; case INFO_SOURCE:{ Jim_Obj *resObjPtr; Jim_Obj *fileNameObj; if (argc == 4) { Jim_SubCmdArgError(interp, ct, argv[0]); return JIM_ERR; } if (argc == 5) { jim_wide line; if (Jim_GetWide(interp, argv[4], &line) != JIM_OK) { return JIM_ERR; } resObjPtr = Jim_NewStringObj(interp, Jim_String(argv[2]), Jim_Length(argv[2])); Jim_SetSourceInfo(interp, resObjPtr, argv[3], line); } else { int line; fileNameObj = Jim_GetSourceInfo(interp, argv[2], &line); resObjPtr = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, resObjPtr, fileNameObj); Jim_ListAppendElement(interp, resObjPtr, Jim_NewIntObj(interp, line)); } Jim_SetResult(interp, resObjPtr); return JIM_OK; } |
︙ | ︙ | |||
23642 23643 23644 23645 23646 23647 23648 23649 23650 23651 23652 23653 23654 23655 23656 23657 23658 23659 23660 23661 23662 23663 23664 23665 23666 23667 | Jim_AppendString(interp, filenameObj, "tcl.tmp.XXXXXX", -1); } else { filenameObj = Jim_NewStringObj(interp, filename_template, -1); } mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); #ifdef HAVE_MKSTEMP fd = mkstemp(filenameObj->bytes); #else if (mktemp(filenameObj->bytes) == NULL) { fd = -1; } else { fd = open(filenameObj->bytes, O_RDWR | O_CREAT | O_TRUNC); } #endif umask(mask); if (fd < 0) { Jim_SetResultErrno(interp, Jim_String(filenameObj)); Jim_FreeNewObj(interp, filenameObj); return -1; } if (unlink_file) { remove(Jim_String(filenameObj)); | > > > > | 23760 23761 23762 23763 23764 23765 23766 23767 23768 23769 23770 23771 23772 23773 23774 23775 23776 23777 23778 23779 23780 23781 23782 23783 23784 23785 23786 23787 23788 23789 | Jim_AppendString(interp, filenameObj, "tcl.tmp.XXXXXX", -1); } else { filenameObj = Jim_NewStringObj(interp, filename_template, -1); } #ifdef HAVE_UMASK mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); #endif #ifdef HAVE_MKSTEMP fd = mkstemp(filenameObj->bytes); #else if (mktemp(filenameObj->bytes) == NULL) { fd = -1; } else { fd = open(filenameObj->bytes, O_RDWR | O_CREAT | O_TRUNC); } #endif #ifdef HAVE_UMASK umask(mask); #endif if (fd < 0) { Jim_SetResultErrno(interp, Jim_String(filenameObj)); Jim_FreeNewObj(interp, filenameObj); return -1; } if (unlink_file) { remove(Jim_String(filenameObj)); |
︙ | ︙ | |||
24256 24257 24258 24259 24260 24261 24262 24263 24264 24265 24266 24267 24268 24269 | if (Jim_InitStaticExtensions(interp) != JIM_OK) { JimPrintErrorMessage(interp); } Jim_SetVariableStrWithStr(interp, "jim::argv0", orig_argv0); Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, argc == 1 ? "1" : "0"); retcode = Jim_initjimshInit(interp); if (argc == 1) { if (retcode == JIM_ERR) { JimPrintErrorMessage(interp); } | > > > > > | 24378 24379 24380 24381 24382 24383 24384 24385 24386 24387 24388 24389 24390 24391 24392 24393 24394 24395 24396 | if (Jim_InitStaticExtensions(interp) != JIM_OK) { JimPrintErrorMessage(interp); } Jim_SetVariableStrWithStr(interp, "jim::argv0", orig_argv0); Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, argc == 1 ? "1" : "0"); #ifdef USE_LINENOISE Jim_SetVariableStrWithStr(interp, "jim::lineedit", "1"); #else Jim_SetVariableStrWithStr(interp, "jim::lineedit", "0"); #endif retcode = Jim_initjimshInit(interp); if (argc == 1) { if (retcode == JIM_ERR) { JimPrintErrorMessage(interp); } |
︙ | ︙ |