summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-03-24 20:33:27 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-03-24 20:33:27 (GMT)
commitc4aa85caaac0c854f4eb03535c93bee40c6a2393 (patch)
treef174451b8acfd6d24fd8ccc33c5e6e52b3d9e90b
parentb167a9d44724e11d4bc8dec11ac4dfd778326baa (diff)
downloadtcl-c4aa85caaac0c854f4eb03535c93bee40c6a2393.zip
tcl-c4aa85caaac0c854f4eb03535c93bee40c6a2393.tar.gz
tcl-c4aa85caaac0c854f4eb03535c93bee40c6a2393.tar.bz2
Revise the "instname" Tcl_ObjType to use the routines.
-rw-r--r--generic/tclDisassemble.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/generic/tclDisassemble.c b/generic/tclDisassemble.c
index c85fe13..ecd5f38 100644
--- a/generic/tclDisassemble.c
+++ b/generic/tclDisassemble.c
@@ -804,6 +804,7 @@ TclNewInstNameObj(
objPtr->typePtr = &tclInstNameType;
objPtr->internalRep.longValue = (long) inst;
+ /* Optimized Tcl_InvalidateStringRep */
objPtr->bytes = NULL;
return objPtr;
@@ -824,19 +825,19 @@ UpdateStringOfInstName(
Tcl_Obj *objPtr)
{
int inst = objPtr->internalRep.longValue;
- char *s, buf[20];
- int len;
+ char *dst;
if ((inst < 0) || (inst > LAST_INST_OPCODE)) {
- sprintf(buf, "inst_%d", inst);
- s = buf;
+ dst = Tcl_InitStringRep(objPtr, NULL, TCL_INTEGER_SPACE + 4);
+ TclOOM(dst, TCL_INTEGER_SPACE + 4);
+ sprintf(dst, "inst_%d", inst);
+ (void) Tcl_InitStringRep(objPtr, NULL, strlen(dst));
} else {
- s = (char *) tclInstructionTable[objPtr->internalRep.longValue].name;
+ const char *s = tclInstructionTable[objPtr->internalRep.longValue].name;
+ int len = strlen(s);
+ dst = Tcl_InitStringRep(objPtr, s, len);
+ TclOOM(dst, len);
}
- len = strlen(s);
- objPtr->bytes = ckalloc(len + 1);
- memcpy(objPtr->bytes, s, len + 1);
- objPtr->length = len;
}
/*