X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;ds=sidebyside;f=base%2Fenum.c;h=e3fa041b6d621875909bb06c84a0e23011555785;hb=7419270cc04e1d026b31838c527cf051550a2add;hp=a4e9de7ff9ad0f0d6d686f97f1c049023db2ccec;hpb=b740135c3efcb63e0c7741384e5fa8ff229d2919;p=chiark-tcl.git diff --git a/base/enum.c b/base/enum.c index a4e9de7..e3fa041 100644 --- a/base/enum.c +++ b/base/enum.c @@ -8,6 +8,7 @@ static void enum_nt_dup(Tcl_Obj *src, Tcl_Obj *dup) { dup->internalRep= src->internalRep; + dup->typePtr= src->typePtr; } static void enum_nt_ustr(Tcl_Obj *o) { @@ -28,6 +29,35 @@ Tcl_ObjType enum1_nearlytype = { 0, enum_nt_dup, enum_nt_ustr, enum_nt_sfa }; +static void report_bad(Tcl_Interp *ip, const char *what, const char *supplied, + const void *first, size_t each, + int (*isvalid)(const void *entry), + void (*appres)(Tcl_Interp *ip, const void *entry)) { + int count, i; + const Byte *entry; + + for (entry=first; isvalid(entry); entry+=each); + count= (entry - (const Byte*)first) / each; + + Tcl_ResetResult(ip); + Tcl_AppendResult(ip, "bad ",what," \"",supplied,"\": must be",(char*)0); + + for (i=0, entry=first; i