diff options
Diffstat (limited to 'generic/tclStringObj.c')
-rw-r--r-- | generic/tclStringObj.c | 85 |
1 files changed, 50 insertions, 35 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 0b2cdb2..802e94a 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -33,7 +33,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStringObj.c,v 1.44 2005/09/13 21:23:51 dgp Exp $ */ + * RCS: @(#) $Id: tclStringObj.c,v 1.45 2005/09/14 03:46:50 dgp Exp $ */ #include "tclInt.h" @@ -53,8 +53,10 @@ static void AppendUtfToUtfRep _ANSI_ARGS_((Tcl_Obj *objPtr, CONST char *bytes, int numBytes)); static void FillUnicodeRep _ANSI_ARGS_((Tcl_Obj *objPtr)); static int FormatObjVA _ANSI_ARGS_((Tcl_Interp *interp, + Tcl_Obj *objPtr, CONST char *format, va_list argList)); static int ObjPrintfVA _ANSI_ARGS_((Tcl_Interp *interp, + Tcl_Obj *objPtr, CONST char *format, va_list argList)); static void FreeStringInternalRep _ANSI_ARGS_((Tcl_Obj *objPtr)); static void DupStringInternalRep _ANSI_ARGS_((Tcl_Obj *objPtr, @@ -2214,23 +2216,13 @@ TclAppendFormattedObjs(interp, baseObj, format, objc, objv) */ static int -FormatObjVA(interp, argList) - Tcl_Interp *interp; - va_list argList; +FormatObjVA(Tcl_Interp *interp, + Tcl_Obj *objPtr, + CONST char *format, + va_list argList) { int code, objc; Tcl_Obj **objv, *element, *list = Tcl_NewObj(); - CONST char *format; - Tcl_Obj *objPtr = va_arg(argList, Tcl_Obj *); - - if (objPtr == NULL) { - Tcl_Panic("TclFormatObj: no Tcl_Obj to append to"); - } - - format = va_arg(argList, CONST char *); - if (format == NULL) { - Tcl_Panic("TclFormatObj: no format string argument"); - } Tcl_IncrRefCount(list); element = va_arg(argList, Tcl_Obj *); @@ -2259,13 +2251,13 @@ FormatObjVA(interp, argList) */ int -TclFormatObj(Tcl_Interp *interp, ...) +TclFormatObj(Tcl_Interp *interp, Tcl_Obj *objPtr, CONST char *format, ...) { va_list argList; int result; - va_start(argList, interp); - result = FormatObjVA(interp, argList); + va_start(argList, format); + result = FormatObjVA(interp, objPtr, format, argList); va_end(argList); return result; } @@ -2283,24 +2275,17 @@ TclFormatObj(Tcl_Interp *interp, ...) */ static int -ObjPrintfVA(interp, argList) - Tcl_Interp *interp; - va_list argList; +ObjPrintfVA( + Tcl_Interp *interp, + Tcl_Obj *objPtr, + CONST char *format, + va_list argList) { int code, objc; Tcl_Obj **objv, *list = Tcl_NewObj(); - CONST char *format, *p; - Tcl_Obj *objPtr = va_arg(argList, Tcl_Obj *); - - if (objPtr == NULL) { - Tcl_Panic("TclObjPrintf: no Tcl_Obj to append to"); - } - - p = format = va_arg(argList, CONST char *); - if (format == NULL) { - Tcl_Panic("TclObjPrintf: no format string argument"); - } + CONST char *p; + p = format; Tcl_IncrRefCount(list); while (*p != '\0') { int size = 0; @@ -2384,18 +2369,48 @@ ObjPrintfVA(interp, argList) */ int -TclObjPrintf(Tcl_Interp *interp, ...) +TclObjPrintf(Tcl_Interp *interp, Tcl_Obj *objPtr, CONST char *format, ...) { va_list argList; int result; - va_start(argList, interp); - result = ObjPrintfVA(interp, argList); + va_start(argList, format); + result = ObjPrintfVA(interp, objPtr, format, argList); va_end(argList); return result; } /* + *---------------------------------------------------------------------- + * + * TclFormatToErrorInfo -- + * + * Results: + * + * Side effects: + * + *---------------------------------------------------------------------- + */ + +int +TclFormatToErrorInfo(Tcl_Interp *interp, CONST char *format, ...) +{ + int code; + va_list argList; + Tcl_Obj *objPtr = Tcl_NewObj(); + + va_start(argList, format); + code = ObjPrintfVA(interp, objPtr, format, argList); + va_end(argList); + if (code != TCL_OK) { + return code; + } + TclAppendObjToErrorInfo(interp, objPtr); + Tcl_DecrRefCount(objPtr); + return TCL_OK; +} + +/* *--------------------------------------------------------------------------- * * FillUnicodeRep -- |