diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-05-15 15:45:57 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-05-15 15:45:57 (GMT) |
| commit | 4db805463e61965d5e4093a8481fa83f797d7085 (patch) | |
| tree | c210f321ee251364d7f43e0b13b3b088a479eb4f /generic/tclTest.c | |
| parent | 45dd8baf7657f116a83f9bf84c890fb7e0d6937a (diff) | |
| download | tcl-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.c | 43 |
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)); |
