X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=base%2Fenum.c;h=feb9e2de0a505c7167fa725f127c4110088cdbf3;hp=8041cd378a5b05f1c486f2f4049700299f91c631;hb=403ef0f3eb85708789afeec1048ad1b6a7b667f6;hpb=b78c59b29c46210ccbfc0fe4815b4e49fba8817b diff --git a/base/enum.c b/base/enum.c index 8041cd3..feb9e2d 100644 --- a/base/enum.c +++ b/base/enum.c @@ -1,13 +1,28 @@ /* + * base code for various Tcl extensions + * Copyright 2006 Ian Jackson * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301, USA. */ -#include - -#include "hbytes.h" +#include "chiark-tcl-base.h" 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) { @@ -18,12 +33,12 @@ static int enum_nt_sfa(Tcl_Interp *ip, Tcl_Obj *o) { abort(); } -Tcl_ObjType enum_nearlytype = { +Tcl_ObjType cht_enum_nearlytype = { "enum-nearly", 0, enum_nt_dup, enum_nt_ustr, enum_nt_sfa }; -Tcl_ObjType enum1_nearlytype = { +Tcl_ObjType cht_enum1_nearlytype = { "enum1-nearly", 0, enum_nt_dup, enum_nt_ustr, enum_nt_sfa }; @@ -57,13 +72,13 @@ static void appres_enum(Tcl_Interp *ip, const void *p) { Tcl_AppendResult(ip, enum_str(p), (char*)0); } -const void *enum_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o, +const void *cht_enum_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o, const void *firstentry, size_t entrysize, const char *what) { const char *supplied, *found; const char *ep; - if (o->typePtr == &enum_nearlytype && + if (o->typePtr == &cht_enum_nearlytype && o->internalRep.twoPtrValue.ptr1 == firstentry) return o->internalRep.twoPtrValue.ptr2; @@ -73,8 +88,8 @@ const void *enum_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o, ep += entrysize); if (found) { - objfreeir(o); - o->typePtr= &enum_nearlytype; + cht_objfreeir(o); + o->typePtr= &cht_enum_nearlytype; o->internalRep.twoPtrValue.ptr1= (void*)firstentry; o->internalRep.twoPtrValue.ptr2= (void*)ep; return ep; @@ -92,11 +107,11 @@ static void appres_enum1(Tcl_Interp *ip, const void *p) { Tcl_AppendResult(ip, buf, (char*)0); } -int enum1_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o, +int cht_enum1_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o, const char *opts, const char *what) { const char *supplied, *fp; - if (o->typePtr != &enum1_nearlytype || + if (o->typePtr != &cht_enum1_nearlytype || o->internalRep.twoPtrValue.ptr1 != opts) { supplied= Tcl_GetStringFromObj(o,0); assert(supplied); @@ -107,8 +122,8 @@ int enum1_lookup_cached_func(Tcl_Interp *ip, Tcl_Obj *o, return -1; } - objfreeir(o); - o->typePtr= &enum1_nearlytype; + cht_objfreeir(o); + o->typePtr= &cht_enum1_nearlytype; o->internalRep.twoPtrValue.ptr1= (void*)opts; o->internalRep.twoPtrValue.ptr2= (void*)fp; }