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:
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
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 explicitely 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)