From: ian Date: Thu, 25 Nov 2004 00:33:01 +0000 (+0000) Subject: new constv type X-Git-Tag: debian/1.1.1~123 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=commitdiff_plain;h=dbe2c107cd10f3e944187613b9b50f10304d0994 new constv type --- diff --git a/base/parse.c b/base/parse.c index 1d91238..0fa5acd 100644 --- a/base/parse.c +++ b/base/parse.c @@ -23,6 +23,23 @@ int pat_string(Tcl_Interp *ip, Tcl_Obj *obj, const char **val) { return TCL_OK; } +int pat_constv(Tcl_Interp *ip, Tcl_Obj *var, + Tcl_Obj **val_r, Tcl_ObjType *type) { + int rc; + Tcl_Obj *val; + + val= Tcl_ObjGetVar2(ip,var,0,TCL_LEAVE_ERR_MSG); + if (!val) return TCL_ERROR; + + if (type) { + rc= Tcl_ConvertToType(ip,val,type); + if (rc) return rc; + } + + *val_r= val; + return TCL_OK; +} + void init_somethingv(Something_Var *sth) { sth->obj=0; sth->var=0; sth->copied=0; } diff --git a/base/tables-examples.tct b/base/tables-examples.tct index 8396130..267b88c 100644 --- a/base/tables-examples.tct +++ b/base/tables-examples.tct @@ -5,6 +5,8 @@ Type hbv: HBytes_Var @ Init hbv @.hb=0; init_somethingv(&@.sth); Fini hbv fini_somethingv(ip, rc, &@.sth); +Type constv(Tcl_ObjType*): Tcl_Obj *@ + Type maskmapv: MaskMap_Var @ Init maskmapv @.mm=0; init_somethingv(&@.sth); Fini maskmapv fini_somethingv(ip, rc, &@.sth); @@ -37,7 +39,7 @@ Table toplevel TopLevel_Command Table maskmap MaskMap_SubCommand lookup - map maskmapv + map constv(&maskmap_type) addr hb ?def obj => obj diff --git a/hbytes/parse.c b/hbytes/parse.c index 1d91238..0fa5acd 100644 --- a/hbytes/parse.c +++ b/hbytes/parse.c @@ -23,6 +23,23 @@ int pat_string(Tcl_Interp *ip, Tcl_Obj *obj, const char **val) { return TCL_OK; } +int pat_constv(Tcl_Interp *ip, Tcl_Obj *var, + Tcl_Obj **val_r, Tcl_ObjType *type) { + int rc; + Tcl_Obj *val; + + val= Tcl_ObjGetVar2(ip,var,0,TCL_LEAVE_ERR_MSG); + if (!val) return TCL_ERROR; + + if (type) { + rc= Tcl_ConvertToType(ip,val,type); + if (rc) return rc; + } + + *val_r= val; + return TCL_OK; +} + void init_somethingv(Something_Var *sth) { sth->obj=0; sth->var=0; sth->copied=0; } diff --git a/maskmap/maskmap.c b/maskmap/maskmap.c index e0c7f90..1ae8439 100644 --- a/maskmap/maskmap.c +++ b/maskmap/maskmap.c @@ -106,8 +106,9 @@ int do_maskmap_amend(ClientData cd, Tcl_Interp *ip, } int do_maskmap_lookup(ClientData cd, Tcl_Interp *ip, - MaskMap_Var map, HBytes_Value addr, Tcl_Obj *def, + Tcl_Obj *mapo, HBytes_Value addr, Tcl_Obj *def, Tcl_Obj **result) { + /*MaskMap_Var *map= (void*)&mapo->internalRep;*/ *result= Tcl_NewIntObj(42); return TCL_OK; /*fixme*/ }