Index: generic/nsfAPI.h =================================================================== diff -u -N -rcad3e31c72e3d35d75e67c8ceb7f6a1a775336e1 -rf31c1a01c6a389f693b8db0f2204cbb46180fef1 --- generic/nsfAPI.h (.../nsfAPI.h) (revision cad3e31c72e3d35d75e67c8ceb7f6a1a775336e1) +++ generic/nsfAPI.h (.../nsfAPI.h) (revision f31c1a01c6a389f693b8db0f2204cbb46180fef1) @@ -168,6 +168,19 @@ return result; } +enum ForwardpropertyIdx {ForwardpropertyNULL, ForwardpropertyPrefixIdx, ForwardpropertyTargetIdx, ForwardpropertyVerboseIdx}; + +static int ConvertToForwardproperty(Tcl_Interp *interp, Tcl_Obj *objPtr, Nsf_Param const *pPtr, + ClientData *clientData, Tcl_Obj **outObjPtr) { + int index, result; + static const char *opts[] = {"prefix", "target", "verbose", NULL}; + (void)pPtr; + result = Tcl_GetIndexFromObj(interp, objPtr, opts, "forwardProperty", 0, &index); + *clientData = (ClientData) INT2PTR(index + 1); + *outObjPtr = objPtr; + return result; +} + enum ProtectionIdx {ProtectionNULL, ProtectionCall_protectedIdx, ProtectionRedefine_protectedIdx, ProtectionNoneIdx}; static int ConvertToProtection(Tcl_Interp *interp, Tcl_Obj *objPtr, Nsf_Param const *pPtr, @@ -271,6 +284,7 @@ {ConvertToMethodproperty, "class-only|call-private|call-protected|redefine-protected|returns"}, {ConvertToRelationtype, "object-mixin|class-mixin|object-filter|class-filter|class|superclass|rootclass"}, {ConvertToSource, "all|application|system"}, + {ConvertToForwardproperty, "prefix|target|verbose"}, {ConvertToConfigureoption, "debug|dtrace|filter|profile|trace|softrecreate|objectsystems|keepcmds|checkresults|checkarguments"}, {ConvertToObjectproperty, "initialized|class|rootmetaclass|rootclass|volatile|slotcontainer|hasperobjectslots|keepcallerself|perobjectdispatch"}, {ConvertToAssertionsubcmd, "check|object-invar|class-invar"}, @@ -281,7 +295,7 @@ /* just to define the symbol */ -static Nsf_methodDefinition method_definitions[111]; +static Nsf_methodDefinition method_definitions[112]; static const char *method_command_namespace_names[] = { "::nsf::methods::object::info", @@ -357,6 +371,8 @@ NSF_nonnull(2) NSF_nonnull(4); static int NsfFinalizeCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST* objv) NSF_nonnull(2) NSF_nonnull(4); +static int NsfForwardPropertyCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST* objv) + NSF_nonnull(2) NSF_nonnull(4); static int NsfInterpObjCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST* objv) NSF_nonnull(2) NSF_nonnull(4); static int NsfIsCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST* objv) @@ -578,6 +594,8 @@ NSF_nonnull(1) NSF_nonnull(2) NSF_nonnull(5); static int NsfFinalizeCmd(Tcl_Interp *interp, int withKeepvars) NSF_nonnull(1); +static int NsfForwardPropertyCmd(Tcl_Interp *interp, NsfObject *object, int withPer_object, Tcl_Obj *methodName, int forwardProperty, Tcl_Obj *value) + NSF_nonnull(1) NSF_nonnull(2) NSF_nonnull(4); static int NsfInterpObjCmd(Tcl_Interp *interp, const char *name, int objc, Tcl_Obj *CONST* objv) NSF_nonnull(1) NSF_nonnull(2); static int NsfIsCmd(Tcl_Interp *interp, int withComplain, int withConfigure, const char *withName, Tcl_Obj *constraint, Tcl_Obj *value) @@ -766,6 +784,7 @@ NsfDirectDispatchCmdIdx, NsfDispatchCmdIdx, NsfFinalizeCmdIdx, + NsfForwardPropertyCmdIdx, NsfInterpObjCmdIdx, NsfIsCmdIdx, NsfMethodAliasCmdIdx, @@ -1716,6 +1735,30 @@ } static int +NsfForwardPropertyCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST* objv) { + ParseContext pc; + (void)clientData; + + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], + method_definitions[NsfForwardPropertyCmdIdx].paramDefs, + method_definitions[NsfForwardPropertyCmdIdx].nrParameters, 0, NSF_ARGPARSE_BUILTIN, + &pc) == TCL_OK)) { + NsfObject *object = (NsfObject *)pc.clientData[0]; + int withPer_object = (int )PTR2INT(pc.clientData[1]); + Tcl_Obj *methodName = (Tcl_Obj *)pc.clientData[2]; + int forwardProperty = (int )PTR2INT(pc.clientData[3]); + Tcl_Obj *value = (Tcl_Obj *)pc.clientData[4]; + + assert(pc.status == 0); + return NsfForwardPropertyCmd(interp, object, withPer_object, methodName, forwardProperty, value); + + } else { + + return TCL_ERROR; + } +} + +static int NsfInterpObjCmdStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST* objv) { ParseContext pc; (void)clientData; @@ -3402,7 +3445,7 @@ } } -static Nsf_methodDefinition method_definitions[111] = { +static Nsf_methodDefinition method_definitions[112] = { {"::nsf::methods::class::alloc", NsfCAllocMethodStub, 1, { {"objectName", NSF_ARG_REQUIRED, 1, Nsf_ConvertTo_Tclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}} }, @@ -3552,6 +3595,13 @@ {"::nsf::finalize", NsfFinalizeCmdStub, 1, { {"-keepvars", 0, 0, Nsf_ConvertTo_Boolean, NULL,NULL,"switch",NULL,NULL,NULL,NULL,NULL}} }, +{"::nsf::method::forward::property", NsfForwardPropertyCmdStub, 5, { + {"object", NSF_ARG_REQUIRED, 1, Nsf_ConvertTo_Object, NULL,NULL,"object",NULL,NULL,NULL,NULL,NULL}, + {"-per-object", 0, 0, Nsf_ConvertTo_Boolean, NULL,NULL,"switch",NULL,NULL,NULL,NULL,NULL}, + {"methodName", NSF_ARG_REQUIRED, 1, Nsf_ConvertTo_Tclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, + {"forwardProperty", NSF_ARG_REQUIRED|NSF_ARG_IS_ENUMERATION, 1, ConvertToForwardproperty, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, + {"value", 0, 1, Nsf_ConvertTo_Tclobj, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}} +}, {"::nsf::interp", NsfInterpObjCmdStub, 2, { {"name", NSF_ARG_REQUIRED, 1, Nsf_ConvertTo_String, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, {"args", 0, 1, ConvertToNothing, NULL,NULL,"allargs",NULL,NULL,NULL,NULL,NULL}}