*
* Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
* Copyright 2005 Clemens Hintze <c.hintze@gmx.net>
- * Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
- * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+ * Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
+ * Copyright 2008,2009 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
* Copyright 2008 Andrew Lunn <andrew@lunn.ch>
* Copyright 2008 Duane Ellis <openocd@duaneellis.com>
* Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de>
* Copyright 2008 Steve Bennett <steveb@workware.net.au>
- *
+ * Copyright 2009 Nico Coesel <ncoesel@dealogic.nl>
+ * Copyright 2009 Zachary T Welch zw@superlucidity.net
+ * Copyright 2009 David Brownell
+ *
* The FreeBSD license
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
+ *
* The views and conclusions contained in the software and documentation
* are those of the authors and should not be interpreted as representing
* official policies, either expressed or implied, of the Jim Tcl Project.
#include <pkgconf/jimtcl.h>
#include <stdio.h>
#include <stdlib.h>
+
+typedef CYG_ADDRWORD intptr_t;
+
#include <string.h>
#include <stdarg.h>
#include <ctype.h>
free(buf);
#endif
}
-
+
/*
* Convert a string to a jim_wide INTEGER.
}
/* Search 's1' inside 's2', starting to search from char 'index' of 's2'.
- * The index of the first occurrence of s1 in s2 is returned.
+ * The index of the first occurrence of s1 in s2 is returned.
* If s1 is not found inside s2, -1 is returned. */
-int JimStringFirst(const char *s1, int l1, const char *s2, int l2, int index)
+int JimStringFirst(const char *s1, int l1, const char *s2, int l2, int index_t)
{
int i;
if (!l1 || !l2 || l1 > l2) return -1;
- if (index < 0) index = 0;
- s2 += index;
- for (i = index; i <= l2-l1; i++) {
+ if (index_t < 0) index_t = 0;
+ s2 += index_t;
+ for (i = index_t; i <= l2-l1; i++) {
if (memcmp(s2, s1, l1) == 0)
return i;
s2++;
va_list ap;
va_start(ap, fmt);
- /*
+ /*
* Send it here first.. Assuming STDIO still works
*/
fprintf(stderr, JIM_NL "JIM INTERPRETER PANIC: ");
fprintf(fp,"[backtrace] of 'nm <executable>' in the bug report." JIM_NL);
}
#endif
-
+
/* This may actually crash... we do it last */
if (interp && interp->cookie_stderr) {
Jim_fprintf(interp, interp->cookie_stderr, JIM_NL "JIM INTERPRETER PANIC: ");
char *Jim_StrDupLen(const char *s, int l)
{
char *copy = Jim_Alloc(l + 1);
-
+
memcpy(copy, s, l + 1);
copy[l] = 0; /* Just to be sure, original could be substring */
return copy;
Jim_HashEntry *he, *nextHe;
if (ht->table[i] == NULL) continue;
-
+
/* For each hash entry on this slot... */
he = ht->table[i];
while (he) {
/* Add an element to the target hash table */
int Jim_AddHashEntry(Jim_HashTable *ht, const void *key, void *val)
{
- int index;
+ int index_t;
Jim_HashEntry *entry;
/* Get the index of the new element, or -1 if
* the element already exists. */
- if ((index = JimInsertHashEntry(ht, key)) == -1)
+ if ((index_t = JimInsertHashEntry(ht, key)) == -1)
return JIM_ERR;
/* Allocates the memory and stores key */
entry = Jim_Alloc(sizeof(*entry));
- entry->next = ht->table[index];
- ht->table[index] = entry;
+ entry->next = ht->table[index_t];
+ ht->table[index_t] = entry;
/* Set the hash entry fields. */
Jim_SetHashKey(ht, entry, key);
/* Initialize a parser context.
* 'prg' is a pointer to the program text, linenr is the line
* number of the first line contained in the program. */
-void JimParserInit(struct JimParserCtx *pc, const char *prg,
+void JimParserInit(struct JimParserCtx *pc, const char *prg,
int len, int linenr)
{
pc->prg = prg;
{
char *p = dest;
int i, len;
-
+
if (slen == -1)
slen = strlen(s);
* For exmple the string:
*
* {expand}$a
- *
+ *
* will return as first token "expand", of type JIM_TT_STR
*
* While the string:
* This function may return negative values, or values
* bigger or equal to the length of the list if the index
* is out of range. */
-static int JimRelToAbsIndex(int len, int index)
+static int JimRelToAbsIndex(int len, int index_t)
{
- if (index < 0)
- return len + index;
- return index;
+ if (index_t < 0)
+ return len + index_t;
+ return index_t;
}
/* Convert a pair of index as normalize by JimRelToAbsIndex(),
memcpy(buf, strObjPtr->bytes, strObjPtr->length + 1);
for (i = 0; i < strObjPtr->length; i++)
- buf[i] = tolower(buf[i]);
+ buf[i] = tolower((unsigned)buf[i]);
return Jim_NewStringObjNoAlloc(interp, buf, strObjPtr->length);
}
memcpy(buf, strObjPtr->bytes, strObjPtr->length + 1);
for (i = 0; i < strObjPtr->length; i++)
- buf[i] = toupper(buf[i]);
+ buf[i] = toupper((unsigned)buf[i]);
return Jim_NewStringObjNoAlloc(interp, buf, strObjPtr->length);
}
/* This is the core of the [format] command.
* TODO: Lots of things work - via a hack
- * However, no format item can be >= JIM_MAX_FMT
+ * However, no format item can be >= JIM_MAX_FMT
*/
#define JIM_MAX_FMT 2048
static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
const char *fmt, *_fmt;
int fmtLen;
Jim_Obj *resObjPtr;
-
+
fmt = Jim_GetString(fmtObjPtr, &fmtLen);
_fmt = fmt;
case 'u': /* unsigned */
case 'f': /* float */
break;
-
+
/* non-terminals */
case '0': /* zero pad */
zpad = 1;
altfm = 1;
fmt++; fmtLen--;
goto next_fmt;
-
+
case '.':
inprec = 1;
fmt++; fmtLen--;
case '8':
case '9':
accum = 0;
- while (isdigit(*fmt) && (fmtLen > 0)) {
+ while (isdigit((unsigned)*fmt) && (fmtLen > 0)) {
accum = (accum * 10) + (*fmt - '0');
fmt++; fmtLen--;
}
goto next_fmt;
break;
}
-
-
+
+
if (*fmt != '%') {
if (objc == 0) {
not_enough_args:
objc--;
}
}
-
+
/*
* Create the formatter
* cause we cheat and use sprintf()
case 'X':
/* jim widevaluse are 64bit */
if (sizeof(jim_wide) == sizeof(long long)) {
- *cp++ = 'l';
+ *cp++ = 'l';
*cp++ = 'l';
} else {
*cp++ = 'l';
printf("FMT was: %s\n", fmt_str);
printf("RES was: |%s|\n", sprintf_buf);
#endif
-
+
sprintf_buf[ JIM_MAX_FMT - 1] = 0;
Jim_AppendString(interp, resObjPtr, sprintf_buf, strlen(sprintf_buf));
/* next obj */
char *sprintf_buf = malloc(JIM_MAX_FMT);
Jim_Obj *t = Jim_FormatString_Inner(interp, fmtObjPtr, objc, objv, sprintf_buf);
free(sprintf_buf);
- return t;
+ return t;
}
/* -----------------------------------------------------------------------------
return JIM_ERR;
}
-int Jim_GetNvp(Jim_Interp *interp,
+int Jim_GetNvp(Jim_Interp *interp,
Jim_Obj *objPtr,
- const Jim_Nvp *nvp_table,
+ const Jim_Nvp *nvp_table,
const Jim_Nvp ** result)
{
Jim_Nvp *n;
* The command structure is a pre-computed representation of the
* command length and arguments structure as a simple liner array
* of integers.
- *
+ *
* For example the script:
*
* puts hello
int i;
struct ScriptObj *script = (void*) objPtr->internalRep.ptr;
+ if (!script)
+ return;
+
script->inUse--;
if (script->inUse != 0) return;
for (i = 0; i < script->len; i++) {
JimParserInit(&parser, scriptText, scriptTextLen, initialLineNumber);
while (!JimParserEof(&parser)) {
- char *token;
+ char *token_t;
int len, type, linenr;
JimParseScript(&parser);
- token = JimParserGetToken(&parser, &len, &type, &linenr);
- ScriptObjAddToken(interp, script, token, len, type,
+ token_t = JimParserGetToken(&parser, &len, &type, &linenr);
+ ScriptObjAddToken(interp, script, token_t, len, type,
propagateSourceInfo ? script->fileName : NULL,
linenr);
}
cmdPtr->arityMin = arityMin;
cmdPtr->arityMax = arityMax;
cmdPtr->staticVars = NULL;
-
+
/* Create the statics hash table. */
if (staticsListObjPtr) {
int len, i;
Jim_InitHashTable(cmdPtr->staticVars, getJimVariablesHashTableType(),
interp);
for (i = 0; i < len; i++) {
- Jim_Obj *objPtr, *initObjPtr, *nameObjPtr;
+ Jim_Obj *objPtr=NULL, *initObjPtr=NULL, *nameObjPtr=NULL;
Jim_Var *varPtr;
int subLen;
return JIM_OK;
}
-int Jim_RenameCommand(Jim_Interp *interp, const char *oldName,
+int Jim_RenameCommand(Jim_Interp *interp, const char *oldName,
const char *newName)
{
Jim_Cmd *cmdPtr;
const char *name;
Jim_Var *varPtr;
int err;
-
+
if ((err = SetVariableFromAny(interp, nameObjPtr)) != JIM_OK) {
/* Check for [dict] syntax sugar. */
if (err == JIM_DICT_SUGAR)
return copy;
}
-int JimReferencesHTKeyCompare(void *privdata, const void *key1,
+int JimReferencesHTKeyCompare(void *privdata, const void *key1,
const void *key2)
{
JIM_NOTUSED(privdata);
&objPtr->internalRep.refValue.id, NULL);
#ifdef JIM_DEBUG_GC
Jim_fprintf(interp,interp->cookie_stdout,
- "MARK (reference): %d refcount: %d" JIM_NL,
+ "MARK (reference): %d refcount: %d" JIM_NL,
(int) objPtr->internalRep.refValue.id,
objPtr->refCount);
#endif
{
jim_wide elapsedId;
int elapsedTime;
-
+
elapsedId = interp->referenceNextId - interp->lastCollectId;
elapsedTime = time(NULL) - interp->lastCollectTime;
/* Check that the live object list is empty, otherwise
* there is a memory leak. */
if (i->liveList != NULL) {
- Jim_Obj *objPtr = i->liveList;
-
+ objPtr = i->liveList;
+
Jim_fprintf(i, i->cookie_stdout,JIM_NL "-------------------------------------" JIM_NL);
Jim_fprintf(i, i->cookie_stdout,"Objects still in the free list:" JIM_NL);
while (objPtr) {
Jim_AddHashEntry(&interp->sharedStrings, strCopy, (void*)1);
return strCopy;
} else {
- long refCount = (long) he->val;
+ intptr_t refCount = (intptr_t) he->val;
refCount++;
he->val = (void*) refCount;
void Jim_ReleaseSharedString(Jim_Interp *interp, const char *str)
{
- long refCount;
+ intptr_t refCount;
Jim_HashEntry *he = Jim_FindHashEntry(&interp->sharedStrings, str);
if (he == NULL)
Jim_Panic(interp,"Jim_ReleaseSharedString called with "
"unknown shared string '%s'", str);
- refCount = (long) he->val;
+ refCount = (intptr_t) he->val;
refCount--;
if (refCount == 0) {
Jim_DeleteHashEntry(&interp->sharedStrings, str);
realLength = 0;
for (i = 0; i < objPtr->internalRep.listValue.len; i++) {
int len, qlen;
- const char *strRep = Jim_GetString(ele[i], &len);
+ strRep = Jim_GetString(ele[i], &len);
char *q;
switch (quotingType[i]) {
return JIM_OK;
}
-Jim_Obj *Jim_NewListObj(Jim_Interp *interp, Jim_Obj *const *elements,
+Jim_Obj *Jim_NewListObj(Jim_Interp *interp, Jim_Obj *const *elements,
int len)
{
Jim_Obj *objPtr;
*
* NOTE: this function can be called only against objects
* with internal type of List. */
-void ListInsertElements(Jim_Obj *listPtr, int index, int elemc,
+void ListInsertElements(Jim_Obj *listPtr, int index_t, int elemc,
Jim_Obj *const *elemVec)
{
int currentLen = listPtr->internalRep.listValue.len;
sizeof(Jim_Obj*)*maxLen);
listPtr->internalRep.listValue.maxLen = maxLen;
}
- point = listPtr->internalRep.listValue.ele + index;
- memmove(point + elemc, point, (currentLen-index) * sizeof(Jim_Obj*));
+ point = listPtr->internalRep.listValue.ele + index_t;
+ memmove(point + elemc, point, (currentLen-index_t) * sizeof(Jim_Obj*));
for (i = 0; i < elemc; ++i) {
point[i] = elemVec[i];
Jim_IncrRefCount(point[i]);
*intPtr = listPtr->internalRep.listValue.len;
}
-void Jim_ListInsertElements(Jim_Interp *interp, Jim_Obj *listPtr, int index,
+void Jim_ListInsertElements(Jim_Interp *interp, Jim_Obj *listPtr, int index_t,
int objc, Jim_Obj *const *objVec)
{
if (Jim_IsShared(listPtr))
Jim_Panic(interp,"Jim_ListInsertElement called with shared object");
if (listPtr->typePtr != &listObjType)
SetListFromAny(interp, listPtr);
- if (index >= 0 && index > listPtr->internalRep.listValue.len)
- index = listPtr->internalRep.listValue.len;
- else if (index < 0)
- index = 0;
+ if (index_t >= 0 && index_t > listPtr->internalRep.listValue.len)
+ index_t = listPtr->internalRep.listValue.len;
+ else if (index_t < 0)
+ index_t = 0;
Jim_InvalidateStringRep(listPtr);
- ListInsertElements(listPtr, index, objc, objVec);
+ ListInsertElements(listPtr, index_t, objc, objVec);
}
-int Jim_ListIndex(Jim_Interp *interp, Jim_Obj *listPtr, int index,
+int Jim_ListIndex(Jim_Interp *interp, Jim_Obj *listPtr, int index_t,
Jim_Obj **objPtrPtr, int flags)
{
if (listPtr->typePtr != &listObjType)
SetListFromAny(interp, listPtr);
- if ((index >= 0 && index >= listPtr->internalRep.listValue.len) ||
- (index < 0 && (-index-1) >= listPtr->internalRep.listValue.len)) {
+ if ((index_t >= 0 && index_t >= listPtr->internalRep.listValue.len) ||
+ (index_t < 0 && (-index_t-1) >= listPtr->internalRep.listValue.len)) {
if (flags & JIM_ERRMSG) {
Jim_SetResultString(interp,
"list index out of range", -1);
}
return JIM_ERR;
}
- if (index < 0)
- index = listPtr->internalRep.listValue.len + index;
- *objPtrPtr = listPtr->internalRep.listValue.ele[index];
+ if (index_t < 0)
+ index_t = listPtr->internalRep.listValue.len + index_t;
+ *objPtrPtr = listPtr->internalRep.listValue.ele[index_t];
return JIM_OK;
}
-static int ListSetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int index,
+static int ListSetIndex(Jim_Interp *interp, Jim_Obj *listPtr, int index_t,
Jim_Obj *newObjPtr, int flags)
{
if (listPtr->typePtr != &listObjType)
SetListFromAny(interp, listPtr);
- if ((index >= 0 && index >= listPtr->internalRep.listValue.len) ||
- (index < 0 && (-index-1) >= listPtr->internalRep.listValue.len)) {
+ if ((index_t >= 0 && index_t >= listPtr->internalRep.listValue.len) ||
+ (index_t < 0 && (-index_t-1) >= listPtr->internalRep.listValue.len)) {
if (flags & JIM_ERRMSG) {
Jim_SetResultString(interp,
- "list index out of range", -1);
+ "list index_t out of range", -1);
}
return JIM_ERR;
}
- if (index < 0)
- index = listPtr->internalRep.listValue.len + index;
- Jim_DecrRefCount(interp, listPtr->internalRep.listValue.ele[index]);
- listPtr->internalRep.listValue.ele[index] = newObjPtr;
+ if (index_t < 0)
+ index_t = listPtr->internalRep.listValue.len + index_t;
+ Jim_DecrRefCount(interp, listPtr->internalRep.listValue.ele[index_t]);
+ listPtr->internalRep.listValue.ele[index_t] = newObjPtr;
Jim_IncrRefCount(newObjPtr);
return JIM_OK;
}
Jim_Obj *const *indexv, int indexc, Jim_Obj *newObjPtr)
{
Jim_Obj *varObjPtr, *objPtr, *listObjPtr;
- int shared, i, index;
+ int shared, i, index_t;
varObjPtr = objPtr = Jim_GetVariable(interp, varNamePtr, JIM_ERRMSG);
if (objPtr == NULL)
varObjPtr = objPtr = Jim_DuplicateObj(interp, objPtr);
for (i = 0; i < indexc-1; i++) {
listObjPtr = objPtr;
- if (Jim_GetIndex(interp, indexv[i], &index) != JIM_OK)
+ if (Jim_GetIndex(interp, indexv[i], &index_t) != JIM_OK)
goto err;
- if (Jim_ListIndex(interp, listObjPtr, index, &objPtr,
+ if (Jim_ListIndex(interp, listObjPtr, index_t, &objPtr,
JIM_ERRMSG) != JIM_OK) {
goto err;
}
if (Jim_IsShared(objPtr)) {
objPtr = Jim_DuplicateObj(interp, objPtr);
- ListSetIndex(interp, listObjPtr, index, objPtr, JIM_NONE);
+ ListSetIndex(interp, listObjPtr, index_t, objPtr, JIM_NONE);
}
Jim_InvalidateStringRep(listObjPtr);
}
- if (Jim_GetIndex(interp, indexv[indexc-1], &index) != JIM_OK)
+ if (Jim_GetIndex(interp, indexv[indexc-1], &index_t) != JIM_OK)
goto err;
- if (ListSetIndex(interp, objPtr, index, newObjPtr, JIM_ERRMSG) == JIM_ERR)
+ if (ListSetIndex(interp, objPtr, index_t, newObjPtr, JIM_ERRMSG) == JIM_ERR)
goto err;
Jim_InvalidateStringRep(objPtr);
Jim_InvalidateStringRep(varObjPtr);
realLength = 0;
for (i = 0; i < objc; i++) {
int len, qlen;
- const char *strRep = Jim_GetString(objv[i], &len);
+ strRep = Jim_GetString(objv[i], &len);
char *q;
switch (quotingType[i]) {
int SetIndexFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
{
- int index, end = 0;
+ int index_t, end = 0;
const char *str;
/* Get the string representation */
str = Jim_GetString(objPtr, NULL);
/* Try to convert into an index */
if (!strcmp(str, "end")) {
- index = 0;
+ index_t = 0;
end = 1;
} else {
if (!strncmp(str, "end-", 4)) {
str += 4;
end = 1;
}
- if (Jim_StringToIndex(str, &index) != JIM_OK) {
+ if (Jim_StringToIndex(str, &index_t) != JIM_OK) {
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
Jim_AppendStrings(interp, Jim_GetResult(interp),
"bad index \"", Jim_GetString(objPtr, NULL), "\": "
}
}
if (end) {
- if (index < 0)
- index = INT_MAX;
+ if (index_t < 0)
+ index_t = INT_MAX;
else
- index = -(index + 1);
- } else if (!end && index < 0)
- index = -INT_MAX;
+ index_t = -(index_t + 1);
+ } else if (index_t < 0)
+ index_t = -INT_MAX;
/* Free the old internal repr and set the new one. */
Jim_FreeIntRep(interp, objPtr);
objPtr->typePtr = &indexObjType;
- objPtr->internalRep.indexValue = index;
+ objPtr->internalRep.indexValue = index_t;
return JIM_OK;
}
if (*pc->p == '-') {
pc->p++; pc->len--;
}
- while (isdigit((int)*pc->p)
+ while (isdigit((int)*pc->p)
|| (allowhex && isxdigit((int)*pc->p))
- || (allowdot && *pc->p == '.')
+ || (allowdot && *pc->p == '.')
|| (pc->p-pc->tstart == 1 && *pc->tstart == '0' &&
(*pc->p == 'x' || *pc->p == 'X'))
)
static void ExprMakeLazy(Jim_Interp *interp, ExprByteCode *expr)
{
while (1) {
- int index = -1, leftindex, arity, i, offset;
+ int index_t = -1, leftindex, arity, i, offset;
Jim_ExprOperator *op;
/* Search for || or && */
for (i = 0; i < expr->len; i++) {
if (expr->opcode[i] == JIM_EXPROP_LOGICAND ||
expr->opcode[i] == JIM_EXPROP_LOGICOR) {
- index = i;
+ index_t = i;
break;
}
}
- if (index == -1) return;
+ if (index_t == -1) return;
/* Search for the end of the first operator */
- leftindex = index-1;
+ leftindex = index_t-1;
arity = 1;
while (arity) {
switch (expr->opcode[leftindex]) {
memmove(&expr->obj[leftindex + 2], &expr->obj[leftindex],
sizeof(Jim_Obj*)*(expr->len-leftindex));
expr->len += 2;
- index += 2;
- offset = (index-leftindex)-1;
- Jim_DecrRefCount(interp, expr->obj[index]);
- if (expr->opcode[index] == JIM_EXPROP_LOGICAND) {
+ index_t += 2;
+ offset = (index_t-leftindex)-1;
+ Jim_DecrRefCount(interp, expr->obj[index_t]);
+ if (expr->opcode[index_t] == JIM_EXPROP_LOGICAND) {
expr->opcode[leftindex + 1] = JIM_EXPROP_LOGICAND_LEFT;
- expr->opcode[index] = JIM_EXPROP_LOGICAND_RIGHT;
+ expr->opcode[index_t] = JIM_EXPROP_LOGICAND_RIGHT;
expr->obj[leftindex + 1] = Jim_NewStringObj(interp, "&L", -1);
- expr->obj[index] = Jim_NewStringObj(interp, "&R", -1);
+ expr->obj[index_t] = Jim_NewStringObj(interp, "&R", -1);
} else {
expr->opcode[leftindex + 1] = JIM_EXPROP_LOGICOR_LEFT;
- expr->opcode[index] = JIM_EXPROP_LOGICOR_RIGHT;
+ expr->opcode[index_t] = JIM_EXPROP_LOGICOR_RIGHT;
expr->obj[leftindex + 1] = Jim_NewStringObj(interp, "|L", -1);
- expr->obj[index] = Jim_NewStringObj(interp, "|R", -1);
+ expr->obj[index_t] = Jim_NewStringObj(interp, "|R", -1);
}
expr->opcode[leftindex] = JIM_EXPROP_NUMBER;
expr->obj[leftindex] = Jim_NewIntObj(interp, offset);
- Jim_IncrRefCount(expr->obj[index]);
+ Jim_IncrRefCount(expr->obj[index_t]);
Jim_IncrRefCount(expr->obj[leftindex]);
Jim_IncrRefCount(expr->obj[leftindex + 1]);
}
"Got floating-point value where integer was expected", -1);
error = 1;
goto err;
- break;
case JIM_EXPROP_ADD: dC = dA + dB; break;
case JIM_EXPROP_SUB: dC = dA-dB; break;
case JIM_EXPROP_MUL: dC = dA*dB; break;
case JIM_EXPROP_GT: dC = dA > dB; break;
case JIM_EXPROP_LTE: dC = dA <= dB; break;
case JIM_EXPROP_GTE: dC = dA >= dB; break;
+ /* FIXME comparing floats for equality/inequality is bad juju */
case JIM_EXPROP_NUMEQ: dC = dA == dB; break;
case JIM_EXPROP_NUMNE: dC = dA != dB; break;
case JIM_EXPROP_LOGICAND_LEFT:
* to be parsed in its entirely first and then, if correct, can be used for
* scanning. To avoid endless re-parsing, the parsed representation will be
* stored in an internal representation and re-used for performance reason. */
-
+
/* A ScanFmtPartDescr will held the information of /one/ part of the whole
* scanformat string. This part will later be used to extract information
* out from the string to be parsed by Jim_ScanString */
-
+
typedef struct ScanFmtPartDescr {
char type; /* Type of conversion (e.g. c, d, f) */
char modifier; /* Modify type (e.g. l - long, h - short */
size_t width; /* Maximal width of input to be converted */
- int pos; /* -1 - no assign, 0 - natural pos, >0 - XPG3 pos */
+ int pos; /* -1 - no assign, 0 - natural pos, >0 - XPG3 pos */
char *arg; /* Specification of a CHARSET conversion */
char *prefix; /* Prefix to be scanned literally before conversion */
} ScanFmtPartDescr;
int width = 0, skip;
ScanFmtPartDescr *descr = &fmtObj->descr[curr];
fmtObj->count++;
- descr->width = 0; /* Assume width unspecified */
+ descr->width = 0; /* Assume width unspecified */
/* Overread and store any "literal" prefix */
if (*fmt != '%' || fmt[1] == '%') {
descr->type = 0;
buffer[i++] = *fmt;
}
buffer[i++] = 0;
- }
+ }
/* Skip the conversion introducing '%' sign */
- ++fmt;
+ ++fmt;
/* End reached due to non-conversion literal only? */
if (fmt >= fmtEnd)
goto done;
if (*fmt != ']') {
fmtObj->error = "unmatched [ in format string";
return JIM_ERR;
- }
+ }
end = i;
buffer[i++] = 0;
/* In case a range fence was given "backwards", swap it */
/* Remember any valid modifier if given */
if (strchr("hlL", *fmt) != 0)
descr->modifier = tolower((int)*fmt++);
-
+
descr->type = *fmt;
if (strchr("efgcsndoxui", *fmt) == 0) {
fmtObj->error = "bad scan conversion character";
((ScanFmtStringObj*)((_fo_)->internalRep.ptr))->error
/* Some Bit testing/setting/cleaning routines. For now only used in handling
- * charsets ([a-z123]) within scanning. Later on perhaps a base for a
- * bitvector implementation in Jim? */
+ * charsets ([a-z123]) within scanning. Later on perhaps a base for a
+ * bitvector implementation in Jim? */
static int JimTestBit(const char *bitvec, char ch)
{
memset(charset, (sdescr ? 0 : 255), sizeof(charset));
if (sdescr) {
/* There was a set description given, that means we are parsing
- * a specified string. So we have to build a corresponding
+ * a specified string. So we have to build a corresponding
* charset reflecting the description */
int notFlag = 0;
/* Should the set be negated at the end? */
while (*sdescr) {
if (sdescr[1] == '-' && sdescr[2] != 0) {
/* Handle range definitions */
- int i;
- for (i = sdescr[0]; i <= sdescr[2]; ++i)
- JimSetBit(charset, (char)i);
+ int i_t;
+ for (i_t = sdescr[0]; i_t <= sdescr[2]; ++i_t)
+ JimSetBit(charset, (char)i_t);
sdescr += 3;
} else {
/* Handle verbatim character definitions */
/* Negate the charset if there was a NOT given */
for (i = 0; notFlag && i < sizeof(charset); ++i)
charset[i] = ~charset[i];
- }
+ }
/* And after all the mess above, the real work begin ... */
while (str && *str) {
if (!sdescr && isspace((int)*str))
* already scanned thru */
static int ScanOneEntry(Jim_Interp *interp, const char *str, long pos,
- ScanFmtStringObj *fmtObj, long index, Jim_Obj **valObjPtr)
+ ScanFmtStringObj *fmtObj, long index_t, Jim_Obj **valObjPtr)
{
# define MAX_SIZE (sizeof(jim_wide) > sizeof(double) \
? sizeof(jim_wide) \
char buffer[MAX_SIZE];
char *value = buffer;
const char *tok;
- const ScanFmtPartDescr *descr = &fmtObj->descr[index];
+ const ScanFmtPartDescr *descr = &fmtObj->descr[index_t];
size_t sLen = strlen(&str[pos]), scanned = 0;
size_t anchor = pos;
int i;
/* If prefix require, skip WS */
if (isspace((int)descr->prefix[i]))
while (str[pos] && isspace((int)str[pos])) ++pos;
- else if (descr->prefix[i] != str[pos])
+ else if (descr->prefix[i] != str[pos])
break; /* Prefix do not match here, leave the loop */
else
++pos; /* Prefix matched so far, next round */
: descr->type == 'x' ? 16
: descr->type == 'i' ? 0
: 10;
-
+
do {
/* Try to scan a number with the given base */
if (descr->modifier == 'l')
}
/* If scanning failed, and base was undetermined, simply
* put it to 10 and try once more. This should catch the
- * case where %i begin to parse a number prefix (e.g.
+ * case where %i begin to parse a number prefix (e.g.
* '0x' but no further digits follows. This will be
* handled as a ZERO followed by a char 'x' by Tcl */
if (endp == tok && base == 0) base = 10;
int scanned = 1;
const char *str = Jim_GetString(strObjPtr, 0);
Jim_Obj *resultList = 0;
- Jim_Obj **resultVec;
+ Jim_Obj **resultVec =NULL;
int resultc;
Jim_Obj *emptyStr = 0;
ScanFmtStringObj *fmtObj;
#ifdef JIM_DYNLIB
#ifdef WIN32
#define RTLD_LAZY 0
-void * dlopen(const char *path, int mode)
+void * dlopen(const char *path, int mode)
{
JIM_NOTUSED(mode);
const char *prefix;
int prefixlen;
Jim_Obj *prefixObjPtr;
-
+
buf[0] = '\0';
if (Jim_ListIndex(interp, libPathObjPtr, i,
&prefixObjPtr, JIM_NONE) != JIM_OK)
continue;
if (*pathName == '/') {
strcpy(buf, pathName);
- }
+ }
else if (prefixlen && prefix[prefixlen-1] == '/')
sprintf(buf, "%s%s", prefix, pathName);
else
#define JIM_PKG_ANY_VERSION -1
/* Convert a string of the type "1.2" into an integer.
- * MAJOR.MINOR is converted as MAJOR*100 + MINOR, so "1.2" is converted
+ * MAJOR.MINOR is converted as MAJOR*100 + MINOR, so "1.2" is converted
* to the integer with value 102 */
static int JimPackageVersionToInt(Jim_Interp *interp, const char *v,
int *intPtr, int flags)
}
for (i = 0; i < num_args; i++) {
- Jim_Obj *argObjPtr;
- Jim_Obj *nameObjPtr;
- Jim_Obj *valueObjPtr;
+ Jim_Obj *argObjPtr=NULL;
+ Jim_Obj *nameObjPtr=NULL;
+ Jim_Obj *valueObjPtr=NULL;
Jim_ListIndex(interp, cmd->argListObjPtr, i, &argObjPtr, JIM_NONE);
if (i + 1 >= cmd->arityMin) {
}
/* Set optional arguments */
if (cmd->arityMax == -1) {
- Jim_Obj *listObjPtr, *objPtr;
+ Jim_Obj *listObjPtr=NULL, *objPtr=NULL;
i++;
listObjPtr = Jim_NewListObj(interp, argv + i, argc-i);
int nread, totread, maxlen, buflen;
int retval;
Jim_Obj *scriptObjPtr;
-
+
if ((fp = fopen(filename, "r")) == NULL) {
const int cwd_len = 2048;
char *cwd = malloc(cwd_len);
* that's: $foo($bar) */
if (script->len == 1 && script->token[0].type == JIM_TT_VAR) {
Jim_Obj *varObjPtr = script->token[0].objPtr;
-
+
Jim_IncrRefCount(varObjPtr);
resObjPtr = Jim_GetVariable(interp, varObjPtr, JIM_ERRMSG);
if (resObjPtr == NULL) {
* to return. */
savedResultObjPtr = interp->result;
Jim_IncrRefCount(savedResultObjPtr);
-
+
/* Perform the substitution. Starts with an empty object
* and adds every token (performing the appropriate
* var/command/escape substitution). */
JIM_REGISTER_API(GetOpt_Nvp);
JIM_REGISTER_API(GetOpt_NvpUnknown);
JIM_REGISTER_API(GetOpt_Enum);
-
+
JIM_REGISTER_API(Debug_ArgvString);
JIM_REGISTER_API(SetResult_sprintf);
JIM_REGISTER_API(SetResult_NvpUnknown);
/* -----------------------------------------------------------------------------
* Core commands utility functions
* ---------------------------------------------------------------------------*/
-void Jim_WrongNumArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv,
+void Jim_WrongNumArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv,
const char *msg)
{
int i;
Jim_HashEntry *he;
Jim_Obj *listObjPtr = Jim_NewListObj(interp, NULL, 0);
const char *pattern;
- int patternLen;
-
+ int patternLen=0;
+
pattern = patternObjPtr ? Jim_GetString(patternObjPtr, &patternLen) : NULL;
htiter = Jim_GetHashTableIterator(&interp->commands);
while ((he = Jim_NextHashEntry(htiter)) != NULL) {
- if (pattern && !JimStringMatch(pattern, patternLen, he->key,
+ if (pattern && !JimStringMatch(pattern, patternLen, he->key,
strlen((const char*)he->key), 0))
continue;
Jim_ListAppendElement(interp, listObjPtr,
Jim_HashEntry *he;
Jim_Obj *listObjPtr = Jim_NewListObj(interp, NULL, 0);
const char *pattern;
- int patternLen;
-
+ int patternLen=0;
+
pattern = patternObjPtr ? Jim_GetString(patternObjPtr, &patternLen) : NULL;
if (mode == JIM_VARLIST_GLOBALS) {
htiter = Jim_GetHashTableIterator(&interp->topFramePtr->vars);
if (varPtr->linkFramePtr != NULL)
continue;
}
- if (pattern && !JimStringMatch(pattern, patternLen, he->key,
+ if (pattern && !JimStringMatch(pattern, patternLen, he->key,
strlen((const char*)he->key), 0))
continue;
Jim_ListAppendElement(interp, listObjPtr,
{
const char *str;
int len, nonewline = 0;
-
+
if (argc != 2 && argc != 3) {
Jim_WrongNumArgs(interp, 1, argv, "-nonewline string");
return JIM_ERR;
}
/* Helper for [+] and [*] */
-static int Jim_AddMulHelper(Jim_Interp *interp, int argc,
+static int Jim_AddMulHelper(Jim_Interp *interp, int argc,
Jim_Obj *const *argv, int op)
{
jim_wide wideValue, res;
int i;
res = (op == JIM_EXPROP_ADD) ? 0 : 1;
-
+
for (i = 1; i < argc; i++) {
if (Jim_GetWide(interp, argv[i], &wideValue) != JIM_OK)
goto trydouble;
}
/* Helper for [-] and [/] */
-static int Jim_SubDivHelper(Jim_Interp *interp, int argc,
+static int Jim_SubDivHelper(Jim_Interp *interp, int argc,
Jim_Obj *const *argv, int op)
{
jim_wide wideValue, res = 0;
}
/* [unset] */
-static int Jim_UnsetCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_UnsetCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int i;
}
/* [incr] */
-static int Jim_IncrCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_IncrCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
jim_wide wideValue, increment = 1;
}
/* [while] */
-static int Jim_WhileCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_WhileCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc != 3) {
/* STEP 1 -- Check if there are the conditions to run the specialized
* version of while */
-
+
if ((expr = Jim_GetExpression(interp, argv[1])) == NULL) goto noopt;
if (expr->len <= 0 || expr->len > 3) goto noopt;
switch (expr->len) {
exprLen = expr->len;
if (exprLen == 1) {
- jim_wide wideValue;
+ jim_wide wideValue=0;
if (expr->opcode[0] == JIM_EXPROP_VARIABLE) {
varAObjPtr = expr->obj[0];
if (varAObjPtr)
Jim_DecrRefCount(interp, varAObjPtr);
} else if (exprLen == 3) {
- jim_wide wideValueA, wideValueB, cmpRes = 0;
+ jim_wide wideValueA, wideValueB=0, cmpRes = 0;
int cmpType = expr->opcode[2];
varAObjPtr = expr->obj[0];
Jim_GetWide(interp, objPtr, &wideValueB) != JIM_OK)
{
Jim_DecrRefCount(interp, varAObjPtr);
- if (varBObjPtr)
- Jim_DecrRefCount(interp, varBObjPtr);
+ Jim_DecrRefCount(interp, varBObjPtr);
goto noopt;
}
}
}
/* [for] */
-static int Jim_ForCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ForCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int retval;
{
ScriptObj *initScript, *incrScript;
ExprByteCode *expr;
- jim_wide start, stop, currentVal;
+ jim_wide start, stop=0, currentVal;
unsigned jim_wide procEpoch = interp->procEpoch;
Jim_Obj *varNamePtr, *stopVarNamePtr = NULL, *objPtr;
int cmpType;
}
/* foreach + lmap implementation. */
-static int JimForeachMapHelper(Jim_Interp *interp, int argc,
+static int JimForeachMapHelper(Jim_Interp *interp, int argc,
Jim_Obj *const *argv, int doMap)
{
int result = JIM_ERR, i, nbrOfLists, *listsIdx, *listsEnd;
Jim_SetResultString(interp, "couldn't set loop variable: ", -1);
goto err;
}
- ++listsIdx[i]; /* Remember next iterator of current list */
+ ++listsIdx[i]; /* Remember next iterator of current list */
} else if (Jim_SetVariable(interp, varName, emptyStr) != JIM_OK) {
Jim_SetResultString(interp, "couldn't set loop variable: ", -1);
goto err;
}
/* [foreach] */
-static int Jim_ForeachCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ForeachCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
return JimForeachMapHelper(interp, argc, argv, 0);
}
/* [lmap] */
-static int Jim_LmapCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LmapCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
return JimForeachMapHelper(interp, argc, argv, 1);
}
/* [if] */
-static int Jim_IfCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_IfCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int boolean, retval, current = 1, falsebody = 0;
return Jim_EvalObj(interp, argv[current]);
/* Ok: no else-clause follows */
if (++current >= argc) {
- Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
+ Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
return JIM_OK;
}
falsebody = current++;
enum {SWITCH_EXACT, SWITCH_GLOB, SWITCH_RE, SWITCH_CMD, SWITCH_UNKNOWN};
/* [switch] */
-static int Jim_SwitchCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_SwitchCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int retcode = JIM_ERR, matchOpt = SWITCH_EXACT, opt = 1, patCount, i;
else if (strncmp(option, "-regexp", 2) == 0) matchOpt = SWITCH_RE;
else if (strncmp(option, "-command", 2) == 0) { matchOpt = SWITCH_CMD;
if ((argc - opt) < 2) goto wrongnumargs;
- command = argv[++opt];
+ command = argv[++opt];
} else {
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
Jim_AppendStrings(interp, Jim_GetResult(interp),
"bad option \"", option, "\": must be -exact, -glob, "
"-regexp, -command procname or --", 0);
- goto err;
+ goto err;
}
if ((argc - opt) < 2) goto wrongnumargs;
}
"pattern body ... ?default body? or "
"{pattern body ?pattern body ...?}");
err:
- return retcode;
+ return retcode;
}
/* [list] */
-static int Jim_ListCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ListCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Obj *listObjPtr;
}
/* [lindex] */
-static int Jim_LindexCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LindexCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Obj *objPtr, *listObjPtr;
int i;
- int index;
+ int index_t;
if (argc < 3) {
Jim_WrongNumArgs(interp, 1, argv, "list index ?...?");
Jim_IncrRefCount(objPtr);
for (i = 2; i < argc; i++) {
listObjPtr = objPtr;
- if (Jim_GetIndex(interp, argv[i], &index) != JIM_OK) {
+ if (Jim_GetIndex(interp, argv[i], &index_t) != JIM_OK) {
Jim_DecrRefCount(interp, listObjPtr);
return JIM_ERR;
}
- if (Jim_ListIndex(interp, listObjPtr, index, &objPtr,
+ if (Jim_ListIndex(interp, listObjPtr, index_t, &objPtr,
JIM_NONE) != JIM_OK) {
/* Returns an empty object if the index
* is out of range. */
}
/* [llength] */
-static int Jim_LlengthCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LlengthCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int len;
}
/* [lappend] */
-static int Jim_LappendCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LappendCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Obj *listObjPtr;
}
/* [linsert] */
-static int Jim_LinsertCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LinsertCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
- int index, len;
+ int index_t, len;
Jim_Obj *listPtr;
if (argc < 4) {
listPtr = argv[1];
if (Jim_IsShared(listPtr))
listPtr = Jim_DuplicateObj(interp, listPtr);
- if (Jim_GetIndex(interp, argv[2], &index) != JIM_OK)
+ if (Jim_GetIndex(interp, argv[2], &index_t) != JIM_OK)
goto err;
Jim_ListLength(interp, listPtr, &len);
- if (index >= len)
- index = len;
- else if (index < 0)
- index = len + index + 1;
- Jim_ListInsertElements(interp, listPtr, index, argc-3, &argv[3]);
+ if (index_t >= len)
+ index_t = len;
+ else if (index_t < 0)
+ index_t = len + index_t + 1;
+ Jim_ListInsertElements(interp, listPtr, index_t, argc-3, &argv[3]);
Jim_SetResult(interp, listPtr);
return JIM_OK;
err:
}
/* [lset] */
-static int Jim_LsetCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LsetCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc < 3) {
}
/* [append] */
-static int Jim_AppendCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_AppendCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Obj *stringObjPtr;
}
/* [debug] */
-static int Jim_DebugCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_DebugCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
const char *options[] = {
}
/* [eval] */
-static int Jim_EvalCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_EvalCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc == 2) {
}
/* [uplevel] */
-static int Jim_UplevelCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_UplevelCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc >= 2) {
}
/* [expr] */
-static int Jim_ExprCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ExprCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Obj *exprResultPtr;
}
/* [break] */
-static int Jim_BreakCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_BreakCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc != 1) {
}
/* [return] */
-static int Jim_ReturnCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ReturnCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc == 1) {
}
/* [proc] */
-static int Jim_ProcCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ProcCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int argListLen;
if (argListLen) {
const char *str;
int len;
- Jim_Obj *argPtr;
-
+ Jim_Obj *argPtr=NULL;
+
/* Check for 'args' and adjust arityMin and arityMax if necessary */
Jim_ListIndex(interp, argv[2], argListLen-1, &argPtr, JIM_NONE);
str = Jim_GetString(argPtr, &len);
/* Check for default arguments and reduce arityMin if necessary */
while (arityMin > 1) {
- int len;
Jim_ListIndex(interp, argv[2], arityMin - 2, &argPtr, JIM_NONE);
Jim_ListLength(interp, argPtr, &len);
if (len != 2) {
}
/* [concat] */
-static int Jim_ConcatCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ConcatCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_SetResult(interp, Jim_ConcatObj(interp, argc-1, argv + 1));
}
/* [upvar] */
-static int Jim_UpvarCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_UpvarCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
const char *str;
/* Lookup the target frame pointer */
str = Jim_GetString(argv[1], NULL);
- if (argc > 3 &&
+ if (argc > 3 &&
((str[0] >= '0' && str[0] <= '9') || str[0] == '#'))
{
if (Jim_GetCallFrameByLevel(interp, argv[1],
}
/* [global] */
-static int Jim_GlobalCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_GlobalCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int i;
Jim_Obj **value;
int *keyLen, strLen, i;
Jim_Obj *resultObjPtr;
-
+
Jim_ListLength(interp, mapListObjPtr, &numMaps);
if (numMaps % 2) {
Jim_SetResultString(interp,
value = Jim_Alloc(sizeof(Jim_Obj*)*numMaps);
resultObjPtr = Jim_NewStringObj(interp, "", 0);
for (i = 0; i < numMaps; i++) {
- Jim_Obj *eleObjPtr;
+ Jim_Obj *eleObjPtr=NULL;
Jim_ListIndex(interp, mapListObjPtr, i*2, &eleObjPtr, JIM_NONE);
key[i] = Jim_GetString(eleObjPtr, &keyLen[i]);
}
/* [string] */
-static int Jim_StringCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_StringCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int option;
Jim_SetResult(interp, objPtr);
return JIM_OK;
} else if (option == OPT_INDEX) {
- int index, len;
+ int index_t, len;
const char *str;
if (argc != 4) {
Jim_WrongNumArgs(interp, 2, argv, "string index");
return JIM_ERR;
}
- if (Jim_GetIndex(interp, argv[3], &index) != JIM_OK)
+ if (Jim_GetIndex(interp, argv[3], &index_t) != JIM_OK)
return JIM_ERR;
str = Jim_GetString(argv[2], &len);
- if (index != INT_MIN && index != INT_MAX)
- index = JimRelToAbsIndex(len, index);
- if (index < 0 || index >= len) {
+ if (index_t != INT_MIN && index_t != INT_MAX)
+ index_t = JimRelToAbsIndex(len, index_t);
+ if (index_t < 0 || index_t >= len) {
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
return JIM_OK;
} else {
- Jim_SetResult(interp, Jim_NewStringObj(interp, str + index, 1));
+ Jim_SetResult(interp, Jim_NewStringObj(interp, str + index_t, 1));
return JIM_OK;
}
} else if (option == OPT_FIRST) {
- int index = 0, l1, l2;
+ int index_t = 0, l1, l2;
const char *s1, *s2;
if (argc != 4 && argc != 5) {
s1 = Jim_GetString(argv[2], &l1);
s2 = Jim_GetString(argv[3], &l2);
if (argc == 5) {
- if (Jim_GetIndex(interp, argv[4], &index) != JIM_OK)
+ if (Jim_GetIndex(interp, argv[4], &index_t) != JIM_OK)
return JIM_ERR;
- index = JimRelToAbsIndex(l2, index);
+ index_t = JimRelToAbsIndex(l2, index_t);
}
Jim_SetResult(interp, Jim_NewIntObj(interp,
- JimStringFirst(s1, l1, s2, l2, index)));
+ JimStringFirst(s1, l1, s2, l2, index_t)));
return JIM_OK;
} else if (option == OPT_TOLOWER) {
if (argc != 3) {
}
/* [time] */
-static int Jim_TimeCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_TimeCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
long i, count = 1;
}
/* [exit] */
-static int Jim_ExitCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_ExitCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
long exitCode = 0;
}
/* [catch] */
-static int Jim_CatchCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_CatchCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int exitCode = 0;
}
/* [ref] */
-static int Jim_RefCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_RefCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc != 3 && argc != 4) {
}
/* [getref] */
-static int Jim_GetrefCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_GetrefCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Reference *refPtr;
}
/* [setref] */
-static int Jim_SetrefCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_SetrefCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
Jim_Reference *refPtr;
}
/* [collect] */
-static int Jim_CollectCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_CollectCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc != 1) {
}
/* [finalize] reference ?newValue? */
-static int Jim_FinalizeCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_FinalizeCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc != 2 && argc != 3) {
/* [info references] (list of all the references/finalizers) */
/* [rename] */
-static int Jim_RenameCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_RenameCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
const char *oldName, *newName;
}
/* [dict] */
-static int Jim_DictCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_DictCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int option;
}
/* [load] */
-static int Jim_LoadCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_LoadCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
if (argc < 2) {
}
/* [subst] */
-static int Jim_SubstCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_SubstCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int i, flags = 0;
}
/* [info] */
-static int Jim_InfoCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_InfoCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int cmd, result = JIM_OK;
};
enum {INFO_BODY, INFO_COMMANDS, INFO_EXISTS, INFO_GLOBALS, INFO_LEVEL,
INFO_LOCALS, INFO_VARS, INFO_VERSION, INFO_COMPLETE, INFO_ARGS, INFO_HOSTNAME};
-
+
if (argc < 2) {
Jim_WrongNumArgs(interp, 1, argv, "command ?args ...?");
return JIM_ERR;
!= JIM_OK) {
return JIM_ERR;
}
-
+
if (cmd == INFO_COMMANDS) {
if (argc != 2 && argc != 3) {
Jim_WrongNumArgs(interp, 2, argv, "?pattern?");
Jim_SetResult(interp, cmdPtr->argListObjPtr);
} else if (cmd == INFO_VERSION) {
char buf[(JIM_INTEGER_SPACE * 2) + 1];
- sprintf(buf, "%d.%d",
+ sprintf(buf, "%d.%d",
JIM_VERSION / 100, JIM_VERSION % 100);
Jim_SetResultString(interp, buf, -1);
} else if (cmd == INFO_COMPLETE) {
}
/* [split] */
-static int Jim_SplitCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_SplitCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
const char *str, *splitChars, *noMatchStart;
memset(objCache, 0, sizeof(objCache));
for (i = 0; i < strLen; i++) {
int c = u[i];
-
+
if (objCache[c] == NULL)
objCache[c] = Jim_NewStringObj(interp, (char*)u + i, 1);
Jim_ListAppendElement(interp, resObjPtr, objCache[c]);
}
/* [join] */
-static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_JoinCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
const char *joinStr;
resObjPtr = Jim_NewStringObj(interp, NULL, 0);
/* Split */
for (i = 0; i < listLen; i++) {
- Jim_Obj *objPtr;
+ Jim_Obj *objPtr=NULL;
Jim_ListIndex(interp, argv[1], i, &objPtr, JIM_NONE);
Jim_AppendObj(interp, resObjPtr, objPtr);
if (argc < 3) {
Jim_WrongNumArgs(interp, 1, argv, "string formatString ?varName ...?");
return JIM_ERR;
- }
+ }
if (argv[2]->typePtr != &scanFmtStringObjType)
SetScanFmtFromAny(interp, argv[2]);
if (FormatGetError(argv[2]) != 0) {
}
if (argc > 3) {
int maxPos = FormatGetMaxPos(argv[2]);
- int count = FormatGetCnvCount(argv[2]);
+ int arg_count = FormatGetCnvCount(argv[2]);
if (maxPos > argc-3) {
Jim_SetResultString(interp, "\"%n$\" argument index out of range", -1);
return JIM_ERR;
- } else if (count != 0 && count < argc-3) {
+ } else if (arg_count != 0 && arg_count < argc-3) {
Jim_SetResultString(interp, "variable is not assigned by any "
"conversion specifiers", -1);
return JIM_ERR;
- } else if (count > argc-3) {
+ } else if (arg_count > argc-3) {
Jim_SetResultString(interp, "different numbers of variable names and "
"field specifiers", -1);
return JIM_ERR;
}
- }
+ }
listPtr = Jim_ScanString(interp, argv[1], argv[2], JIM_ERRMSG);
if (listPtr == 0)
return JIM_ERR;
static int Jim_RandCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
- jim_wide min = 0, max, len, maxMul;
+ jim_wide min = 0, max =0, len, maxMul;
if (argc < 1 || argc > 3) {
Jim_WrongNumArgs(interp, 1, argv, "?min? max");
}
/* [package] */
-static int Jim_PackageCoreCommand(Jim_Interp *interp, int argc,
+static int Jim_PackageCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
int option;
int i = 0;
while (Jim_CoreCommandsTable[i].name != NULL) {
- Jim_CreateCommand(interp,
+ Jim_CreateCommand(interp,
Jim_CoreCommandsTable[i].name,
Jim_CoreCommandsTable[i].cmdProc,
NULL, NULL);
Jim_GetString(interp->result, NULL));
Jim_ListLength(interp, interp->stackTrace, &len);
for (i = len-3; i >= 0; i-= 3) {
- Jim_Obj *objPtr;
+ Jim_Obj *objPtr=NULL;
const char *proc, *file, *line;
Jim_ListIndex(interp, interp->stackTrace, i, &objPtr, JIM_NONE);
}
int
-Jim_Nvp_name2value_obj(Jim_Interp *interp,
- const Jim_Nvp *p,
- Jim_Obj *o,
+Jim_Nvp_name2value_obj(Jim_Interp *interp,
+ const Jim_Nvp *p,
+ Jim_Obj *o,
Jim_Nvp **result)
{
return Jim_Nvp_name2value(interp, p, Jim_GetString(o, NULL), result);
}
-
-int
-Jim_Nvp_name2value(Jim_Interp *interp,
- const Jim_Nvp *_p,
- const char *name,
+
+int
+Jim_Nvp_name2value(Jim_Interp *interp,
+ const Jim_Nvp *_p,
+ const char *name,
Jim_Nvp **result)
{
const Jim_Nvp *p;
if (result) {
*result = (Jim_Nvp *)(p);
}
-
+
/* found? */
if (p->name) {
return JIM_OK;
}
-int
+int
Jim_Nvp_value2name_obj(Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **result)
{
int e;;
}
-int
+int
Jim_Nvp_value2name(Jim_Interp *interp, const Jim_Nvp *_p, int value, Jim_Nvp **result)
{
const Jim_Nvp *p;
Jim_fprintf(p->interp, p->interp->cookie_stderr, "---args---\n");
for (x = 0 ; x < p->argc ; x++) {
- Jim_fprintf(p->interp, p->interp->cookie_stderr,
- "%2d) %s\n",
- x,
+ Jim_fprintf(p->interp, p->interp->cookie_stderr,
+ "%2d) %s\n",
+ x,
Jim_GetString(p->argv[x], NULL));
}
Jim_fprintf(p->interp, p->interp->cookie_stderr, "-------\n");
Jim_GetOpt_Obj(Jim_GetOptInfo *goi, Jim_Obj **puthere)
{
Jim_Obj *o;
-
- o = NULL; // failure
+
+ o = NULL; // failure
if (goi->argc) {
- // success
+ // success
o = goi->argv[0];
goi->argc -= 1;
goi->argv += 1;
int r;
Jim_Obj *o;
double _safe;
-
+
if (puthere == NULL) {
puthere = &_safe;
}
r = Jim_GetDouble(goi->interp, o, puthere);
if (r != JIM_OK) {
Jim_SetResult_sprintf(goi->interp,
- "not a number: %s",
+ "not a number: %s",
Jim_GetString(o, NULL));
}
}
return r;
}
-int Jim_GetOpt_Nvp(Jim_GetOptInfo *goi,
- const Jim_Nvp *nvp,
+int Jim_GetOpt_Nvp(Jim_GetOptInfo *goi,
+ const Jim_Nvp *nvp,
Jim_Nvp **puthere)
{
Jim_Nvp *_safe;
e = Jim_GetOpt_Obj(goi, &o);
if (e == JIM_OK) {
e = Jim_Nvp_name2value_obj(goi->interp,
- nvp,
+ nvp,
o,
puthere);
}
nvptable);
}
}
-
-int
+
+int
Jim_GetOpt_Enum(Jim_GetOptInfo *goi,
const char * const * lookup,
int *puthere)
}
return e;
}
-
+
int
}
return JIM_OK;
}
-
+
void
-Jim_SetResult_NvpUnknown(Jim_Interp *interp,
+Jim_SetResult_NvpUnknown(Jim_Interp *interp,
Jim_Obj *param_name,
Jim_Obj *param_value,
const Jim_Nvp *nvp)
nvp++;
}
}
-
+
static Jim_Obj *debug_string_obj;