X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;ds=sidebyside;f=hbytes%2Fparse.c;h=266de4b6739ab96534539906450f7b0f3af264d2;hb=288c17549e4d409b60147b6eb8444e72c0eea4e2;hp=0fa5acdd4705d942ca158f5475e1691b5651e5ac;hpb=dbe2c107cd10f3e944187613b9b50f10304d0994;p=chiark-tcl.git diff --git a/hbytes/parse.c b/hbytes/parse.c index 0fa5acd..266de4b 100644 --- a/hbytes/parse.c +++ b/hbytes/parse.c @@ -1,111 +1,27 @@ /* */ -#include "tables.h" +#include "chiark_tcl_hbytes.h" -int pat_charfrom(Tcl_Interp *ip, Tcl_Obj *obj, int *val, - const char *opts, const char *what) { - *val= enum1_lookup_cached_func(ip,obj,opts,what); - if (*val==-1) return TCL_ERROR; - return TCL_OK; -} - -int pat_int(Tcl_Interp *ip, Tcl_Obj *obj, int *val) { - return Tcl_GetIntFromObj(ip, obj, val); -} - -int pat_long(Tcl_Interp *ip, Tcl_Obj *obj, long *val) { - return Tcl_GetLongFromObj(ip, obj, val); -} - -int pat_string(Tcl_Interp *ip, Tcl_Obj *obj, const char **val) { - *val= Tcl_GetString(obj); - 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; -} - -int pat_somethingv(Tcl_Interp *ip, Tcl_Obj *var, - Something_Var *sth, Tcl_ObjType *type) { +int cht_pat_hbv(Tcl_Interp *ip, Tcl_Obj *var, HBytes_Var *agg) { int rc; - Tcl_Obj *val; - - sth->var= var; - - val= Tcl_ObjGetVar2(ip,var,0,TCL_LEAVE_ERR_MSG); - if (!val) return TCL_ERROR; - - rc= Tcl_ConvertToType(ip,val,type); + rc= cht_pat_somethingv(ip,var,&agg->sth,&cht_hbytes_type); if (rc) return rc; - - if (Tcl_IsShared(val)) { - val= Tcl_DuplicateObj(val); - sth->copied= 1; - } - Tcl_InvalidateStringRep(val); - sth->obj= val; - - return TCL_OK; -} - -int pat_hbv(Tcl_Interp *ip, Tcl_Obj *var, HBytes_Var *agg) { - int rc; - rc= pat_somethingv(ip,var,&agg->sth,&hbytes_type); if (rc) return rc; agg->hb= OBJ_HBYTES(agg->sth.obj); return TCL_OK; } - -void fini_somethingv(Tcl_Interp *ip, int rc, Something_Var *sth) { - Tcl_Obj *ro; - - if (!rc) { - assert(sth->obj); - ro= Tcl_ObjSetVar2(ip,sth->var,0,sth->obj,TCL_LEAVE_ERR_MSG); - if (!ro) rc= TCL_ERROR; - } - if (rc && sth->copied) - Tcl_DecrRefCount(sth->obj); -} - -int pat_hb(Tcl_Interp *ip, Tcl_Obj *obj, HBytes_Value *val) { +int cht_pat_hb(Tcl_Interp *ip, Tcl_Obj *obj, HBytes_Value *val) { int rc; - rc= Tcl_ConvertToType(ip,obj,&hbytes_type); if (rc) return rc; + rc= Tcl_ConvertToType(ip,obj,&cht_hbytes_type); if (rc) return rc; *val= *OBJ_HBYTES(obj); return TCL_OK; } -Tcl_Obj *ret_hb(Tcl_Interp *ip, HBytes_Value val) { +Tcl_Obj *cht_ret_hb(Tcl_Interp *ip, HBytes_Value val) { Tcl_Obj *obj; obj= Tcl_NewObj(); Tcl_InvalidateStringRep(obj); *OBJ_HBYTES(obj)= val; - obj->typePtr= &hbytes_type; + obj->typePtr= &cht_hbytes_type; return obj; } - -Tcl_Obj *ret_long(Tcl_Interp *ip, long val) { - return Tcl_NewLongObj(val); -} - -Tcl_Obj *ret_string(Tcl_Interp *ip, const char *val) { - return Tcl_NewStringObj(val,-1); -}