* 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 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
*
#include <pkgconf/jimtcl.h>
#include <stdio.h>
#include <stdlib.h>
+
+typedef CYG_ADDRWORD intptr_t;
+
#include <string.h>
#include <stdarg.h>
#include <ctype.h>
return 0;
}
-int JimStringCompare(const char *s1, int l1, const char *s2, int l2,
+static int JimStringCompare(const char *s1, int l1, const char *s2, int l2,
int nocase)
{
unsigned char *u1 = (unsigned char*) s1, *u2 = (unsigned char*) s2;
/* Search 's1' inside 's2', starting to search from char 'index' of 's2'.
* 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)
+static 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++;
return -1;
}
-int Jim_WideToString(char *buf, jim_wide wideValue)
+static int Jim_WideToString(char *buf, jim_wide wideValue)
{
const char *fmt = "%" JIM_WIDE_MODIFIER;
return sprintf(buf, fmt, wideValue);
}
-int Jim_StringToWide(const char *str, jim_wide *widePtr, int base)
+static int Jim_StringToWide(const char *str, jim_wide *widePtr, int base)
{
char *endptr;
return JIM_OK;
}
-int Jim_StringToIndex(const char *str, int *intPtr)
+static int Jim_StringToIndex(const char *str, int *intPtr)
{
char *endptr;
return JIM_REFERENCE_SPACE;
}
-int Jim_DoubleToString(char *buf, double doubleValue)
+static int Jim_DoubleToString(char *buf, double doubleValue)
{
char *s;
int len;
return len;
}
-int Jim_StringToDouble(const char *str, double *doublePtr)
+static int Jim_StringToDouble(const char *str, double *doublePtr)
{
char *endptr;
free(ptr);
}
-void *Jim_Realloc(void *ptr, int size)
+static void *Jim_Realloc(void *ptr, int size)
{
/* We allocate zero length arrayes, etc. to use a single orthogonal codepath */
if (size == 0)
return copy;
}
-char *Jim_StrDupLen(const char *s, int l)
+static char *Jim_StrDupLen(const char *s, int l)
{
char *copy = Jim_Alloc(l + 1);
/* -------------------------- hash functions -------------------------------- */
/* Thomas Wang's 32 bit Mix Function */
-unsigned int Jim_IntHashFunction(unsigned int key)
+static unsigned int Jim_IntHashFunction(unsigned int key)
{
key += ~(key << 15);
key ^= (key >> 10);
return key;
}
-/* Identity hash function for integer keys */
-unsigned int Jim_IdentityHashFunction(unsigned int key)
-{
- return key;
-}
-
/* Generic hash function (we are using to multiply by 9 and add the byte
* as Tcl) */
-unsigned int Jim_GenHashFunction(const unsigned char *buf, int len)
+static unsigned int Jim_GenHashFunction(const unsigned char *buf, int len)
{
unsigned int h = 0;
while (len--)
/* 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,
+static void JimParserInit(struct JimParserCtx *pc, const char *prg,
int len, int linenr)
{
pc->prg = prg;
static int JimParseListSep(struct JimParserCtx *pc);
static int JimParseListStr(struct JimParserCtx *pc);
-int JimParseList(struct JimParserCtx *pc)
+static int JimParseList(struct JimParserCtx *pc)
{
if (pc->len == 0) {
pc->tstart = pc->tend = pc->p;
/* Low-level string append. Use it only against objects
* of type "string". */
-void StringAppendString(Jim_Obj *objPtr, const char *str, int len)
+static void StringAppendString(Jim_Obj *objPtr, const char *str, int len)
{
int needlen;
objPtr->length += len;
}
-/* Low-level wrapper to append an object. */
-void StringAppendObj(Jim_Obj *objPtr, Jim_Obj *appendObjPtr)
-{
- int len;
- const char *str;
-
- str = Jim_GetString(appendObjPtr, &len);
- StringAppendString(objPtr, str, len);
-}
-
/* Higher level API to append strings to objects. */
void Jim_AppendString(Jim_Interp *interp, Jim_Obj *objPtr, const char *str,
int len)
return JimStringMatch(pattern, patternLen, string, stringLen, nocase);
}
-int Jim_StringCompareObj(Jim_Obj *firstObjPtr,
+static int Jim_StringCompareObj(Jim_Obj *firstObjPtr,
Jim_Obj *secondObjPtr, int nocase)
{
const char *s1, *s2;
* 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);
}
case '8':
case '9':
accum = 0;
- while (isdigit(*fmt) && (fmtLen > 0)) {
+ while (isdigit((unsigned)*fmt) && (fmtLen > 0)) {
accum = (accum * 10) + (*fmt - '0');
fmt++; fmtLen--;
}
}
}
-int qsortCompareStringPointers(const void *a, const void *b)
+static int qsortCompareStringPointers(const void *a, const void *b)
{
char * const *sa = (char * const *)a;
char * const *sb = (char * const *)b;
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);
}
return JIM_OK;
}
-ScriptObj *Jim_GetScript(Jim_Interp *interp, Jim_Obj *objPtr)
+static ScriptObj *Jim_GetScript(Jim_Interp *interp, Jim_Obj *objPtr)
{
if (objPtr->typePtr != &scriptObjType) {
SetScriptFromAny(interp, objPtr);
* object that is *guaranteed* to be in the form VARNAME(INDEX).
* The 'index' part is [subst]ituted, and is used to lookup a key inside
* the [dict]ionary contained in variable VARNAME. */
-Jim_Obj *Jim_ExpandDictSugar(Jim_Interp *interp, Jim_Obj *objPtr)
+static Jim_Obj *Jim_ExpandDictSugar(Jim_Interp *interp, Jim_Obj *objPtr)
{
Jim_Obj *varObjPtr, *keyObjPtr, *dictObjPtr, *resObjPtr;
Jim_Obj *substKeyObjPtr = NULL;
Jim_Free(val);
}
-unsigned int JimReferencesHTHashFunction(const void *key)
+static unsigned int JimReferencesHTHashFunction(const void *key)
{
/* Only the least significant bits are used. */
const jim_wide *widePtr = key;
return Jim_IntHashFunction(intValue);
}
-unsigned int JimReferencesHTDoubleHashFunction(const void *key)
-{
- /* Only the least significant bits are used. */
- const jim_wide *widePtr = key;
- unsigned int intValue = (unsigned int) *widePtr;
- return intValue; /* identity function. */
-}
-
-const void *JimReferencesHTKeyDup(void *privdata, const void *key)
+static const void *JimReferencesHTKeyDup(void *privdata, const void *key)
{
void *copy = Jim_Alloc(sizeof(jim_wide));
JIM_NOTUSED(privdata);
return copy;
}
-int JimReferencesHTKeyCompare(void *privdata, const void *key1,
+static int JimReferencesHTKeyCompare(void *privdata, const void *key1,
const void *key2)
{
JIM_NOTUSED(privdata);
return memcmp(key1, key2, sizeof(jim_wide)) == 0;
}
-void JimReferencesHTKeyDestructor(void *privdata, const void *key)
+static void JimReferencesHTKeyDestructor(void *privdata, const void *key)
{
JIM_NOTUSED(privdata);
return 0;
}
-int SetReferenceFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
+static int SetReferenceFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
{
jim_wide wideValue;
int i, len;
/* 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);
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);
/* Returns the malloc-ed representation of a string
* using backslash to quote special chars. */
-char *BackslashQuoteString(const char *s, int len, int *qlenPtr)
+static char *BackslashQuoteString(const char *s, int len, int *qlenPtr)
{
char *q = Jim_Alloc(len*2 + 1), *p;
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]) {
*
* NOTE: this function can be called only against objects
* with internal type of List. */
-void ListInsertElements(Jim_Obj *listPtr, int index, int elemc,
+static 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]);
/* Appends every element of appendListPtr into listPtr.
* Both have to be of the list type. */
-void ListAppendList(Jim_Obj *listPtr, Jim_Obj *appendListPtr)
+static void ListAppendList(Jim_Obj *listPtr, Jim_Obj *appendListPtr)
{
int i, oldLen = listPtr->internalRep.listValue.len;
int appendLen = appendListPtr->internalRep.listValue.len;
*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);
/* Returns a list composed of the elements in the specified range.
* first and start are directly accepted as Jim_Objects and
* processed for the end?-index? case. */
-Jim_Obj *Jim_ListRange(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr)
+static Jim_Obj *Jim_ListRange(Jim_Interp *interp, Jim_Obj *listObjPtr,
+ Jim_Obj *firstObjPtr, Jim_Obj *lastObjPtr)
{
int first, last;
int len, rangeLen;
*
* Keys and Values are Jim objects. */
-unsigned int JimObjectHTHashFunction(const void *key)
+static unsigned int JimObjectHTHashFunction(const void *key)
{
const char *str;
Jim_Obj *objPtr = (Jim_Obj*) key;
return h;
}
-int JimObjectHTKeyCompare(void *privdata, const void *key1, const void *key2)
+static int JimObjectHTKeyCompare(void *privdata, const void *key1, const void *key2)
{
JIM_NOTUSED(privdata);
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]) {
/* Add an element, higher-level interface for DictAddElement().
* If valueObjPtr == NULL, the key is removed if it exists. */
-int Jim_DictAddElement(Jim_Interp *interp, Jim_Obj *objPtr,
+static int Jim_DictAddElement(Jim_Interp *interp, Jim_Obj *objPtr,
Jim_Obj *keyObjPtr, Jim_Obj *valueObjPtr)
{
if (Jim_IsShared(objPtr))
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;
}
#define JIM_EXPR_OPERATORS_NUM \
(sizeof(Jim_ExprOperators)/sizeof(struct Jim_ExprOperator))
-int JimParseExpression(struct JimParserCtx *pc)
+static int JimParseExpression(struct JimParserCtx *pc)
{
/* Discard spaces and quoted newline */
while (*(pc->p) == ' ' ||
return JIM_OK;
}
-struct Jim_ExprOperator *JimExprOperatorInfo(const char *opname)
+static struct Jim_ExprOperator *JimExprOperatorInfo(const char *opname)
{
int i;
for (i = 0; i < (signed)JIM_EXPR_OPERATORS_NUM; i++)
return NULL;
}
-struct Jim_ExprOperator *JimExprOperatorInfoByOpcode(int opcode)
+static struct Jim_ExprOperator *JimExprOperatorInfoByOpcode(int opcode)
{
int i;
for (i = 0; i < (signed)JIM_EXPR_OPERATORS_NUM; i++)
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]);
}
return JIM_ERR;
}
-ExprByteCode *Jim_GetExpression(Jim_Interp *interp, Jim_Obj *objPtr)
+static ExprByteCode *Jim_GetExpression(Jim_Interp *interp, Jim_Obj *objPtr)
{
if (objPtr->typePtr != &exprObjType) {
if (SetExprFromAny(interp, objPtr) != JIM_OK)
"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:
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 */
* 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;
}
#endif /* WIN32 */
-int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName)
+static int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName)
{
Jim_Obj *libPathObjPtr;
int prefixc, i;
return JIM_ERR;
}
#else /* JIM_DYNLIB */
-int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName)
+static int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName)
{
JIM_NOTUSED(interp);
JIM_NOTUSED(pathName);
* (and increments argc by reference accordingly), performing
* expansion of the list object if 'expand' is non-zero, or
* just adding objPtr to argv if 'expand' is zero. */
-void Jim_ExpandArgument(Jim_Interp *interp, Jim_Obj ***argv,
+static void Jim_ExpandArgument(Jim_Interp *interp, Jim_Obj ***argv,
int *argcPtr, int expand, Jim_Obj *objPtr)
{
if (!expand) {
/* This method takes the string representation of an object
* as a Tcl string where to perform [subst]itution, and generates
* the pre-parsed internal representation. */
-int SetSubstFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr, int flags)
+static int SetSubstFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr, int flags)
{
int scriptTextLen;
const char *scriptText = Jim_GetString(objPtr, &scriptTextLen);
return JIM_OK;
}
-ScriptObj *Jim_GetSubst(Jim_Interp *interp, Jim_Obj *objPtr, int flags)
+static ScriptObj *Jim_GetSubst(Jim_Interp *interp, Jim_Obj *objPtr, int flags)
{
struct ScriptObj *script = Jim_GetIntRepPtr(objPtr);
JIM_REGISTER_API(CollectIfNeeded);
JIM_REGISTER_API(GetIndex);
JIM_REGISTER_API(NewListObj);
+ JIM_REGISTER_API(ListInsertElements);
JIM_REGISTER_API(ListAppendElement);
JIM_REGISTER_API(ListAppendList);
JIM_REGISTER_API(ListLength);
Jim_GetWide(interp, objPtr, &wideValueB) != JIM_OK)
{
Jim_DecrRefCount(interp, varAObjPtr);
- if (varBObjPtr)
- Jim_DecrRefCount(interp, varBObjPtr);
+ Jim_DecrRefCount(interp, varBObjPtr);
goto noopt;
}
}
/* The general purpose implementation of while starts here */
while (1) {
- int boolean, retval;
+ int local_boolean, retval;
if ((retval = Jim_GetBoolFromExpr(interp, argv[1],
- &boolean)) != JIM_OK)
+ &local_boolean)) != JIM_OK)
return retval;
- if (!boolean) break;
+ if (!local_boolean) break;
if ((retval = Jim_EvalObj(interp, argv[2])) != JIM_OK) {
switch (retval) {
case JIM_BREAK:
if ((retval = Jim_EvalObj(interp, argv[1])) != JIM_OK)
return retval;
while (1) {
- int boolean;
+ int local_boolean;
testcond:
/* Test the condition */
- if ((retval = Jim_GetBoolFromExpr(interp, argv[2], &boolean))
+ if ((retval = Jim_GetBoolFromExpr(interp, argv[2], &local_boolean))
!= JIM_OK)
return retval;
- if (!boolean) break;
+ if (!local_boolean) break;
/* Eval body */
if ((retval = Jim_EvalObj(interp, argv[4])) != JIM_OK) {
switch (retval) {
static int Jim_IfCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
- int boolean, retval, current = 1, falsebody = 0;
+ int local_boolean, retval, current = 1, falsebody = 0;
if (argc >= 3) {
while (1) {
/* Far not enough arguments given! */
if (current >= argc) goto err;
if ((retval = Jim_GetBoolFromExpr(interp,
- argv[current++], &boolean))
+ argv[current++], &local_boolean))
!= JIM_OK)
return retval;
/* There lacks something, isn't it? */
"then")) current++;
/* Tsk tsk, no then-clause? */
if (current >= argc) goto err;
- if (boolean)
+ if (local_boolean)
return Jim_EvalObj(interp, argv[current]);
/* Ok: no else-clause follows */
if (++current >= argc) {
{
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. */
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:
/* 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) {
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) {
}
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;
Jim_fprintf(interp,interp->cookie_stderr, "%s" JIM_NL,
Jim_GetString(interp->result, NULL));
Jim_ListLength(interp, interp->stackTrace, &len);
- for (i = len-3; i >= 0; i-= 3) {
+ for (i = 0; i < len; i += 3) {
Jim_Obj *objPtr=NULL;
const char *proc, *file, *line;