interp.test

Clone Tools
  • last updated 23 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
nx::test: - change test cases to newer interface - don't use "namespace import nx::*" in test cases when not required

  1. … 34 more files in changeset.
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 an 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 parametererization 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

  1. … 43 more files in changeset.
- use alias-stubs for aliases pointing to objects. This allows us to distinguish between cases, where an object is dispatchable due to the alias or due to allowmethoddispatch (when the object happens to be a subobject and has therefore its cmd in the same namespace). The semantics are now: - aliases to objects are always dispatchable, no matter, how allowmethoddispatch is set. - direct subobjects of objects are currently on dispatchable when allowmethoddispatch is set.

  1. … 4 more files in changeset.
- nsf.c * implemented NsfObjDispatchNRE and NsfObjDispatch * this fixed all issues of tcl8.6 and interp.test (xocomm still hangs in tcl 8.6)

  1. … 3 more files in changeset.
- library/lib/test.tcl: Disarming [exit] for during the execution of test suites. I allow for using [exit] statements in (legacy) test suites, however, I provided for disabling them for the scope of Test->run() executions. During a test run, [exit] is replaced by a [return] trampoline. - library/xotcl/tests/xocomm.test: We now have a total MEM_COUNT of 0, which leaves us with a contains.test as the last patient (MC of 5). - tests/interp.test: minor cleanup

  1. … 2 more files in changeset.
- generic/nsf.c: For "tolerating" hidden objects, I verified the various occurrences of conitional branching based on the cmd's epoch counter. While most occurrences are not concerned (cmds of nested objects, or simply non-object commands), I identified three relevant spots: a) In NsfProcAliasMethod(), invalidating and rebinding the alias target command (including hidden objects as alias pointers) is based on the epoch counter; b) in MixinSearchProc() the lookup of mixed-in methods is affected; c) using CmdListRemoveEpoched() (as the name says), "deleted" commands are identified by looking at the cmd epoch and sorted out from mixin lists computed for precedence lists. I corrected cases b) and c), with the fixes being covered by accompanying tests; a) turned out to be consistent with alias rebinding behaviour for [rename]. While we could correct a) for hidden cmd awareness, this would have to be done for the likeminded alias + [rename] as well. - generic/nsf.c: Renamed CmdListRemoveEpoched() to CmdListRemoveDeleted() - tests/interp.test: Added tests on b) and c), as well as hiding globally namespaced procs and objects as alias targets (merely for documenting the behaviour).

  1. … 1 more file in changeset.
- deactivated a few tests for the time being for tcl 8.6

  1. … 1 more file in changeset.
- generic/nsf.c: [current calledclass] used to return a literal "NULL" for cases of no active callstacked class. I fixed this, with [current calledclass] now reporting an empty string in these cases. - library/lib/test.tcl: Adjusted the explanations along the exit/return fix - tests/introspection.test: Added some basic testing of [current calledclass]

  1. … 3 more files in changeset.
* added flag "-keepvars" to nsf::finalize for handling cases in interp.test * reactivated tests and simplified in interp.test

  1. … 4 more files in changeset.
- nsf.c: * change mem-count statistics from per-interp to per-thread * generalized GetObjectFromCmdTable() to ReverseLookupCmdFromCmdTable() * changed GetObjectScreenedByCmdName() to GetHiddenObjectFromCmd() * modularized interp.test to locate potential problems faster * partly simplified interp.test syntactically * deacivated a few tests in interp.test for the time being (runs commands after finalize)

  1. … 3 more files in changeset.
- generic/nsf.c: After several takes, adding support for basic handling of hidden and re-exposed objects in the sense of [interp hidden|hide|expose]. I wanted to make sure that NSF does not crash upon basic hiding/exposing operations (see tests/interp.test) and guarantees that hidden/re-exposed objects are properly handled when cleaning up object systems, i.e., the destructors are called and physical deletion is performed. [interp hidden|hide|expose] is challenging for NSF (as well as TclOO) because they way it is implementing effectively modifyies command names *without* providing any calling back to trace these changes (as for renames). As a consequence, object and command names start to diverge once an object has been hidden or re-exposed. As the changes affect the cleanup machinery in ObjectSystemsCleanup() & friends, I verified for leaks by running valgrind; no leaks were found running destroy.test and interp.test. - tests/interp.test: A test suite that covers basic scenarios of hiding and exposing objects. - Makefile.in: Registering interp.test with make env

  1. … 2 more files in changeset.