chiark / gitweb /
new constv type
authorian <ian>
Thu, 25 Nov 2004 00:33:01 +0000 (00:33 +0000)
committerian <ian>
Thu, 25 Nov 2004 00:33:01 +0000 (00:33 +0000)
base/parse.c
base/tables-examples.tct
hbytes/parse.c
maskmap/maskmap.c

index 1d9123876097e82940bcb2e014a9772290322254..0fa5acdd4705d942ca158f5475e1691b5651e5ac 100644 (file)
@@ -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;
 }
index 83961304d14e359091df7fb61a6ba014ba37cb8f..267b88cf27f15d8d7bda33e2f3d46231e2fa56d3 100644 (file)
@@ -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
index 1d9123876097e82940bcb2e014a9772290322254..0fa5acdd4705d942ca158f5475e1691b5651e5ac 100644 (file)
@@ -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;
 }
index e0c7f90ee6aa1b44e27004449aba93a23755c176..1ae8439b6a3c28acac50ee6e1f729968f7e6a659 100644 (file)
@@ -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*/
 }