2013-06-07 Gustaf Neumann - fix typo - remove doc target from "install-doc" since this takes a while in a "make install" - document tricky trace script setting in regression test - use tcl8.5 commands instead of 8.4 idioms - don't build doc always, since it takes a long time - documentation update and regeneration of html docs - add all tcl 8.5 cmds, nx methods + info methods - add missing tcl-keywords to nx-mode.el - adjust style files for document generation - added rules for generating pdf to ease release management - code cleanup - updated HTML renderings of examples 2013-06-06 Gustaf Neumann nsf.c: - fix a bug in SlotContainerCmdResolver() when NSF_MEM_COUNT is activated - fix a small memory leak for PER_OBJECT_PARAMETER_CACHING - all cases detectable with --enable-memcount=yes are fixed - fix git command in release instructions - fix label for debugging reference counts - updated TODO - reduce variable scopes nx::test: - change test cases to newer interface - don't use "namespace import nx::*" in test cases when not required nx::test: - use the standard configure interface for configuring instead of own version - changed from nx::Test to nx::test (user never has to know that nx::Test is a class). 2013-06-05 Gustaf Neumann - Eliminate all use of Tcl_GetStringFromObj() function. - fix typos, example code - further release work 2013-06-05 ssoberni Fixed some typos and suggesting some rewording 2013-06-05 Gustaf Neumann - initial checkin of nx-mode.el - preparing 2.0b5 release 2013-06-04 Stefan Sobernig Left a to-do in the nxdoc backend Completed update of nxdoc for NX 2013-06-04 Gustaf Neumann serializer.tcl - added flag -objmap to Serialzer.deepSerialize to make serializer usable for copying (-map is to coarse) - extended regression test 2013-06-04 Stefan Sobernig Adjusted nxdoc for the recent changes to NSF/NX 2013-06-03 Gustaf Neumann nsf.c - removed obsolete function AssertionAppendPrePost() - removed obsolete function NsfNSCopyCmdsCmd() and ::nsf::nscopycmd (handled now more general on scripting level in the "copy" method) nx.tcl: - "copy" method: fixed copying of class-level per-object methods - extended regression tests nsf.c - fixed a potential crash for objects having a wrapper-less alias defined 2013-06-03 ssoberni nsf.c - Make sure that the original error message is preserved when calling destroy after a failed CMD or INITCMD 2013-06-03 Gustaf Neumann nsf.c - fixed a bug in "info methods returns" in cases, where no returns info was available. - we can "/obj/ copy" now objects/classes containing * aliases * setter * ensemble methods * method protections Instead of handling cmd copying in NsfNSCopyCmdsCmd, it is replaced now by introspection. - extended regression test 2013-06-02 Gustaf Neumann nx::test: - deactivate calling overhead calculation, since this is not reliable (sometimes larger than the call). - improved handling of required configure parameters when classes are changed dynamically. When configure parameter are defined required, checking for the absence of required parameter was only performed at creation time. When objects were re-classed or their classes extended with required parameters, later calls to configure did not trigger exceptions. Now we check for the existence of the instance variable which addresses most of these points, but in future we might wish a more general solution (see comment for futures releases) - when creation with a required configure parameter failed, delete the half-baked object to avoid confusing states. - nx::test: show msg at start of test file 2013-06-01 Gustaf Neumann - changed multiplicity of mixin, object-mixin, filter, object-filter from 1..n to 0..n; rationale: when one has a list of e.g. mixins, which should be passed, one has to test for the length before passing it, otherwise the empty list would generate an error. Allowing 0..n makes the usage simpler and the program shorter. nx.tcl: - renamed variable option "-config" to "-configurable" to make its intention clearer 2013-05-31 Gustaf Neumann - traits: added ability to turn on verbosity for traits by using nx::configure trait-verbosity on|off nx.tcl: - replaced functionality of "/obj/ configure" by "/obj/ info configure" to re-enable semantics of the plain configure method, even when called without arguments. "/obj/ info configure" is actually a convenience method to allow one to write o1 info configure instead of o1 info lookup configure syntax package nx::class-method: - convenience package similar to nx::plain-object-method - allow for usage "C class method ..." in addition to "C object method". - made warnings configurable via nx::configure class-method-warning on|off - completed coverage and test cases package nx::plain-object-method: - made warnings configurable via nx::configure plain-object-method-warning on|off - completed coverage and test cases 2013-05-30 Gustaf Neumann nsf.c - fixed potential infinite loop in pattern matching for precedence lists - cget: make error message closer to tcl conventions - extended regression test 2013-05-29 Gustaf Neumann - adapt to object methods - prevent default value checking, when it is determined by a command - completed coverage if plain-object-method.tcl - provide warnings via plain-object-method.tcl via "nsf::log warn ..." 2013-05-28 Gustaf Neumann - renamed initblock parameter from __initcmd to __initblock - renamed nsf::configure parameter from "keepinitcmds" to "keepcmds" - saving "keepcmds" in an associative array named "__cmd(/parameternName)" to allow saving of multiple parameters with less name clash danger (when application stays away from variables stating with double underscore) nx.tcl: - removed "info is .." since it might raise more questions than it solves - changed enumeration values for "-source" in "info lookup methods" "info lookup slots" "info methods" "info slots" from "all|application|baseclasses" to "all|application|system" for consistency with "nsf::my" and "nsf::dispatch" which uses "-system" as well 2013-05-26 Gustaf Neumann Traits: - changed from traits-as-objects to traits-as-classes. This allows for higher orthogonality of traits and class definitions and allows in principle traits for object-specific methods (not fully implemented/tested) - fixed property/variable inheritance in traits. - remove spurious debug line Cleanup of nsfAPI.decls - remove unneeded enumeration types - use "typeName" to shorten reported names of parameters - use camel case for reported names - changed ::nsf::parametersyntax(..) to ::nsf::parameter::syntax(..) - xotcl2: adjusted manual parameter syntax entries to new conventions 2013-05-24 Gustaf Neumann - added implementation for slots with traces+types for classes - exception for incorrect defaults are thrown during slot creation - extended nsf::is, added parameter * ?-configure? -- accept configure parameter options * ?-name /name/? -- provide a parameter name for error message - simplified nx.tcl by using new nsf::is - extended regression test - added partly implementation for slots with traces+types for classes - fixed cases, where valuechangedcmd (and the other traces) did not work with "configure" method. When slot traces are used, it cleans other traces for the same operations. - extended regression test 2013-05-23 Gustaf Neumann nsf.c: - fix crash when "nsf::my" is called with a single argument outside the object context. - fix assert - removed some TODOs from tests/parameters.test - parameter dispositions: We differentiate now between "initcmd" and "cmd": an "initcmd" is only evaluated once, but one can provide configure values for this parameter later. a "cmd" is executed on every evaluation, it is only possible to pass cmds to it. The trailing argument of the configure parameters (used e.g. for scripted object/class definitions) is now of type "cmd". Implementation not yet complete (object cases are not correct). - streamline documentation C-code Generator: - added "-typeName" for enumeration types that allows for disambiguation of enumerations with different argument names. Before that, the argument name determined the c-type of the enumeration. Therefore, it was not possible to use argName "-type" for two different functions with a different list of enumerators. - renamed option "-methodtype" to "-type" in /obj/ info methods ... ?-type all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ... /obj/ info object methods ... ?-type all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ... /obj/ info lookup methods ... ?-type all|scripted|builtin|alias|forwarder|object|setter|nsfproc? ... - minor code cleanup 2013-05-22 Gustaf Neumann - streamlined AddSlotObjects() - cleanup of TODOs - nsf.c: handle full-qualified name for private slots (AddSlotObjects()) - extended regression test 2013-05-21 Gustaf Neumann - updated next-tutorial: * bring definitions of properties and variables up to date * fix "object methods" - XOTcl2: ensure public accessor when "-parameter ..." is used - extended parameter extractor: new functionality ::nsf::parameter get default /parameter/ ?/varname/? ::nsf::parameter get type /parameter/ /obj/ info parameter get default /parameter/ ?/varname/? /obj/ info parameter get type /parameter/ 2013-05-20 Gustaf Neumann - hopefully the last changes for ?object? method|variable|property: defined * "/obj/ delete object method" * "/obj/ delete object property" * "/obj/ delete object variable" - "info method syntax" returns now "/cls/ ...." - "info object method syntax" returns now "/obj/ ...." - updated next-migration guide to reflect changes from the configure reform - make name fully qualified for symmetry reasons - minor cleanup - nx-pp.tcl: fixed changed accessor handling, added cget to highlight words 2013-05-19 Gustaf Neumann - added new regression test info-variables.test 2013-05-19 Gustaf Neumann Method and configure parameter reform, Part 3: - added /cls/ info lookup variables -> list of handles /obj/ info lookup object variables -> list of handles /obj/ info variable definition|name|parameter /handle/ - nx.tcl: added forward compatible scripted implementation of "lmap" - nsf.c: handle names for private slots in pattern provided to AddSlotObjects(), used e.g. in "info lookup slots /pattern/" 2013-05-18 Gustaf Neumann - dropped "/obj/ info slot definition /obj/" in favor of "/slotobj/ definition" 2013-05-17 Gustaf Neumann - nx.tcl: handle "incremental" in slot reconfigure - nx.tcl: change defaultAccessor to "none" 2013-05-17 Gustaf Neumann - Method and configure parameter reform, Part 2: In order to streamline the interface further, we tried to follow the idea to use "... info /plural word/" to obtain a set of handles, and then a separate call to obtain the details. Therefore, we replaced /cls/ info slot objects /cls/ info slot definitions /cls/ info slot names /obj/ info object slot objects /obj/ info object slot definitions /obj/ info object slot names /obj/ info lookup slots by /cls/ info slots ?-type /type/? ?-closure? ?-source all|application|baseclasses? ?/pattern/? /obj/ info object slots ?-type /type/? ?/pattern/? /obj/ info slot definition /obj/ /obj/ info lookup slots ?-type /type/? ?-source all|application|baseclasses? ?/pattern/? 2013-05-16 Gustaf Neumann - Method and configure parameter reform /cls/ info configure parameters ?pattern? -> list of params /cls/ info configure syntax -> syntax output /obj/ info method parameters /methodName/ ?/pattern/? -> list of params /obj/ info method syntax -> syntax output /obj/ info lookup configure parameter ?/pattern/? -> list of params /obj/ info lookup configure syntax -> syntax output /cls/ info parameter list|name|syntax /param/ -> value 2013-05-14 Gustaf Neumann - avoid crash in case NsfParameterGetCmd() is passed a plain value 2013-05-13 Gustaf Neumann - minor documentation updates 2013-05-10 Gustaf Neumann - initialize stub-tables only once - syntax formatter: use /value/ for denoting placeholder in "... info method syntax ..." 2013-05-07 Gustaf Neumann - parametersyntax: make placeholders explicit - moved "/obj/ info slot definition|..." to "/obj/ info object slot definition|..." for consistency - provided "parametersyntax()" for "object mixin" and "object filter" 2013-05-05 Stefan Sobernig - win/makefile.vc: have the install target copy the public headers as well 2013-05-04 Stefan Sobernig - MinGW toolchains do not provide support _vscprintf(), so we limit the use of it to MSVC; tested NsfDStringPrintf under MinGW - Provide tcl library path to summary.tcl and remove intermediate file from repo - Fixed the Win32 logic for computing the Tcl_DString in NsfDStringPrintf(), tested for MSVC under x86 and amd64 2013-05-04 Gustaf Neumann - updating next-tutorial to object method syntax 2013-05-03 Gustaf Neumann - updated migration guide - update to new naming 2013-05-03 ssoberni - Fix the 86-specific tests to reflect the object-modifier reform 2013-05-03 Gustaf Neumann - try to print arguments in one sweep in NsfDStringPrintf() - remove "extern" declarations 2013-05-02 ssoberni - Revised NsfDStringPrintf() for portability to non-C99-compliant C runtimes (MSVC); remains to be tested 2013-05-02 Gustaf Neumann - first and incomplete update of migration guide to new syntax 2013-05-01 Stefan Sobernig - Re-enabling deletion of intermediate file in makefile - Remove legacy build artifacts - Provide native Win build support for MSVC++ and MSVC, using the Tcl 8.6 name templates. Tested using Visual Studio 12 (VC and name in version 11). See makefile.vc for build instructions for Win32 and Win64. 2013-04-29 Gustaf Neumann - bumped version number to 2.0b5 - tested with NaviServer and OpenACS (new version of nx needs as well a newest NaviServer, since ns_cache implementation needs to be objectified; newest NaviServer version works as well with older nx) - fix xotcl instance method serialization (still not covered in regression test) - renamed "package require nx::class" to "package require nx::class-method" in analogy to "nx::plain-object-method" - added "/obj/ object variable" and "/obj/ object property" 2013-04-28 Gustaf Neumann MongoDB - added "nx::mongo::db drop collection /name/" - returning status from "nx::mongo::db remove" as success (0 or 1) - adjust to object interface - reduce verbosity - add error messages for slot lookup failures Updated MongoDB interface - upgraded to c-driver 0.7.1 - tested with MongoDB 2.4.4-pre - new commands: * mongo::run * mongo::cursor::find * mongo::cursor::next * mongo::cursor::close - adapted interface for c-driver 0.7.1 (e.g. new optional name for mongo::index - nsfPointer.c: add parameter to Nsf_PointerDelete() for allowing optional freeing - reduced default verbosity - moved NsfConfigEnabled from nsf.h to nsfInt.h (no need to be part of the public interface) - moved NSF_ARGPARSE_* macros to nsf.h (since arg parser is public and uses these flags) 2013-04-23 Gustaf Neumann Object-method Reform: - changed interface to object specific commands by requiring an ensemble named "object". The rational behind is essentially to use always the same info command to retrieve object specific methods, no matter whether these are defined on a plain object or a class object (does not break the "contract" what e.g. "info method" returns). Now we define methods via: /cls/ method foo {args} {...body...} /cls/ object method foo {args} {...body...} /obj/ object method foo {args} {...body...} Similarly, aliases, forwards and mixins are defined, e.g. /cls/ mixin add ... /cls/ object mixin add ... /obj/ object mixin add ... /obj/ require object method ... The same change propagated as well to the "info" method. Now we have: /cls/ info methods ... /cls/ info object methods ... /obj/ info object methods ... Similar, the object parameterization uses /cls/ create obj -object-mixin M /cls/ create obj -object-filter f /metacls/ create cls -mixin M1 -object-mixin M2 /metacls/ create cls -filter f1 -object-filter f2 - as a consequence, a) "/cls/ class method ...", "/cls/ class alias ...", "/cls/ class forward ...", "/cls/ class filter ...", "/cls/ class mixin ...", "/cls/ class info ..." "/obj/ class method require method ..." "/obj/ class method require public method ..." "/obj/ class method require protected method ..." "/obj/ class method require private method ..." were dropped b) "/obj/ method ....", "/obj/ alias ....", "/obj/ forward ...." "/obj/ filter ...." "/obj/ mixin ...." "/obj/ info method*" "/cls/ create obj -mixin M" "/cls/ create obj -filter f" "/obj/ method require method ..." "/obj/ method require public method ..." "/obj/ method require protected method ..." "/obj/ method require private method ..." were dropped - added package nx::class to allow optionally the "class" notation "/cls/ class method ..." (and friends, see (a)), and "/cls/ class info ... - added package nx::plain-object-method to allow optionally plain method b) "/obj/ method ...." (and friends, see (b)) - add support to slots to use ensemble methods as setters 2013-04-17 Gustaf Neumann - allow explicit unsetting of -per-object flag in 0-argument -flag=value notation 2013-04-05 Gustaf Neumann - reduce variable scope 2013-03-25 ssoberni - Improved wording in comment on NsfConfigEnabled() - Irgh. Had forgotten about two-level stringification to provide configuration macro expansions as strings in NsfReportVars() 2013-03-25 Stefan Sobernig - Adding a helper macro NsfConfigEnabled() to test for active/inactive build-time configurations; rewrote NsfReportVars() accordingly. This makes NSF compilable under MSVC (VC11). Thanks are due to Stephan Adelsberger for reporting the issue. 2013-02-19 Gustaf Neumann - ByteCompiled(): fix indentation of preprocessor #if statements - ByteCompiled(): ensure result setting in case HAVE_TCL_COMPILE_H is not defined - improve wording in rosetta example 2013-01-22 Gustaf Neumann - more code cleanup - reduce variable scopes - remove EXTERN declarations from function definitions 2013-01-08 Gustaf Neumann - Update to latest TEA. - Follow new naming convention for auto-tools (using configure.ac) - silence compiler warnings 2012-12-12 Gustaf Neumann - replace Tcl_GlobalEval by Tcl_Eval, since Tcl_GlobalEval will be removed in futures versions of Tcl 2012-11-26 Stefan Sobernig - Checked built and test suite against Tcl 8.6rc2 (core-8-6-0-rc) under MinGW32; removed temporary fix for bug #3401422 2012-11-19 Gustaf Neumann - quote filename in content disposition 2012-11-16 Gustaf Neumann - replace nx::configure option defaultPropertyCallProtection by defaultAccessor - protect trf against leading dashes 2012-11-15 Gustaf Neumann - deactivate tests in library file 2012-11-14 Gustaf Neumann - add additional "convertto" when generating zip files from strings 2012-10-30 Stefan Sobernig - The asciidoc-related configuration artifacts, especially for Tcl/NSF-specific code highlighting, are now contained in the source distribution and integrated with the respective make targets. Besides a running asciidoc installation, there is no further configuration need. Tested with asciidoc 8.6.8 2012-10-28 Stefan Sobernig - Extending test case to cover slotassign issue - Adding a test and a temporary fix for the ::nsf::is issue in setCheckedInstVar 2012-10-13 Gustaf Neumann - Make sure to NS_EXPORT Ns_ModuleVersion for people using still the old-style AolServer module. 2012-10-04 Gustaf Neumann - make assumptions in code explicit 2012-10-03 Gustaf Neumann nsf.c: - handling of method names in error messages from nsfAPI.h. Make sure that error message is generated with the actual method name. 2012-10-02 Gustaf Neumann nx.tcl: - property has now a boolean non-positional argument "-config" /obj|cls/ property ?-accessor value? ?-config boolean? ?-incremental? ?-class value? spec ?initblock? in symmetry with "-accessor" (parameter option "noconfig" is still needed to flag nsf for variables that should be initialized, which are not configurable - "/obj|cls/ info slot definitions" returns a full command (containing flags and property|variable) - extended regression test 2012-09-30 Gustaf Neumann - remove debug output nsf.c: - factored out ParameterMethodForwardDispatch() to call a parameter method defined as a forwarder the same way from "configure" and "cget" - extended regression test - improve comment 2012-09-29 Gustaf Neumann - extended regression test - changed name "/obj|cls/ slot info definition" to "/obj|cls/ slot info definition" since result is a set - dropped parameter method "properties" - dropped "/obj/ info properties" (since "properties" or "variables" are returned") nx.tcl: - change parameter name in "/cls/ info parameter ... ?pattern?" from "name" to "pattern" 2012-09-28 Gustaf Neumann - added functionality for "cget" to call parameter-methods (e.g. "... cget -class"). The method cget calls either "/slot/ get ..." (when slot=... is provided in the parameter spec) or it assumes that the method without argument returns the value - added "::nsf::object::property /obj/ volatile" to query whether an object is volatile or not - "/obj/ cget -volatile" returns now the volatile state of the object - factored out ParameterMethodDispatch() from OConfigureMethod() - extended regression test 2012-09-27 Gustaf Neumann - invalidation of per-object parameter cache * on mixin changes and * on deletion/adding of per-object slots - deactivate PER_OBJECT_PARAMETER_CACHING per default (flipping this parameter makes regression test more than 20 faster). - extended regression test - NsfObjInfoObjectparameterMethod(): return not only the first matching parameter, but the list of all matching ones. The last optional argument was renamed from "name" to "pattern" accordingly - rename invalidateobjectparameter -> parameter:invalidate::classcache - rename invalidateobjobjectparameter -> parameter:invalidate::objectcache - bring cmds into alphabetical order 2012-09-26 Gustaf Neumann - first draft of per-object parameter caching (for per-object-mixins and per-object properties). nsf.c: - fix potential bad interaction between per-object mixins and per-class caching of object-parameters 2012-09-25 Gustaf Neumann - don't blindly register all object/class methods for XOTcl Property Reform Part 2: better handling of per-object properties nsf.c: - changed "/class/ __objectconfigure" to "/obj/ __objectconfigure" to be able to handle per-object properties on classes properly. - renamed "info method parametersyntax" -> "info method syntax" - renamed "/obj|cls/ info method parametersyntax" into "/obj|cls/ info method syntax" - replaced "::nsf::methods::class::info::objectparameter" by "::nsf::methods::object::info::objectparameter" - new command "::nsf::parameter::specs ?-configure? ?-noposargs? slotobjs": convert provided slotobjs into a list of parameter specs - new command "::nsf::parameter::get list|name|syntax parameterspec": convert parameter spec into syntax form, or retrieve pieces of information from it (can be extended in the future) - added more or less generic list handling functions TclObjListFreeList(), TclObjListNewElement() and TclObjListAdd() used by "::nsf::parameter::specs" - replaced "::nsf::method::property /obj/ -per-object /name/ slotcontainer ?value?" by "::nsf::object::property /obj/ slotcontainer ?value?" - added "::nsf::object::property /obj/ hasperobjectslots ?value?" nx.tcl: - new info methods * "/obj/ info lookup parameter definitions" * "/obj/ info lookup parameter names" * "/obj/ info lookup parameter list" * "/obj/ info lookup parameter syntax" - changed "/cls/ info parameter definition ?name?" into "/cls/ info parameter definitions ?name?" since ir returns a list. Still, "list" or "syntax" won't be plural 2012-09-22 Gustaf Neumann - renamed timing variable from "time" to "ms" - added timing statistics 2012-09-21 Gustaf Neumann - generalize handling for per-object-properties - added additional file for regression test 2012-09-19 Gustaf Neumann Property reform part 1: - disallow protection modifiers for "properties" and add new flag "-accessor" to "property" and "variable" This changes definitions like Class create C { :property {a a1} :public property {b b1} :protected property {c c1} :private property {d d1} } to Class create C { :property {a a1} :property -accessor public {b b1} :property -accessor protected {c c1} :property -accessor private {d d1} } since "properties" are always public accessible over the "configure" and "cget" interface, but the accessors methods might not be public. The value of the accessor might be also "none" (specifying explicitly that no accessor is wanted) or "", which means: use the default. Same holds for "variable" - disallow parameter option "incremental" and change it to a flag of the property or variable. The motivation for this is due to the fact, that "incremental" is a property of the accessor, and not of the value. old: Class create C { :property foo:int,incremental :variable bar:int,incremental } new: Class create C { :property -incremental foo:int :variable -incremental bar:int } - disallow "public class property" and friends since these are not needed - removed parameter property "noaccessor" - removed "nx::configure defaultPropertyCallProtection" and method hook "__default_property_call_protection" - introduced "nx::configure defaultAccessor" and method hook "__default_accessor" - for the time being, "defaultAccessor" is "public" for NX and XOTcl, will be changed to "none" in NX - extended regression test (new file properties.test) 2012-09-15 Gustaf Neumann nsf.c: - fixed parameter syntax for required nonpos args - deactivate deletion of methods via nsf::object::delete during shutdown to avoid missing slot forwarders called from destructors nx.tcl: - remove debugging output - renamed testlog file, remove it on "make clean" nsf.c: - made argument of cget required nx.tcl: - added Tk-style methods "configure" and "cget" - added additional regression test set for cget and configure nsf.c: - implemented cget as a configure-like method, dropped ensemble method variant nx.tcl: - simplified "/obj|cls/ delete method" due to resolving capabilities in nsf::delete::method - fixed regression test to run all test again correctly xotcl2.tcl: - made destructor of Connection more robust such it does not depend on accessor methods. 2012-09-14 Gustaf Neumann nsf.c: - extended nsf::method::delete to handle ensemble names nx.tcl: - added tk/incr-tcl style cget methods on class/object levels. - improve copy handling with other child-types of the slot container working - make sure to ignore non-slot-type objects in slot introspection - worked on regression test until "methods.test". others are missing, but maybe reconsideration 2012-09-13 Gustaf Neumann - updated 34 copyright notices nx.tcl: - rename the following internally called methods (not for XOTcl). alloc -> __alloc dealloc -> __dealloc objectparameter -> __objectparameter recreate -> __recreate - from these methods, only __objectparameter is defined per default, the others are defined on demand changes to allow efficient tk/incr tcl compatible configure/cget - refactored code to allow one to parameterize handling of required flag for parameters - don't flag an error when configure is called on an initialized object (logic: if the object is initialized, configure must have been called before, and the required action must have been already taken). - rename nx::Object.configure to nx::Object.__configure to free method name "configure" for an e.g. tk-like configure 2012-09-10 Gustaf Neumann - finalize transition from old code 2012-08-28 Gustaf Neumann - fix frame scoping for myvar/myproc 2012-08-10 Gustaf Neumann - allow one to change title of a scripted document - make doc beautifier more robust for invalid lists - use explicit return in tutorial example scripts 2012-08-01 Gustaf Neumann - improve documentation - use "nsf::relation $cl superclass" instead of "$cl configure -superclass" - minor documentation updates nx::test: - added summary at the end of "make test" via log file - updated .gitignore 2012-07-31 Gustaf Neumann nx.tcl: - set multiplicity for mixins and filters by default from 1..n to 0..n to avoid error messages, when e.g. empty mixin lists are configured. Setting empty mixin-lists is strictly speaking not necessary, but this eases the code in cases the lists are sometimes empty. - handle cyclical superclass/class dependencies during object system finalize - extend regression test 2012-07-18 Gustaf Neumann nsf.c: - ignore in internal calls to "dealloc" protection settings - handle cyclical class dependencies during object system finalize - extend regression test 2012-07-18 Stefan Sobernig - library/nx/nx.tcl: Following the code review, implemented a first scheme for handling traces in setCheckedInstVar. This gives us consistent behavior for defaults and traces (valuechangedcmd) across classes and objects. - tests/parameters.test: Adjusted the relevant tests - Pending: setCheckedInstVar currently uses ::nsf::is to validate the value (e.g., default value) to be set. However, it might get passed parameter options which do not fit the NSF_DISALLOWED_ARG_VALUECHECKED filter. 2012-07-17 Gustaf Neumann - define method "proc" of ::xotcl::Attribute in terms of ::xotcl::Object proc - make sure to have gcc branch hints in generated code - honor default type in "info slot names" 2012-07-17 ssoberni - Addressed a number of issues in the NX slot infrastructure (which revealed themselves when running Mark's BusinessActivities implementation in XOTcl2 mode): - generic/nsf.c: Initcmd blocks (as set for registering per-class slot traces) were subjected to argument checks causing unexpected behavior (e.g., attempts of unboxing initcmds as Tcl lists or of checking initcmds against value types). This was fixed by exempting NSF_ARG_INITCMD params from argument checking in ArgumentCheck() explicitly. - library/nx/nx.tcl: For per-class parameters, the use of valuechangedcmd effectively overruled the default value specified (simply because the generated initcmd holding the trace statements took the place of the default value). While for defaultcmd and for valuecmd the parallel use of default is forbidden, the valuechangedcmd semantics allow for specifying a default, in principle. This was fixed by providing a default-setting statement in the initcmd. - tests/parameters.test: Added tests to cover the above (and beyond). - library/xotcl/library/xotcl2.tcl: Extended the backwards compatibility of the hybrid XOTcl2/NX slots infrastructure to the XOTcl 1 interface: This includes support for inline -proc statements and instvar. This compatibility level corresponds to the slot interface as documented (by examples) in the XOTcl language ref and the manual. - library/xotcl/tests/slottest.xotcl: Added tests for the above compatibility enhancements. 2012-07-16 Gustaf Neumann - allow instance property inheritance for traits 2012-07-11 Gustaf Neumann - Don't advertise to use "configure" method for calling class/superclass in documentation sice we have better ways. 2012-06-27 ssoberni - Replaced erroneous check using the object-specific rather than the class-specific options in the query mode of ::nsf::relation with class-filter. This prevented [::nsf::relation /cls/ class-filter] from returning any filter info. As a consequence, the incremental interface of the filter slot failed (e.g., [/cls/ filter add aFilterProc] effectively reset the class-filter cmd list instead of adding to it). Thx are due to Markus Moldaschl for reporting the issue. - Aligning class-filter and object-filter behavior on errors during filter additions to the state-preserving behavior of object-mixin and class-mixin. - Adding basic tests on object-filter/class-filter (::nsf::relation, filter slot interface) and specific ones to cover the above issues. 2012-06-25 Gustaf Neumann - added a SlotContainerCmdResolver() to avoid interaction of slot names with names of callable tcl commands. Without the SlotContainerCmdResolver() the call to "list" in a property named "list" leads to a call to the container object ::Test2::slot::list instead to the intended ::list. The implementation is not perfect, since it ignores the namespace path inside the slot container. - added regression test. - adding gcc helper files to ignore list - cosmetical documentation changes 2012-06-01 Gustaf Neumann nsfShadow.c - bump MethodEpoch when a tcl ::rename command happens on a nsf method (which might be cached in a Tcl_Obj) This fixes a crash reported by Arthur Schreiber nsf.c: - make NsfInstanceMethodEpochIncr() and NsfObjectMethodEpochIncr() accessible from all files using nsfInt.h - remove experimental code (backslash escaping for "," in parameter option parse 2012-05-22 Gustaf Neumann - remove dependency of generated stub file from nsfInt.h - fix compilation when dtrace is activated (missing parenthesis, many thanks to Victor Guerra for noticing) - document private properties in tutorial and migration guide - improve wording in documenting - extend regression test 2012-05-22 Stefan Sobernig - configure, configure.in: Under win, the CLEANFILES missed a pattern for object files - nsfInt.h: Based on the BUILD_nsf convention, the internal header introduced a TCL_STORAGE_CLASS macro placing the dllimport attribute (under Win/MinGW builts). As a consequence, shared and stub builds ended up with function declarations annotated with dllimport (which for these cases is either unnecessary or even breaks builds because the dllexport counterpart is missing, obviously). As nsf.h includes a sane DLLIMPORT/DLLEXPORT handling (copied over from tcl.h), I simply removed the special macro handling from nsfInt.h. - NsfProcStub(): Use the EXTERN macro rather than extern directly 2012-05-21 Gustaf Neumann - added documentation for "/obj/ info name" to migration guide and .nxd file - adding more comments to examples in migration guide - added design study ruby-mixins.tcl to example-docs and regression test - minor polishing 2012-05-17 Gustaf Neumann - change "#!/bin/env" into "#!/usr/bin/env" 2012-05-14 Gustaf Neumann - increase backward compatibility for ::xotcl::Attribute by defining the public methods "set", "exists" and "istype" 2012-05-14 ssoberni - apps/utils/nxdoc: fix shebang path to env ... - generic/nsf.c, ObjectDispatch(): Re-arranged the handling of fully-qualified method dispatches with the selectors resolving to existing objects and, in particular, nested (namespace-qualified) objects. Prior to that, dispatches such as "::C ::parent::child" were not covered appropriately: ::parent was reported as valid regObj and so the dispatcher continued to dispatch to the cmd "::parent::child" in the self-context ::parent::child ... with unwanted side-effects (e.g., XOTcl's unknown handling was bypassed). - tests/methods.test: Added basic tests on the (current) handling for such ::* dispatches and a specific test set on the intended XOTcl behavior. 2012-05-13 Gustaf Neumann - start error messages with a lowercase word for consistency and to follow closer to Tcl's conventions - added "private property foo" - extended regression test - allow parens in property names (array syntax) - added "/obj/ info name" (as alternative to "namespace tail [self]") - use newer style of tcl-obj interface instead of sprintf 2012-05-11 Gustaf Neumann - implement escaping for comma in value of parameter options: escaping in values can be achieved via duplicating the comma. - extend regression test 2012-05-04 ssoberni - library/xotcl/library/xotcl2.tcl: Provided a virtual slot "multivalued" to establish backward compatibility with XOTcl1; also, allow old-style class creation based on unknown for ::xotcl::Attribute - library/xotcl/tests/slottest.xotcl: Added some tests on backward compatibility for XOTcl slots 2012-04-20 Gustaf Neumann - explorative implementation of object method dispatches with KEEP_CALLER_SELF and no NSF_PER_OBJECT_DISPATCH - extend regression test 2012-04-16 Gustaf Neumann nsf.c: - refactor ObjectCmdMethodDispatch() for clarity - prepare work on object method dispatches with KEEP_CALLER_SELF and no NSF_PER_OBJECT_DISPATCH - remove debug line 2012-04-11 Gustaf Neumann - fix off-by-one error - add regression test for keepcallerself with and without perobjectdispatch - fix typo 2012-04-10 Gustaf Neumann - serializer: * pertain perobjectdispatch and keepcallerself in serializer * extend regression test nsf.c: - generalize stack monitor by handling growing and shrinking stacks - refactor into function CheckCStack() - serializer: * make [::Serializer deepSerialize -ignoreVarsRE "" $o] behave like [::Serializer deepSerialize $o], since learn@wu depends on that, and a value for ignoreVarsRE of empty looks more like an omitted value than a regular expression, that should match everything. * extended regression test - extended regression test 2012-04-05 Gustaf Neumann - added compile macro NSF_STACKCHECK to provide stack monitoring/debugging (especially useful for multi threaded programs, where stack is more limited) - make ::nsf::log more robust for AOLserver/NaviServer, since ::ns_log is not always around when an output is needed - don't hide call to make.tcl 2012-03-09 Gustaf Neumann - protect serial generation for parameters via mutex - fix compilation when compiled without threads (many thanks for r.zaumseil for noting this). 2012-03-05 Gustaf Neumann - tcl86.test: better implementation of method "each", cleanup and extension of enumerator tests 2012-02-29 Gustaf Neumann - extended regression tests for yield - implemented "next" for ruby-like enumerators (each needs still more work) 2012-02-27 Gustaf Neumann - pass property name to slot "initialize" method to conform with the interface to "assign", "get" ... (all these receive the property name as well) - allow slot "initialize" method to be protected (handled similarly to "init") 2012-02-24 Gustaf Neumann nsf.c: - added object parameter option "slotinitialize" - renamed object parameter option "invokesetter" -> "slotassign" - call slot.assign instead of setter of object - removed restriction on nosetter/invokesetter: nosetter can be used in connection with slotassign - added regression test for slot.initialize 2012-02-22 Gustaf Neumann - Fixed a bad interaction between Tcl's apply (pushing lambda frames) and the variable resolvers. The variable resolver was not able to resolve variables, while the command resolver was still working correctly. - Extended regression test - Improve wording in instructions - Improve comments - Documented dependencies between configure flags and feature activation cpp macros 2012-02-17 Gustaf Neumann - improve error message to indicate, that nsf refuses to overwrite (redefine) some cmds - don't allow method to overwrite child object - extended regression test - documented new feature as incompatibility with XOTcl 1 2012-02-16 Gustaf Neumann - don't allow object creation to overwrite non-object cmds (e.g. procs) - improve debug line 2012-02-16 ssoberni - library/lib/nxdoc-xowiki.tcl: Finished and polished the xowiki backend for nxdoc. Some tests regarding relative paths and the tree-view generation are pending ... - library/lib/nxdoc-xowiki.tcl: Use the built-in base64 facility if running under Tcl 8.6 - Due to re-introducing nested-object-as-method semantics lately, nxdoc started stumbling over name conflicts between nested entity hierarchies (i.e., the entity object representing "/cls/ class info class" ...) and equally-named introspection calls on such entities (e.g., a "info class" call). I made these calls more robust my using -system dispatches; which is fine as long as we do not have sth. like "/obj/ info eval". Generally speaking, the risk of such naming conflicts discredits the use of object nesting in nxdoc; should eventually be revised. Or, as work-around: Using a filter on Entity instances to protect/redirect critical calls. - tests/serialize.test: Added some basic regression tests, in particular to challenge the filter options provided by Serializer->deepSerialize() and Serializer->all(). - Included a test for commit 595e6a2. - Along the line, two minor issues where fixed: 1) Set Serializer->ignore() to public, otherwise the various external message sends to this method would fail; 2) Object-serialize() did not distinguish between serializing a per-object or per-class container properly; as a consequence, per-object containers were not restored at all. Add a test covering this. - library/serialize/serializer.tcl: Due to the split between serializer and object system serializer, the ignore settings (passed as object variables, i.e., ignoreVarRE) got lost. This is fixed now ... 2012-02-16 Gustaf Neumann - treating incompatible forwarding to slot vs. slot option noaccessor - extended regression test - use Tcl's EXTERN macro instead of "extern" 2012-02-04 Gustaf Neumann update release procedure 2012-02-03 Gustaf Neumann - mv next-tutorial (source, images) into own subdirectory doc/next-tutorial/ - Bump version number of head to 2.0b4 - improve wording in documentation