Index: TODO =================================================================== diff -u -r39a142bba1228a228ab72054aa7a7bd64333db3c -r496dfc7bd5088b8a90f1fe532cd22336c151b06d --- TODO (.../TODO) (revision 39a142bba1228a228ab72054aa7a7bd64333db3c) +++ TODO (.../TODO) (revision 496dfc7bd5088b8a90f1fe532cd22336c151b06d) @@ -1089,6 +1089,9 @@ - the object "slot" does not appear now in the method listing per default for classes having slots +- changed __invalidateobjectparameter from a method of class + to framework primitiv ::nsf::invalidateobjectparameter + TODO: - nameing * self/current: Index: generic/gentclAPI.decls =================================================================== diff -u -rfb10f773e288e5a05cf0e04c5fd8cf0514fdf963 -r496dfc7bd5088b8a90f1fe532cd22336c151b06d --- generic/gentclAPI.decls (.../gentclAPI.decls) (revision fb10f773e288e5a05cf0e04c5fd8cf0514fdf963) +++ generic/gentclAPI.decls (.../gentclAPI.decls) (revision 496dfc7bd5088b8a90f1fe532cd22336c151b06d) @@ -159,6 +159,9 @@ {-argName "name"} {-argName "args" -type allargs} } +xotclCmd invalidateobjectparameter XOTclInvalidateObjectParameterCmd { + {-argName "class" -type class} +} xotclCmd is XOTclIsCmd { {-argName "value" -required 1 -type tclobj} {-argName "constraint" -required 1 -type tclobj} @@ -687,8 +690,6 @@ {-argName "mixin" -required 1} {-argName "guard" -required 1 -type tclobj} } -classMethod __invalidateobjectparameter XOTclCInvalidateObjectParameterMethod { -} # @method ::nx::Class#recreate # Index: generic/tclAPI.h =================================================================== diff -u -rfb10f773e288e5a05cf0e04c5fd8cf0514fdf963 -r496dfc7bd5088b8a90f1fe532cd22336c151b06d --- generic/tclAPI.h (.../tclAPI.h) (revision fb10f773e288e5a05cf0e04c5fd8cf0514fdf963) +++ generic/tclAPI.h (.../tclAPI.h) (revision 496dfc7bd5088b8a90f1fe532cd22336c151b06d) @@ -149,7 +149,6 @@ static int XOTclCCreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCDeallocMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCFilterGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); -static int XOTclCInvalidateObjectParameterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCNewMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclCRecreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); @@ -209,6 +208,7 @@ static int XOTclForwardCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclImportvarCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclInterpObjCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); +static int XOTclInvalidateObjectParameterCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclIsCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclMethodCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); static int XOTclMethodPropertyCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv []); @@ -226,7 +226,6 @@ static int XOTclCCreateMethod(Tcl_Interp *interp, XOTclClass *cl, CONST char *name, int objc, Tcl_Obj *CONST objv[]); static int XOTclCDeallocMethod(Tcl_Interp *interp, XOTclClass *cl, Tcl_Obj *object); static int XOTclCFilterGuardMethod(Tcl_Interp *interp, XOTclClass *cl, CONST char *filter, Tcl_Obj *guard); -static int XOTclCInvalidateObjectParameterMethod(Tcl_Interp *interp, XOTclClass *cl); static int XOTclCMixinGuardMethod(Tcl_Interp *interp, XOTclClass *cl, CONST char *mixin, Tcl_Obj *guard); static int XOTclCNewMethod(Tcl_Interp *interp, XOTclClass *cl, XOTclObject *withChildof, int nobjc, Tcl_Obj *CONST nobjv[]); static int XOTclCRecreateMethod(Tcl_Interp *interp, XOTclClass *cl, Tcl_Obj *name, int objc, Tcl_Obj *CONST objv[]); @@ -286,6 +285,7 @@ static int XOTclForwardCmd(Tcl_Interp *interp, XOTclObject *object, int withPer_object, Tcl_Obj *method, Tcl_Obj *withDefault, int withEarlybinding, Tcl_Obj *withMethodprefix, int withObjscope, Tcl_Obj *withOnerror, int withVerbose, Tcl_Obj *target, int nobjc, Tcl_Obj *CONST nobjv[]); static int XOTclImportvarCmd(Tcl_Interp *interp, XOTclObject *object, int nobjc, Tcl_Obj *CONST nobjv[]); static int XOTclInterpObjCmd(Tcl_Interp *interp, CONST char *name, int objc, Tcl_Obj *CONST objv[]); +static int XOTclInvalidateObjectParameterCmd(Tcl_Interp *interp, XOTclClass *class); static int XOTclIsCmd(Tcl_Interp *interp, Tcl_Obj *value, Tcl_Obj *constraint, Tcl_Obj *withHasmixin, Tcl_Obj *withType, Tcl_Obj *arg); static int XOTclMethodCmd(Tcl_Interp *interp, XOTclObject *object, int withInner_namespace, int withPer_object, int withPublic, Tcl_Obj *name, Tcl_Obj *args, Tcl_Obj *body, Tcl_Obj *withPrecondition, Tcl_Obj *withPostcondition); static int XOTclMethodPropertyCmd(Tcl_Interp *interp, XOTclObject *object, int withPer_object, Tcl_Obj *methodName, int methodproperty, Tcl_Obj *value); @@ -304,7 +304,6 @@ XOTclCCreateMethodIdx, XOTclCDeallocMethodIdx, XOTclCFilterGuardMethodIdx, - XOTclCInvalidateObjectParameterMethodIdx, XOTclCMixinGuardMethodIdx, XOTclCNewMethodIdx, XOTclCRecreateMethodIdx, @@ -364,6 +363,7 @@ XOTclForwardCmdIdx, XOTclImportvarCmdIdx, XOTclInterpObjCmdIdx, + XOTclInvalidateObjectParameterCmdIdx, XOTclIsCmdIdx, XOTclMethodCmdIdx, XOTclMethodPropertyCmdIdx, @@ -457,25 +457,6 @@ } static int -XOTclCInvalidateObjectParameterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { - parseContext pc; - XOTclClass *cl = XOTclObjectToClass(clientData); - if (!cl) return XOTclObjErrType(interp, objv[0], "Class", ""); - if (ArgumentParse(interp, objc, objv, (XOTclObject *) cl, objv[0], - method_definitions[XOTclCInvalidateObjectParameterMethodIdx].paramDefs, - method_definitions[XOTclCInvalidateObjectParameterMethodIdx].nrParameters, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { - - - parseContextRelease(&pc); - return XOTclCInvalidateObjectParameterMethod(interp, cl); - - } -} - -static int XOTclCMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; XOTclClass *cl = XOTclObjectToClass(clientData); @@ -1656,6 +1637,24 @@ } static int +XOTclInvalidateObjectParameterCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + parseContext pc; + + if (ArgumentParse(interp, objc, objv, NULL, objv[0], + method_definitions[XOTclInvalidateObjectParameterCmdIdx].paramDefs, + method_definitions[XOTclInvalidateObjectParameterCmdIdx].nrParameters, + &pc) != TCL_OK) { + return TCL_ERROR; + } else { + XOTclClass *class = (XOTclClass *)pc.clientData[0]; + + parseContextRelease(&pc); + return XOTclInvalidateObjectParameterCmd(interp, class); + + } +} + +static int XOTclIsCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { parseContext pc; @@ -1915,9 +1914,6 @@ {"filter", 1, 0, convertToString}, {"guard", 1, 0, convertToTclobj}} }, -{"::nsf::cmd::Class::__invalidateobjectparameter", XOTclCInvalidateObjectParameterMethodStub, 0, { - } -}, {"::nsf::cmd::Class::mixinguard", XOTclCMixinGuardMethodStub, 2, { {"mixin", 1, 0, convertToString}, {"guard", 1, 0, convertToTclobj}} @@ -2185,6 +2181,9 @@ {"name", 0, 0, convertToString}, {"args", 0, 0, convertToNothing}} }, +{"::nsf::invalidateobjectparameter", XOTclInvalidateObjectParameterCmdStub, 1, { + {"class", 0, 0, convertToClass}} +}, {"::nsf::is", XOTclIsCmdStub, 5, { {"value", 1, 0, convertToTclobj}, {"constraint", 1, 0, convertToTclobj}, Index: generic/xotcl.c =================================================================== diff -u -r39a142bba1228a228ab72054aa7a7bd64333db3c -r496dfc7bd5088b8a90f1fe532cd22336c151b06d --- generic/xotcl.c (.../xotcl.c) (revision 39a142bba1228a228ab72054aa7a7bd64333db3c) +++ generic/xotcl.c (.../xotcl.c) (revision 496dfc7bd5088b8a90f1fe532cd22336c151b06d) @@ -210,7 +210,7 @@ static XOTclCallStackContent *CallStackGetFrame(Tcl_Interp *interp, Tcl_CallFrame **framePtrPtr); XOTCLINLINE static void CallStackDoDestroy(Tcl_Interp *interp, XOTclObject *object); -static int XOTclCInvalidateObjectParameterMethod(Tcl_Interp *interp, XOTclClass *cl); +static int XOTclInvalidateObjectParameterCmd(Tcl_Interp *interp, XOTclClass *cl); static int ProcessMethodArguments(parseContext *pcPtr, Tcl_Interp *interp, XOTclObject *object, int pushFrame, XOTclParamDefs *paramDefs, CONST char *methodName, int objc, Tcl_Obj *CONST objv[]); @@ -3938,7 +3938,7 @@ MixinResetOrderForInstances(interp, ncl); /* this place seems to be sufficient to invalidate the computed object parameter definitions */ /*fprintf(stderr, "MixinInvalidateObjOrders via class mixin %s calls ifd invalidate \n", className(ncl));*/ - XOTclCInvalidateObjectParameterMethod(interp, ncl); + XOTclInvalidateObjectParameterCmd(interp, ncl); } } Tcl_DeleteHashTable(commandTable); @@ -11322,6 +11322,19 @@ return TCL_OK; } +/* +xotclCmd invalidateobjectparameter XOTclInvalidateObjectParameterCmd { + {-argName "class" -type class} +} +*/ +static int XOTclInvalidateObjectParameterCmd(Tcl_Interp *interp, XOTclClass *cl) { + if (cl->parsedParamPtr) { + /*fprintf(stderr, " %s invalidate %p\n", className(cl), cl->parsedParamPtr);*/ + ParsedParamFree(cl->parsedParamPtr); + cl->parsedParamPtr = NULL; + } + return TCL_OK; +} /* xotclCmd is XOTclIsCmd { @@ -12657,7 +12670,7 @@ * e) when slots are removed * * When slot defaults or types are changed, the slots have to - * perform a manual "$domain invalidateobjectparameter" + * perform a manual "::nsf::invalidateobjectparameter $domain" */ /* @@ -13630,15 +13643,6 @@ mixin, " on ", className(cl), (char *) NULL); } -static int XOTclCInvalidateObjectParameterMethod(Tcl_Interp *interp, XOTclClass *cl) { - if (cl->parsedParamPtr) { - /*fprintf(stderr, " %s invalidate %p\n", className(cl), cl->parsedParamPtr);*/ - ParsedParamFree(cl->parsedParamPtr); - cl->parsedParamPtr = NULL; - } - return TCL_OK; -} - static int RecreateObject(Tcl_Interp *interp, XOTclClass *class, XOTclObject *object, int objc, Tcl_Obj *CONST objv[]) { int result; Index: library/lib/test.tcl =================================================================== diff -u -rba82e95493711eb36cadc579cfa27cf934120b58 -r496dfc7bd5088b8a90f1fe532cd22336c151b06d --- library/lib/test.tcl (.../test.tcl) (revision ba82e95493711eb36cadc579cfa27cf934120b58) +++ library/lib/test.tcl (.../test.tcl) (revision 496dfc7bd5088b8a90f1fe532cd22336c151b06d) @@ -62,7 +62,7 @@ if {[info exists value]} { #[[current] slot $name] default $value :slot $name default $value - :__invalidateobjectparameter + ::nsf::invalidateobjectparameter [::nsf::current object] } else { return [:slot $name default] } Index: library/nx/nx.tcl =================================================================== diff -u -rd56697c9bad9703c7d627479b80201ab9cfee09e -r496dfc7bd5088b8a90f1fe532cd22336c151b06d --- library/nx/nx.tcl (.../nx.tcl) (revision d56697c9bad9703c7d627479b80201ab9cfee09e) +++ library/nx/nx.tcl (.../nx.tcl) (revision 496dfc7bd5088b8a90f1fe532cd22336c151b06d) @@ -590,8 +590,8 @@ } } - #puts stderr "Bootstrapslot for $class calls __invalidateobjectparameter" - $class __invalidateobjectparameter + #puts stderr "Bootstrapslot for $class calls invalidateobjectparameter" + ::nsf::invalidateobjectparameter $class } ############################################ @@ -703,7 +703,7 @@ ObjectParameterSlot public method destroy {} { if {${:domain} ne "" && [::nsf::objectproperty ${:domain} class]} { - ${:domain} __invalidateobjectparameter + ::nsf::invalidateobjectparameter ${:domain} } ::nsf::next } @@ -717,7 +717,7 @@ set :methodname ${:name} } if {[::nsf::objectproperty ${:domain} class]} { - ${:domain} __invalidateobjectparameter + ::nsf::invalidateobjectparameter ${:domain} } if {${:per-object} && [info exists :default] } { ::nsf::setvar ${:domain} ${:name} ${:default} @@ -742,7 +742,7 @@ # # Invalidate previously defined object parameter. - MetaSlot __invalidateobjectparameter + ::nsf::invalidateobjectparameter MetaSlot # Provide the a slot based mechanism for building an object # configuration interface from slot definitions @@ -1015,7 +1015,7 @@ ############################################ # Attribute slots ############################################ - MetaSlot __invalidateobjectparameter + ::nsf::invalidateobjectparameter MetaSlot # @object ::nx::Attribute #