X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=base%2Fparse.c;h=035e53122bd0a6c51c803569b3df29f2ebad1aa1;hp=1d9123876097e82940bcb2e014a9772290322254;hb=82f88c53ddb84e42c770c23feb9bb0ee18341188;hpb=20f8f9dd8dcdc4b5c68331c8015c18eaf1813360 diff --git a/base/parse.c b/base/parse.c index 1d91238..035e531 100644 --- a/base/parse.c +++ b/base/parse.c @@ -1,33 +1,50 @@ /* */ -#include "tables.h" +#include "chiark-tcl-base.h" -int pat_charfrom(Tcl_Interp *ip, Tcl_Obj *obj, int *val, +int cht_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); + *val= cht_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) { +int cht_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) { +int cht_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) { +int cht_pat_string(Tcl_Interp *ip, Tcl_Obj *obj, const char **val) { *val= Tcl_GetString(obj); return TCL_OK; } -void init_somethingv(Something_Var *sth) { +int cht_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 cht_init_somethingv(Something_Var *sth) { sth->obj=0; sth->var=0; sth->copied=0; } -int pat_somethingv(Tcl_Interp *ip, Tcl_Obj *var, +int cht_pat_somethingv(Tcl_Interp *ip, Tcl_Obj *var, Something_Var *sth, Tcl_ObjType *type) { int rc; Tcl_Obj *val; @@ -50,14 +67,7 @@ int pat_somethingv(Tcl_Interp *ip, Tcl_Obj *var, 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) { +void cht_fini_somethingv(Tcl_Interp *ip, int rc, Something_Var *sth) { Tcl_Obj *ro; if (!rc) { @@ -69,26 +79,10 @@ void fini_somethingv(Tcl_Interp *ip, int rc, Something_Var *sth) { Tcl_DecrRefCount(sth->obj); } -int pat_hb(Tcl_Interp *ip, Tcl_Obj *obj, HBytes_Value *val) { - int rc; - rc= Tcl_ConvertToType(ip,obj,&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 *obj; - obj= Tcl_NewObj(); - Tcl_InvalidateStringRep(obj); - *OBJ_HBYTES(obj)= val; - obj->typePtr= &hbytes_type; - return obj; -} - -Tcl_Obj *ret_long(Tcl_Interp *ip, long val) { +Tcl_Obj *cht_ret_long(Tcl_Interp *ip, long val) { return Tcl_NewLongObj(val); } -Tcl_Obj *ret_string(Tcl_Interp *ip, const char *val) { +Tcl_Obj *cht_ret_string(Tcl_Interp *ip, const char *val) { return Tcl_NewStringObj(val,-1); }