summaryrefslogtreecommitdiffstats
path: root/generic/tclTest.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-05-15 15:45:57 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-05-15 15:45:57 (GMT)
commit4db805463e61965d5e4093a8481fa83f797d7085 (patch)
treec210f321ee251364d7f43e0b13b3b088a479eb4f /generic/tclTest.c
parent45dd8baf7657f116a83f9bf84c890fb7e0d6937a (diff)
downloadtcl-4db805463e61965d5e4093a8481fa83f797d7085.zip
tcl-4db805463e61965d5e4093a8481fa83f797d7085.tar.gz
tcl-4db805463e61965d5e4093a8481fa83f797d7085.tar.bz2
Backport test improvements from 9.0
Diffstat (limited to 'generic/tclTest.c')
-rw-r--r--generic/tclTest.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 6ab1979..ef9997a 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -1020,7 +1020,7 @@ AsyncHandlerProc(
TclFormatInt(string, code);
listArgv[0] = asyncPtr->command;
- listArgv[1] = Tcl_GetString(Tcl_GetObjResult(interp));
+ listArgv[1] = Tcl_GetStringResult(interp);
listArgv[2] = string;
listArgv[3] = NULL;
cmd = Tcl_Merge(3, listArgv);
@@ -1116,20 +1116,33 @@ TestcmdinfoObjCmd(
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
+ static const char *const subcmds[] = {
+ "create", "delete", "get", "modify", NULL
+ };
+ enum options {
+ CMDINFO_CREATE, CMDINFO_DELETE, CMDINFO_GET, CMDINFO_MODIFY
+ } idx;
Tcl_CmdInfo info;
if (objc != 3) {
Tcl_WrongNumArgs(interp, 1, objv, "command arg");
return TCL_ERROR;
}
- if (strcmp(Tcl_GetString(objv[1]), "create") == 0) {
- Tcl_CreateCommand(interp, Tcl_GetString(objv[2]), CmdProc1, (void *) "original",
- CmdDelProc1);
- } else if (strcmp(Tcl_GetString(objv[1]), "delete") == 0) {
+ if (Tcl_GetIndexFromObj(interp, objv[1], subcmds, "option", 0,
+ &idx) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ switch (idx) {
+ case CMDINFO_CREATE:
+ Tcl_CreateCommand(interp, Tcl_GetString(objv[2]), CmdProc1,
+ (void *)"original", CmdDelProc1);
+ break;
+ case CMDINFO_DELETE:
Tcl_DStringInit(&delString);
Tcl_DeleteCommand(interp, Tcl_GetString(objv[2]));
Tcl_DStringResult(interp, &delString);
- } else if (strcmp(Tcl_GetString(objv[1]), "get") == 0) {
+ break;
+ case CMDINFO_GET:
if (Tcl_GetCommandInfo(interp, Tcl_GetString(objv[2]), &info) ==0) {
Tcl_AppendResult(interp, "??", NULL);
return TCL_OK;
@@ -1153,12 +1166,17 @@ TestcmdinfoObjCmd(
Tcl_AppendResult(interp, " unknown", NULL);
}
Tcl_AppendResult(interp, " ", info.namespacePtr->fullName, NULL);
- if (info.isNativeObjectProc) {
+ if (info.isNativeObjectProc == 0) {
+ Tcl_AppendResult(interp, " stringProc", NULL);
+ } else if (info.isNativeObjectProc == 1) {
Tcl_AppendResult(interp, " nativeObjectProc", NULL);
} else {
- Tcl_AppendResult(interp, " stringProc", NULL);
+ Tcl_SetObjResult(interp, Tcl_ObjPrintf("Invalid isNativeObjectProc value %d",
+ info.isNativeObjectProc));
+ return TCL_ERROR;
}
- } else if (strcmp(Tcl_GetString(objv[1]), "modify") == 0) {
+ break;
+ case CMDINFO_MODIFY:
info.proc = CmdProc2;
info.clientData = (void *) "new_command_data";
info.objProc = NULL;
@@ -1170,10 +1188,7 @@ TestcmdinfoObjCmd(
} else {
Tcl_SetObjResult(interp, Tcl_NewWideIntObj(1));
}
- } else {
- Tcl_AppendResult(interp, "bad option \"", Tcl_GetString(objv[1]),
- "\": must be create, delete, get, or modify", NULL);
- return TCL_ERROR;
+ break;
}
return TCL_OK;
@@ -7627,7 +7642,7 @@ TestUtfNextCmd(
}
bytes = Tcl_GetStringFromObj(objv[1], &numBytes);
- if (numBytes + 4U > sizeof(buffer)) {
+ if ((size_t)numBytes > sizeof(buffer) - 4) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"\"testutfnext\" can only handle %" TCL_Z_MODIFIER "u bytes",
sizeof(buffer) - 4));