aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-08-12 11:59:35 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:49 +1000
commit996d95360266ca6d0d6ef5e1d589d55b8dbf8a58 (patch)
tree9e888871d785af6efb715d6c04b89f3d6551d2f8 /jim.c
parent4eeb22d1eee2a3db6b852c785b8ce8de84ec6154 (diff)
downloadjimtcl-996d95360266ca6d0d6ef5e1d589d55b8dbf8a58.zip
jimtcl-996d95360266ca6d0d6ef5e1d589d55b8dbf8a58.tar.gz
jimtcl-996d95360266ca6d0d6ef5e1d589d55b8dbf8a58.tar.bz2
Minor compiler compatibility fixes and ref count fix
Don't mix declarations and code Don't try sizeof(long long) if we don't have it Object not freed on bad printf modifier in [format] Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/jim.c b/jim.c
index 906f0dd..3a7ac0e 100644
--- a/jim.c
+++ b/jim.c
@@ -2407,13 +2407,13 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
case 'u':
case 'x':
case 'X':
+ *cp++ = 'l';
+#ifdef HAVE_LONG_LONG
/* jim widevaluse are 64bit */
if (sizeof(jim_wide) == sizeof(long long)) {
*cp++ = 'l';
- *cp++ = 'l';
- } else {
- *cp++ = 'l';
}
+#endif
*cp++ = *fmt;
*cp = 0;
if (Jim_GetWide(interp, objv[0], &wideValue) == JIM_ERR) {
@@ -2430,6 +2430,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
default:
spec[0] = *fmt; spec[1] = '\0';
Jim_SetResultFormatted(interp, "bad field specifier \"%s\"", spec);
+ Jim_FreeNewObj(interp, resObjPtr);
return NULL;
}
/* force terminate */
@@ -4814,6 +4815,7 @@ void UpdateStringOfInt(struct Jim_Obj *objPtr)
int SetIntFromAny(Jim_Interp *interp, Jim_Obj *objPtr, int flags)
{
jim_wide wideValue;
+ const char *str;
if (objPtr->typePtr == &coercedDoubleObjType) {
/* Simple switcheroo */
@@ -4822,7 +4824,7 @@ int SetIntFromAny(Jim_Interp *interp, Jim_Obj *objPtr, int flags)
}
/* Get the string representation */
- const char *str = Jim_GetString(objPtr, NULL);
+ str = Jim_GetString(objPtr, NULL);
/* Try to convert into a jim_wide */
if (Jim_StringToWide(str, &wideValue, 0) != JIM_OK) {
if (flags & JIM_ERRMSG) {
@@ -4942,6 +4944,7 @@ int SetDoubleFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
*/
str = Jim_GetString(objPtr, NULL);
+#ifdef HAVE_LONG_LONG
/* Assume a 53 bit mantissa */
#define MIN_INT_IN_DOUBLE -(1LL << 53)
#define MAX_INT_IN_DOUBLE -(MIN_INT_IN_DOUBLE + 1)
@@ -4956,7 +4959,9 @@ int SetDoubleFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
objPtr->typePtr = &coercedDoubleObjType;
return JIM_OK;
}
- else if (Jim_StringToWide(str, &wideValue, 10) == JIM_OK) {
+ else
+#endif
+ if (Jim_StringToWide(str, &wideValue, 10) == JIM_OK) {
/* Managed to convert to an int, so we can use this as a cooerced double */
Jim_FreeIntRep(interp, objPtr);
objPtr->typePtr = &coercedDoubleObjType;
@@ -10719,8 +10724,8 @@ wrongargs:
listlen = Jim_ListLength(interp, argv[0]);
for (i = 0; i < listlen; i++) {
Jim_Obj *objPtr;
- Jim_ListIndex(interp, argv[0], i, &objPtr, JIM_NONE);
int eq = 0;
+ Jim_ListIndex(interp, argv[0], i, &objPtr, JIM_NONE);
switch (opt_match) {
case OPT_EXACT:
eq = Jim_StringEqObj(objPtr, argv[1], opt_nocase);