Index: generic/nsf.c =================================================================== diff -u -r3a0d180d2de8a7d03adb2aa57eb865e83dae7d68 -r27e11788125901ff468955117d165f70d3871ce0 --- generic/nsf.c (.../nsf.c) (revision 3a0d180d2de8a7d03adb2aa57eb865e83dae7d68) +++ generic/nsf.c (.../nsf.c) (revision 27e11788125901ff468955117d165f70d3871ce0) @@ -14027,13 +14027,139 @@ /*************************** * Begin Object Info Methods ***************************/ + /* -objectInfoMethod callablefilter NsfObjInfoCallableFilterMethod { +objectInfoMethod children NsfObjInfoChildrenMethod { + {-argName "-type" -required 0 -nrargs 1 -type class} + {-argName "pattern" -required 0} +} +*/ +static int +NsfObjInfoChildrenMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *type, CONST char *pattern) { + return ListChildren(interp, object, pattern, 0, type); +} + +/* +objectInfoMethod class NsfObjInfoClassMethod { +} +*/ +static int +NsfObjInfoClassMethod(Tcl_Interp *interp, NsfObject *object) { + Tcl_SetObjResult(interp, object->cl->object.cmdName); + return TCL_OK; +} + +/* +objectInfoMethod filterguard NsfObjInfoFilterguardMethod { + {-argName "filter" -required 1} +} +*/ +static int +NsfObjInfoFilterguardMethod(Tcl_Interp *interp, NsfObject *object, CONST char *filter) { + return object->opt ? GuardList(interp, object->opt->filters, filter) : TCL_OK; +} + +/* +objectInfoMethod filtermethods NsfObjInfoFiltermethodsMethod { + {-argName "-guards"} + {-argName "-order"} + {-argName "pattern"} +} +*/ +static int +NsfObjInfoFiltermethodsMethod(Tcl_Interp *interp, NsfObject *object, + int withGuards, int withOrder, + CONST char *pattern) { + NsfObjectOpt *opt = object->opt; + + if (withOrder) { + if (!(object->flags & NSF_FILTER_ORDER_VALID)) + FilterComputeDefined(interp, object); + return FilterInfo(interp, object->filterOrder, pattern, withGuards, 1); + } + return opt ? FilterInfo(interp, opt->filters, pattern, withGuards, 0) : TCL_OK; +} + +/* +objectInfoMethod forward NsfObjInfoForwardMethod { + {-argName "-definition"} + {-argName "name"} +} +*/ +static int +NsfObjInfoForwardMethod(Tcl_Interp *interp, NsfObject *object, int withDefinition, CONST char *pattern) { + return object->nsPtr ? + ListForward(interp, Tcl_Namespace_cmdTable(object->nsPtr), pattern, withDefinition) : + TCL_OK; +} + +/* +objectInfoMethod hasmixin NsfObjInfoHasMixinMethod { + {-argName "class" -type class} +} +*/ +static int +NsfObjInfoHasMixinMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *mixinClass) { + Tcl_SetBooleanObj(Tcl_GetObjResult(interp), HasMixin(interp, object, mixinClass)); + return TCL_OK; +} + +/* +objectInfoMethod hasnamespace NsfObjInfoHasnamespaceMethod { +} +*/ +static int +NsfObjInfoHasnamespaceMethod(Tcl_Interp *interp, NsfObject *object) { + Tcl_SetBooleanObj(Tcl_GetObjResult(interp), object->nsPtr != NULL); + return TCL_OK; +} + +/* +objectInfoMethod hastype NsfObjInfoHasTypeMethod { + {-argName "class" -type class} +} +*/ +static int +NsfObjInfoHasTypeMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *typeClass) { + Tcl_SetBooleanObj(Tcl_GetObjResult(interp), IsSubType(object->cl, typeClass)); + return TCL_OK; +} + +/* +objectInfoMethod is NsfObjInfoIsMethod { + {-argName "objectkind" -type "class|baseclass|metaclass"} +} +*/ +static int +NsfObjInfoIsMethod(Tcl_Interp *interp, NsfObject *object, int objectkind) { + int success = 0; + + switch (objectkind) { + case ObjectkindClassIdx: + success = (NsfObjectIsClass(object) > 0); + break; + + case ObjectkindMetaclassIdx: + success = NsfObjectIsClass(object) + && IsMetaClass(interp, (NsfClass*)object, 1); + break; + + case ObjectkindBaseclassIdx: + success = NsfObjectIsClass(object) + && IsBaseClass((NsfClass*)object); + break; + } + Tcl_SetIntObj(Tcl_GetObjResult(interp), success); + return TCL_OK; +} + +/* +objectInfoMethod lookupfilter NsfObjInfoLookupFilterMethod { {-argName "filter"} } */ static int -NsfObjInfoCallableFilterMethod(Tcl_Interp *interp, NsfObject *object, CONST char *filter) { +NsfObjInfoLookupFilterMethod(Tcl_Interp *interp, NsfObject *object, CONST char *filter) { CONST char *filterName; NsfCmdList *cmdList; NsfClass *fcl; @@ -14063,12 +14189,12 @@ } /* -objectInfoMethod callablemethod NsfObjInfoCallableMethodMethod { +objectInfoMethod lookupmethod NsfObjInfoLookupMethodMethod { {-argName "pattern" -required 0} } */ static int -NsfObjInfoCallableMethodMethod(Tcl_Interp *interp, NsfObject *object, CONST char *name) { +NsfObjInfoLookupMethodMethod(Tcl_Interp *interp, NsfObject *object, CONST char *name) { NsfClass *pcl = NULL; Tcl_Command cmd = ObjectFindMethod(interp, object, name, &pcl); @@ -14081,7 +14207,7 @@ } /* -objectInfoMethod callablemethods NsfObjInfoCallableMethodsMethod { +objectInfoMethod lookupmethods NsfObjInfoLookupMethodsMethod { {-argName "-methodtype" -nrargs 1 -type "all|scripted|builtin|alias|forwarder|object|setter"} {-argName "-callprotection" -nrargs 1 -type "all|protected|public" -default all} {-argName "-application"} @@ -14091,7 +14217,7 @@ } */ static int -NsfObjInfoCallableMethodsMethod(Tcl_Interp *interp, NsfObject *object, +NsfObjInfoLookupMethodsMethod(Tcl_Interp *interp, NsfObject *object, int withMethodtype, int withCallprotection, int withApplication, int withNomixins, int withIncontext, CONST char *pattern) { @@ -14161,12 +14287,12 @@ } /* -objectInfoMethod callableslots NsfObjInfoCallableSlotsMethod { +objectInfoMethod lookupslots NsfObjInfoLookupSlotsMethod { {-argName "-type" -required 0 -nrargs 1 -type class} } */ static int -NsfObjInfoCallableSlotsMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *type) { +NsfObjInfoLookupSlotsMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *type) { NsfObjects *pl, *slotObjects; Tcl_Obj *list = Tcl_NewListObj(0, NULL); @@ -14180,133 +14306,7 @@ return TCL_OK; } - /* -objectInfoMethod children NsfObjInfoChildrenMethod { - {-argName "-type" -required 0 -nrargs 1 -type class} - {-argName "pattern" -required 0} -} -*/ -static int -NsfObjInfoChildrenMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *type, CONST char *pattern) { - return ListChildren(interp, object, pattern, 0, type); -} - -/* -objectInfoMethod class NsfObjInfoClassMethod { -} -*/ -static int -NsfObjInfoClassMethod(Tcl_Interp *interp, NsfObject *object) { - Tcl_SetObjResult(interp, object->cl->object.cmdName); - return TCL_OK; -} - -/* -objectInfoMethod filterguard NsfObjInfoFilterguardMethod { - {-argName "filter" -required 1} -} -*/ -static int -NsfObjInfoFilterguardMethod(Tcl_Interp *interp, NsfObject *object, CONST char *filter) { - return object->opt ? GuardList(interp, object->opt->filters, filter) : TCL_OK; -} - -/* -objectInfoMethod filtermethods NsfObjInfoFiltermethodsMethod { - {-argName "-guards"} - {-argName "-order"} - {-argName "pattern"} -} -*/ -static int -NsfObjInfoFiltermethodsMethod(Tcl_Interp *interp, NsfObject *object, - int withGuards, int withOrder, - CONST char *pattern) { - NsfObjectOpt *opt = object->opt; - - if (withOrder) { - if (!(object->flags & NSF_FILTER_ORDER_VALID)) - FilterComputeDefined(interp, object); - return FilterInfo(interp, object->filterOrder, pattern, withGuards, 1); - } - return opt ? FilterInfo(interp, opt->filters, pattern, withGuards, 0) : TCL_OK; -} - -/* -objectInfoMethod forward NsfObjInfoForwardMethod { - {-argName "-definition"} - {-argName "name"} -} -*/ -static int -NsfObjInfoForwardMethod(Tcl_Interp *interp, NsfObject *object, int withDefinition, CONST char *pattern) { - return object->nsPtr ? - ListForward(interp, Tcl_Namespace_cmdTable(object->nsPtr), pattern, withDefinition) : - TCL_OK; -} - -/* -objectInfoMethod hasmixin NsfObjInfoHasMixinMethod { - {-argName "class" -type class} -} -*/ -static int -NsfObjInfoHasMixinMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *mixinClass) { - Tcl_SetBooleanObj(Tcl_GetObjResult(interp), HasMixin(interp, object, mixinClass)); - return TCL_OK; -} - -/* -objectInfoMethod hasnamespace NsfObjInfoHasnamespaceMethod { -} -*/ -static int -NsfObjInfoHasnamespaceMethod(Tcl_Interp *interp, NsfObject *object) { - Tcl_SetBooleanObj(Tcl_GetObjResult(interp), object->nsPtr != NULL); - return TCL_OK; -} - -/* -objectInfoMethod hastype NsfObjInfoHasTypeMethod { - {-argName "class" -type class} -} -*/ -static int -NsfObjInfoHasTypeMethod(Tcl_Interp *interp, NsfObject *object, NsfClass *typeClass) { - Tcl_SetBooleanObj(Tcl_GetObjResult(interp), IsSubType(object->cl, typeClass)); - return TCL_OK; -} - -/* -objectInfoMethod is NsfObjInfoIsMethod { - {-argName "objectkind" -type "class|baseclass|metaclass"} -} -*/ -static int -NsfObjInfoIsMethod(Tcl_Interp *interp, NsfObject *object, int objectkind) { - int success = 0; - - switch (objectkind) { - case ObjectkindClassIdx: - success = (NsfObjectIsClass(object) > 0); - break; - - case ObjectkindMetaclassIdx: - success = NsfObjectIsClass(object) - && IsMetaClass(interp, (NsfClass*)object, 1); - break; - - case ObjectkindBaseclassIdx: - success = NsfObjectIsClass(object) - && IsBaseClass((NsfClass*)object); - break; - } - Tcl_SetIntObj(Tcl_GetObjResult(interp), success); - return TCL_OK; -} - -/* objectInfoMethod method NsfObjInfoMethodMethod { {-argName "infomethodsubcmd" -type "args|body|definition|handle|parameter|parametersyntax|type|precondition|postcondition"} {-argName "name"}