/* ---------------------------------------------------------------------- */ /* * Version 1. */ Initial release. /* ---------------------------------------------------------------------- */ /* * Version 2. */ The 'any' keyword is now called 'any', as documented. (This word was previously reserved by the TADS 3 compiler, so the it was temporarily replaced with 'any_', but this is no longer necessary.) Collections such as lists and vectors can now be used as criteria, in which case they will be met only by objects that belong to them. The all() function will take advantage of such criteria by only considering members of the collection. The 'definition' macro has been changed to define a new Criterion sub- class instead of a function. Such sub-classes are recognized by the criteria compiler, which will create instances that can be used throughout an entire search. This will make definitions more efficient when used in all() and related searches, but note that a terminating semi-colon is now required when using this macro. The criteria compiler is now better at determining how many parameters are required when a property pointer is used as a criterion. The following example, which was used in the manual to demonstrate a certain limitation, now works as one would expect: all(FireSource, &isIn, any, [Flammable]) /* ---------------------------------------------------------------------- */ /* * Version 3. */ Added a new function: exists(). This simply looks for an object that meets the given criteria, returning true if there was one, nil otherwise. In addition to nested 'any' phrases, a method call criterion now accepts nested 'all' phrases. This means that we can check if a method returns true for all objects matching a set of nested criteria.