Index: TODO =================================================================== diff -u -r9dd5024eae672704fae601972a3111ab221750e7 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- TODO (.../TODO) (revision 9dd5024eae672704fae601972a3111ab221750e7) +++ TODO (.../TODO) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -4498,21 +4498,23 @@ - simplified nx.tcl by using new nsf::is - extended regression test +- changed ::nsf::parametersyntax(..) to ::nsf::parameter::syntax(..) +- xotcl2: adjusted manual parameter syntax entries to new conventions + ======================================================================== TODO: - fix property inheritance in traits (nx-traits.tcl) - maybe remove unneeded values, align naming in enumeration of first arg of *::info::objectparameter and *::info::method -- maybe change ::nsf::parametersyntax(..) to ::nsf::parameter::syntax(..) - reconsider #? {c1 cget -mixin} "" ? {c1 cget -object-mixin} "" - test cases - complete tests/plain-object-method.test - provide tests/class.test + complete coverage tests/plain-object-method.test + provide coverage tests/class.test - reconsider lower multiplicty on -object-mixin, -mixin... Index: generic/nsf.c =================================================================== diff -u -r9dd5024eae672704fae601972a3111ab221750e7 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- generic/nsf.c (.../nsf.c) (revision 9dd5024eae672704fae601972a3111ab221750e7) +++ generic/nsf.c (.../nsf.c) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -16273,7 +16273,7 @@ if (unlikely(tcd->verbose)) { Tcl_Obj *cmd = Tcl_NewListObj(objc, objv); - /*fprintf(stderr, "forwarder calls '%s'\n", ObjStr(cmd));*/ + fprintf(stderr, "forwarder calls '%s'\n", ObjStr(cmd)); DECR_REF_COUNT(cmd); } if (tcd->objframe) { @@ -16354,7 +16354,8 @@ * with the given cmd name. */ ALLOC_ON_STACK(Tcl_Obj*, objc, ov); - /*fprintf(stderr, "+++ forwardMethod must subst \n");*/ + /*fprintf(stderr, "+++ forwardMethod must subst oc=%d <%s>\n", + objc, ObjStr(tcd->cmdName));*/ memcpy(ov, objv, sizeof(Tcl_Obj *)*objc); ov[0] = tcd->cmdName; result = CallForwarder(tcd, interp, objc, ov); @@ -17753,7 +17754,7 @@ Tcl_DStringInit(dsPtr); DStringAppendQualName(dsPtr, Tcl_Command_nsPtr(cmd), methodName); /*fprintf(stderr,"Looking up ::nsf::parametersyntax(%s) ...\n", Tcl_DStringValue(dsPtr));*/ - parameterSyntaxObj = Tcl_GetVar2Ex(interp, "::nsf::parametersyntax", + parameterSyntaxObj = Tcl_GetVar2Ex(interp, NsfGlobalStrings[NSF_ARRAY_PARAMETERSYNTAX], Tcl_DStringValue(dsPtr), TCL_GLOBAL_ONLY); /*fprintf(stderr, "No parametersyntax so far methodName %s cmd name %s ns %s\n", @@ -18765,7 +18766,7 @@ AliasAdd(Tcl_Interp *interp, Tcl_Obj *cmdName, CONST char *methodName, int withPer_object, CONST char *cmd) { Tcl_DString ds, *dsPtr = &ds; - Tcl_SetVar2Ex(interp, NsfGlobalStrings[NSF_ALIAS_ARRAY], + Tcl_SetVar2Ex(interp, NsfGlobalStrings[NSF_ARRAY_ALIAS], AliasIndex(dsPtr, cmdName, methodName, withPer_object), Tcl_NewStringObj(cmd, -1), TCL_GLOBAL_ONLY); @@ -18778,7 +18779,7 @@ static int AliasDelete(Tcl_Interp *interp, Tcl_Obj *cmdName, CONST char *methodName, int withPer_object) { Tcl_DString ds, *dsPtr = &ds; - int result = Tcl_UnsetVar2(interp, NsfGlobalStrings[NSF_ALIAS_ARRAY], + int result = Tcl_UnsetVar2(interp, NsfGlobalStrings[NSF_ARRAY_ALIAS], AliasIndex(dsPtr, cmdName, methodName, withPer_object), TCL_GLOBAL_ONLY); /*fprintf(stderr, "aliasDelete ::nsf::alias(%s) returned %d (%d)\n", @@ -18790,7 +18791,7 @@ static Tcl_Obj * AliasGet(Tcl_Interp *interp, Tcl_Obj *cmdName, CONST char *methodName, int withPer_object, int leaveError) { Tcl_DString ds, *dsPtr = &ds; - Tcl_Obj *obj = Tcl_GetVar2Ex(interp, NsfGlobalStrings[NSF_ALIAS_ARRAY], + Tcl_Obj *obj = Tcl_GetVar2Ex(interp, NsfGlobalStrings[NSF_ARRAY_ALIAS], AliasIndex(dsPtr, cmdName, methodName, withPer_object), TCL_GLOBAL_ONLY); /*fprintf(stderr, "aliasGet methodName '%s' returns %p\n", methodName, obj);*/ @@ -20091,6 +20092,7 @@ withDefault, withEarlybinding, withMethodprefix, withObjframe, withOnerror, withVerbose, target, nobjc, nobjv, &tcd); + if (result == TCL_OK) { CONST char *methodName = NSTail(ObjStr(methodObj)); NsfClass *cl = Index: generic/nsf.tcl =================================================================== diff -u -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- generic/nsf.tcl (.../nsf.tcl) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) +++ generic/nsf.tcl (.../nsf.tcl) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -130,7 +130,7 @@ set {::proc ::nsf::__exithandler {} $value} get {::info body ::nsf::__exithandler} unset {proc ::nsf::__exithandler args {;}} - default {error "syntax: ::nsf::exithandler $::nsf::parametersyntax(::nsf::exithandler)"} + default {error "syntax: ::nsf::exithandler $::nsf::parameter::syntax(::nsf::exithandler)"} } } # initialize exit handler @@ -193,6 +193,7 @@ # # parameter support # + namespace eval ::nsf::parameter {} proc ::nsf::parameter::filter {defs pattern} { set result {} foreach def $defs { @@ -203,8 +204,10 @@ return $result } - set ::nsf::parametersyntax(::nsf::xotclnext) "?--noArgs? ?/arg .../?" - set ::nsf::parametersyntax(::nsf::__unset_unknown_args) "" - set ::nsf::parametersyntax(::nsf::exithandler) "?get?|?set /cmds/?|?unset?" + set ::nsf::parameter::syntax(::nsf::xotclnext) "?--noArgs? ?/arg .../?" + set ::nsf::parameter::syntax(::nsf::__unset_unknown_args) "" + set ::nsf::parameter::syntax(::nsf::exithandler) "?get?|?set /cmds/?|?unset?" + puts stderr "::nsf children [namespace children ::nsf]" + } Index: generic/nsfInt.h =================================================================== diff -u -r9cead8929011bb4dcc6c44630a91bc5d597520b2 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- generic/nsfInt.h (.../nsfInt.h) (revision 9cead8929011bb4dcc6c44630a91bc5d597520b2) +++ generic/nsfInt.h (.../nsfInt.h) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -628,7 +628,7 @@ NSF_CONFIGURE, NSF_INITIALIZE, NSF_ASSIGN, NSF_GET_PARAMETER_SPEC, /* var names */ NSF_AUTONAMES, NSF_DEFAULTMETACLASS, NSF_DEFAULTSUPERCLASS, NSF_INITCMD, - NSF_ALIAS_ARRAY, NSF_POSITION, NSF_POSITIONAL, NSF_CONFIG, NSF_PARAMETERSPEC, + NSF_ARRAY_ALIAS, NSF_ARRAY_PARAMETERSYNTAX, NSF_POSITION, NSF_POSITIONAL, NSF_CONFIG, NSF_PARAMETERSPEC, /* object/class names */ NSF_METHOD_PARAMETER_SLOT_OBJ, /* constants */ @@ -649,7 +649,7 @@ "configure", "initialize", "assign", "getParameterSpec", /* var names */ "__autonames", "__default_metaclass", "__default_superclass", "__initcmd", - "::nsf::alias", "position", "positional", "config", "parameterSpec", + "::nsf::alias", "::nsf::parameter::syntax", "position", "positional", "config", "parameterSpec", /* object/class names */ "::nx::methodParameterSlot", /* constants */ Index: generic/predefined.h =================================================================== diff -u -rfc77eaadabdd690239694a6f1cf155a7d16b5cd4 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- generic/predefined.h (.../predefined.h) (revision fc77eaadabdd690239694a6f1cf155a7d16b5cd4) +++ generic/predefined.h (.../predefined.h) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -51,7 +51,7 @@ "set {::proc ::nsf::__exithandler {} $value}\n" "get {::info body ::nsf::__exithandler}\n" "unset {proc ::nsf::__exithandler args {;}}\n" -"default {error \"syntax: ::nsf::exithandler $::nsf::parametersyntax(::nsf::exithandler)\"}}}\n" +"default {error \"syntax: ::nsf::exithandler $::nsf::parameter::syntax(::nsf::exithandler)\"}}}\n" "::nsf::exithandler unset\n" "if {[info command ::ns_log] ne \"\"} {\n" "proc ::nsf::log {level msg} {\n" @@ -78,14 +78,16 @@ "return /tmp}\n" "namespace export tmpdir\n" "if {![info exists ::env(HOME)]} {set ::env(HOME) /root}\n" +"namespace eval ::nsf::parameter {}\n" "proc ::nsf::parameter::filter {defs pattern} {\n" "set result {}\n" "foreach def $defs {\n" "if {[string match $pattern [::nsf::parameter::get name $def]]} {\n" "lappend result $def}}\n" "return $result}\n" -"set ::nsf::parametersyntax(::nsf::xotclnext) \"?--noArgs? ?/arg .../?\"\n" -"set ::nsf::parametersyntax(::nsf::__unset_unknown_args) \"\"\n" -"set ::nsf::parametersyntax(::nsf::exithandler) \"?get?|?set /cmds/?|?unset?\"}\n" +"set ::nsf::parameter::syntax(::nsf::xotclnext) \"?--noArgs? ?/arg .../?\"\n" +"set ::nsf::parameter::syntax(::nsf::__unset_unknown_args) \"\"\n" +"set ::nsf::parameter::syntax(::nsf::exithandler) \"?get?|?set /cmds/?|?unset?\"\n" +"puts stderr \"::nsf children [namespace children ::nsf]\"}\n" ""; Index: library/nx/nx.tcl =================================================================== diff -u -r9dd5024eae672704fae601972a3111ab221750e7 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- library/nx/nx.tcl (.../nx.tcl) (revision 9dd5024eae672704fae601972a3111ab221750e7) +++ library/nx/nx.tcl (.../nx.tcl) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -31,11 +31,14 @@ package provide nx 2.0b5 namespace eval ::nx { - namespace eval ::nsf {} ;# make pkg-indexer happy - namespace eval ::nsf::object {} ;# make pkg-indexer happy - namespace eval ::nx::internal {} ;# make pkg-indexer happy - namespace eval ::nx::traits {} ;# make pkg-indexer happy + namespace eval ::nsf {} ;# make pkg-indexer happy + namespace eval ::nsf::object {} ;# make pkg-indexer happy + namespace eval ::nsf::parameter {} ;# make pkg-indexer happy + + namespace eval ::nx::internal {} ;# make pkg-indexer happy + namespace eval ::nx::traits {} ;# make pkg-indexer happy + # # By setting the variable bootstrap, we can check later, whether we # are in bootstrapping mode @@ -2519,14 +2522,14 @@ #interp alias {} ::nx::self {} ::nsf::self set value "?/class .../?|?add /class/?|?delete /class/?" - set "::nsf::parametersyntax(::nx::Object::slot::__object::object mixin)" $value - set "::nsf::parametersyntax(::nsf::classes::nx::Class::mixin)" $value - set "::nsf::parametersyntax(::nsf::classes::nx::Class::superclass)" $value - set "::nsf::parametersyntax(::nsf::classes::nx::Object::class)" "?/className/?" + set "::nsf::parameter::syntax(::nx::Object::slot::__object::object mixin)" $value + set "::nsf::parameter::syntax(::nsf::classes::nx::Class::mixin)" $value + set "::nsf::parameter::syntax(::nsf::classes::nx::Class::superclass)" $value + set "::nsf::parameter::syntax(::nsf::classes::nx::Object::class)" "?/className/?" set value "?/filters/?|?add /filter/?|?delete /filter/?" - set "::nsf::parametersyntax(::nx::Object::slot::__object::object filter)" $value - set "::nsf::parametersyntax(::nsf::classes::nx::Class::filter)" $value - set "::nsf::parametersyntax(::nsf::classes::nx::Object::eval)" "/arg/ ?/arg/ ...?" + set "::nsf::parameter::syntax(::nx::Object::slot::__object::object filter)" $value + set "::nsf::parameter::syntax(::nsf::classes::nx::Class::filter)" $value + set "::nsf::parameter::syntax(::nsf::classes::nx::Object::eval)" "/arg/ ?/arg/ ...?" unset value ::nsf::configure debug 1 Index: library/xotcl/library/xotcl2.tcl =================================================================== diff -u -rd79efb10b92ad2045196990af50bc042e60b88f4 -rbca161db07ae2fe223f49b5aa5e44e7149cf9e67 --- library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision d79efb10b92ad2045196990af50bc042e60b88f4) +++ library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision bca161db07ae2fe223f49b5aa5e44e7149cf9e67) @@ -41,7 +41,9 @@ set ::xotcl::version 2.0 set ::xotcl::patchlevel .0 - namespace eval ::nsf {}; # make package indexer (pkg_mkIndex) happy + namespace eval ::nsf {} ;# make pkg-indexer happy + namespace eval ::nsf::parameter {} ;# make pkg-indexer happy + set ::nsf::bootstrap ::xotcl # @@ -1245,34 +1247,34 @@ # Provide parametersyntax for methods, which do not have a spec # # Tcl commands - set ::nsf::parametersyntax(::append) "varName ?value value value ...?" - set ::nsf::parametersyntax(::array) "option arrayName ?arg arg ...?" - set ::nsf::parametersyntax(::eval) "arg ?arg ...?" - set ::nsf::parametersyntax(::incr) "varName ?increment?" - set ::nsf::parametersyntax(::lappend) "varName ?value value value ...?" - set ::nsf::parametersyntax(::set) "varName ?value?" - set ::nsf::parametersyntax(::set) "varName ?value?" - set ::nsf::parametersyntax(::subst) "?-nobackslashes? ?-nocommands? ?-novariables? string" - set ::nsf::parametersyntax(::trace) "option ?arg arg ...?" - set ::nsf::parametersyntax(::unset) "?-nocomplain? ?--? ?name name name ...?" + set ::nsf::parameter::syntax(::append) "/varName/ ?/value/ ...?" + set ::nsf::parameter::syntax(::array) "/option/ /arrayName/ ?/arg/ ...?" + set ::nsf::parameter::syntax(::eval) "/arg/ ?/arg/ ...?" + set ::nsf::parameter::syntax(::incr) "/varName/ ?/increment/?" + set ::nsf::parameter::syntax(::lappend) "/varName/ ?/value/ ...?" + set ::nsf::parameter::syntax(::set) "/varName/ ?/value/?" + set ::nsf::parameter::syntax(::set) "/varName/ ?/value/?" + set ::nsf::parameter::syntax(::subst) "?-nobackslashes? ?-nocommands? ?-novariables? /string/" + set ::nsf::parameter::syntax(::trace) "/option/ ?/arg/ ...?" + set ::nsf::parameter::syntax(::unset) "?-nocomplain? ?--? ?/name/ ...?" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Object::invar) "?expr?" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Class::instinvar) "?expr?" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Object::parametercmd) "name" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Class::instparametercmd) "name" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Class::slots) "cmds" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Object::invar) "?/expr/?" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Class::instinvar) "?/expr/?" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Object::parametercmd) "/name/" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Class::instparametercmd) "/name/" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Class::slots) "/cmds/" # slots - set ::nsf::parametersyntax(::nsf::classes::xotcl::Object::class) "?class?" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Object::class) "?/class/?" - set value "?classes?|?add class?|?delete class?" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Object::mixin) $value - set ::nsf::parametersyntax(::nsf::classes::xotcl::Class::instmixin) $value - set ::nsf::parametersyntax(::nsf::classes::xotcl::Class::superclass) $value + set value "?/class .../?|?add /class/?|?delete /class/?" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Object::mixin) $value + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Class::instmixin) $value + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Class::superclass) $value - set value "?filters?|?add filter?|?delete filter?" - set ::nsf::parametersyntax(::nsf::classes::xotcl::Object::filter) $value - set ::nsf::parametersyntax(::nsf::classes::xotcl::Class::instfilter) $value + set value "?/filters/?|?add /filter/?|?delete /filter/?" + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Object::filter) $value + set ::nsf::parameter::syntax(::nsf::classes::xotcl::Class::instfilter) $value unset value }