diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-11-13 11:09:18 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-11-18 08:07:29 +1000 |
commit | d307da4f6c6692d4cca38f38ea236219473345c4 (patch) | |
tree | dce901237fde5d8a2b91e5ef1793372059acfc5a | |
parent | 6a5a39a9c468134ff6797ced9a1d937360dac012 (diff) | |
download | jimtcl-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.c | 19 | ||||
-rw-r--r-- | jim.h | 2 |
2 files changed, 17 insertions, 4 deletions
@@ -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); @@ -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 */ |