aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-11-13 11:09:18 +1000
committerSteve Bennett <steveb@workware.net.au>2011-11-18 08:07:29 +1000
commitd307da4f6c6692d4cca38f38ea236219473345c4 (patch)
treedce901237fde5d8a2b91e5ef1793372059acfc5a
parent6a5a39a9c468134ff6797ced9a1d937360dac012 (diff)
downloadjimtcl-d307da4f6c6692d4cca38f38ea236219473345c4.zip
jimtcl-d307da4f6c6692d4cca38f38ea236219473345c4.tar.gz
jimtcl-d307da4f6c6692d4cca38f38ea236219473345c4.tar.bz2
Create optimised Jim_String(), Jim_Length()
These are very common operations. Creating versions separate from Jim_GetString() saves size and speed. Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c19
-rw-r--r--jim.h2
2 files changed, 17 insertions, 4 deletions
diff --git a/jim.c b/jim.c
index 2c965a1..4d12cda 100644
--- a/jim.c
+++ b/jim.c
@@ -2155,10 +2155,23 @@ const char *Jim_GetString(Jim_Obj *objPtr, int *lenPtr)
/* Just returns the length of the object's string rep */
int Jim_Length(Jim_Obj *objPtr)
{
- int len;
+ if (objPtr->bytes == NULL) {
+ /* Invalid string repr. Generate it. */
+ JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.", objPtr->typePtr->name));
+ objPtr->typePtr->updateStringProc(objPtr);
+ }
+ return objPtr->length;
+}
- Jim_GetString(objPtr, &len);
- return len;
+/* Just returns the length of the object's string rep */
+const char *Jim_String(Jim_Obj *objPtr)
+{
+ if (objPtr->bytes == NULL) {
+ /* Invalid string repr. Generate it. */
+ JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.", objPtr->typePtr->name));
+ objPtr->typePtr->updateStringProc(objPtr);
+ }
+ return objPtr->bytes;
}
static void FreeDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *objPtr);
diff --git a/jim.h b/jim.h
index b7dfb5a..ef1adce 100644
--- a/jim.h
+++ b/jim.h
@@ -577,7 +577,6 @@ typedef struct Jim_Interp {
#define Jim_SetEmptyResult(i) Jim_SetResult(i, (i)->emptyObj)
#define Jim_GetResult(i) ((i)->result)
#define Jim_CmdPrivData(i) ((i)->cmdPrivData)
-#define Jim_String(o) Jim_GetString((o), NULL)
/* Note that 'o' is expanded only one time inside this macro,
* so it's safe to use side effects. */
@@ -692,6 +691,7 @@ JIM_EXPORT Jim_Obj * Jim_DuplicateObj (Jim_Interp *interp,
Jim_Obj *objPtr);
JIM_EXPORT const char * Jim_GetString(Jim_Obj *objPtr,
int *lenPtr);
+JIM_EXPORT const char *Jim_String(Jim_Obj *objPtr);
JIM_EXPORT int Jim_Length(Jim_Obj *objPtr);
/* string object */