Index: tests/parameters.test =================================================================== diff -u -rd62bca12731d1c7a1a5cf63f950275852c5b05a2 -rf32527e58ada02a9089fa17e2d1a99bac89f9be9 --- tests/parameters.test (.../parameters.test) (revision d62bca12731d1c7a1a5cf63f950275852c5b05a2) +++ tests/parameters.test (.../parameters.test) (revision f32527e58ada02a9089fa17e2d1a99bac89f9be9) @@ -2259,4 +2259,37 @@ } ? {Foo info properties} "objs:object,1..n {ints:integer,0..n {}} obj:object,0..1" +} + +# +# The following test case sets a value of an instance variable via a +# side-effect of an aliased parameter. Side-effects from aliased +# parameters are discouraged, since the order of the evaluation should +# not matter of an declarative evaluation of the argument vector. +# +# Note that the order, in which is the arguments are provided is not +# significant for the evaluation order. +# +nx::Test case side-effect-set-value { + + nx::Class create C { + :public class method setObjectParams {spec} { + set :objectparams $spec + ::nsf::invalidateobjectparameter [self] + } + :class method objectparameter {} { + return ${:objectparams} + } + :setObjectParams "" + } + + C method second {arg} { + set :first $arg + } + + C setObjectParams {{-first "X"} -second:alias} + ? {[C new -second Y] eval {set :first}} Y "side-effect overwrites default" + + C setObjectParams {-second:alias {-first "X"}} + ? {[C new -second Y] eval {set :first}} Y "side-effect determines value" } \ No newline at end of file