Index: generic/tcldom.c ================================================================== --- generic/tcldom.c +++ generic/tcldom.c @@ -80,11 +80,14 @@ #define MAX_XSLT_APPLY_DEPTH 3000 #define SetResult(str) Tcl_ResetResult(interp); \ Tcl_SetStringObj(Tcl_GetObjResult(interp), (str), -1) -#define SetIntResult(i) Tcl_ResetResult(interp); \ +#define SetResult3(str1,str2,str3) Tcl_ResetResult(interp); \ + Tcl_AppendResult(interp, (str1), (str2), (str3), NULL) + +#define SetIntResult(i) Tcl_ResetResult(interp); \ Tcl_SetIntObj(Tcl_GetObjResult(interp), (i)) #define SetDoubleResult(d) Tcl_ResetResult(interp); \ Tcl_SetDoubleObj(Tcl_GetObjResult(interp), (d)) @@ -613,25 +616,26 @@ } nodeName = Tcl_GetString(objPtr); if (strncmp(nodeName, "domNode", 7)) { if (interp) { - SetResult("parameter not a domNode!"); + SetResult3("Parameter \"", nodeName, "\" is not a domNode."); return TCL_ERROR; } } if (sscanf(&nodeName[7], "%p%1c", &node, &eolcheck) != 1) { if (!Tcl_GetCommandInfo(interp, nodeName, &cmdInfo)) { if (interp) { - SetResult("parameter not a domNode!"); + SetResult3("Parameter \"", nodeName, "\" is not a domNode."); return TCL_ERROR; } } if ( (cmdInfo.isNativeObjectProc == 0) || (cmdInfo.objProc != (Tcl_ObjCmdProc*)tcldom_NodeObjCmd)) { if (interp) { - SetResult("parameter not a domNode object command"); + SetResult3("Parameter \"", nodeName, "\" is not a domNode" + " object command"); return TCL_ERROR; } } node = (domNode*)cmdInfo.objClientData; } @@ -1086,21 +1090,22 @@ return NULL; } nodeName = Tcl_GetString(nodeObj); if (strncmp(nodeName, "domNode", 7)) { - SetResult("parameter not a domNode!"); + SetResult3("Parameter \"", nodeName, "\" is not a domNode."); return NULL; } if (sscanf(&nodeName[7], "%p%1c", &node, &eolcheck) != 1) { if (!Tcl_GetCommandInfo(interp, nodeName, &cmdInfo)) { - SetResult("parameter not a domNode!"); + SetResult3("Parameter \"", nodeName, "\" is not a domNode."); return NULL; } if ( (cmdInfo.isNativeObjectProc == 0) || (cmdInfo.objProc != (Tcl_ObjCmdProc*)tcldom_NodeObjCmd)) { - SetResult("parameter not a domNode object command!"); + SetResult3("Parameter \"", nodeName, "\" is not a domNode" + " object command."); return NULL; } node = (domNode*)cmdInfo.objClientData; } Index: tests/dom.test ================================================================== --- tests/dom.test +++ tests/dom.test @@ -1694,11 +1694,11 @@ set result [catch {domNode $elem asList} errMsg] lappend result $errMsg domDoc $doc delete dom setObjectCommands automatic set result -} {1 {parameter not a domNode!}} +} {1 {Parameter "" is not a domNode.}} catch {namespace delete nodeCmds} namespace eval nodeCmds { dom createNodeCmd elementNode e1 Index: tests/domNode.test ================================================================== --- tests/domNode.test +++ tests/domNode.test @@ -2416,11 +2416,11 @@ } {1} test domNode-30.3 {precedes} { set result [catch {$root precedes notaNode} errMsg] lappend result $errMsg -} {1 {parameter not a domNode!}} +} {1 {Parameter "notaNode" is not a domNode.}} test domNode-30.4 {precedes} { set firstChild [$root firstChild] $root precedes $firstChild } {1}