Inform 6.15 now released ======================== The Inform compiler has been given its first maintenance re-release since September. Most of the bugs fixed are, as usual, fairly rare and can be worked around, but there are now enough of them to justify a fresh release. There are also three minor enhancements, one of them quite useful: ---- Parametrised object creation. That is, if you define a class in which objects can be created, and also give it a "create" property like so: Class Monster with ... create [ start_at new_species; move self to start_at; self.species = new_species; ], ... then you can now make creation calls like so: M = Monster.create(Tomb_of_Kings, Ogre); The same applies to "recreate": Monster.recreate(M, Wall_of_Thorns, Hobbit); An attempt to supply more than 3 parameters to either kind of creation will result in a run-time error message. It is now legal to declare a Class with zero create-able objects: Class Moribund(0) ... This is useful (i) to permit a definition like Class Gadgets(NUM_GADGETS) in some library file, where NUM_GADGETS is supplied by the library file's user and might be zero; and/or (ii) to permit "recreate" to be used on objects of the given class, reinitialising them to the values set in the class definition. The ASCII form feed character (12 decimal) is now legal as white space. More precisely, it is in all contexts treated as a line feed. ---- The Inform Technical Manual has as usual also been updated. As a temporary measure, you can get hold of the ANSI C source code for Inform 6.15 from the Inform 6 Home Page: http://www.gnelson.demon.co.uk/inform.html Please note that there may be a delay of one to three days before the new material becomes "visible" from your region of the Internet, because of the regrettable way that my Internet service provider organises its WWW space. The material will in any case be filed in its proper place at ftp.gmd.de shortly. My thanks, as ever, to those who have emailed me bug reports. I am always grateful for these, though it can sometimes take me a couple of weeks to reply when I have a serious email backlog, for which I apologise. Please try to send me a short piece of source code demonstrating what you think is wrong, if possible: this saves on long explanations and makes it much easier for me to find the problem. Graham Nelson 22 March 1998 --------------------------------------------------------------------------- Bugs fixed since 6.14 (as reproduced from the Technical Manual): Getting property lengths wrong for common property values referred to using the superclass operator :: (a bug which sometimes manifests itself in a crash when a common property routine belonging to a superclass is called). Crashing when halting on a memory error because an extremely long string of text has caused MAX_STATIC_STRINGS to be exceeded. (The compiler now ensures that MAX_STATIC_STRINGS is at least twice the size of MAX_QTEXT_SIZE, which should be more than plenty.) Crashing when printing an extremely long "Expected ... but found ..." error (where the second ... stands for an awfully long string of text). An inability to assemble the optional third operand to the "@set_colour" opcode (which is available to Version 6 games only). Array sizes are now formally checked to lie in the range 1 to 32767 entries, with an error message produced if they don't. Misinterpretation of array definitions with calculated sizes: Array Muggins -> MAX_SERVERS * 50; In Inform 6.14, this would be wrongly parsed as an array with one entry, initialised to the value given: whereas 6.15 correctly parses it as an array with MAX_SERVERS*50 initially zero entries. When constants are calculated with at compile time (as in the previous bug), Inform 6.15 now detects overflows of signed addition, subtraction and multiplication. So if, for instance, MAX_SERVERS is 100000, then the following error is produced: Error: Signed arithmetic on compile-time constants overflowed the range -32768 to +32767: "100000 * 50 = 500000" Two bugs in the veneer (both found and fixed by Chris Hall): (i) a program using ".create()" but not "provides" will go into a recursive loop (this never happens if the Inform library is included); (ii) more importantly, some creations of objects within classes where deletions had previously occurred were resulting in two different created objects sharing the same properties. Improper use of 'or' not always producing a good error message (sometimes producing instead the compiler error "*** emitter overflow ***"). The more explanatory error message Error: 'or' not between values to the right of a condition should now be produced in all such cases. Expressions featuring ) followed immediately by ( sometimes crashing the expression evaluator. For instance: (ChooseRoutine())(1); BigRoom.(BigDoor.dir_to)(); The grammar resolving whether a function call is intended, or only a bracketed expression, has been refined so that, e.g., ; is not misinterpreted as containing one argument, the result of the function call "dial(4*the_time)". (If you want this, you must put brackets around it.) Named action constants (like ##Take) not being correctly numbered after the 256th in order of first usage. The "Default" directive for setting constants not properly handling some values which are other than numerical -- e.g., Default Story "Untitled Story"; would not have worked correctly under Inform 6.14. Backpatching "compiler errors" are now suppressed if errors have already been reported (because in some circumstances, error recovery is good enough to allow compilation to continue but not good enough to leave a self-consistent backpatch table in the affected area). Error recovery from missed close-quotation-marks in object definitions has been marginally improved in some cases. Use of the Inform 5 statements 'print_paddr', 'print_addr' and 'print_char' (all illegal in Inform 6) now results in an obsolete usage message which prints up the necessary Inform 6 equivalent. The statistics output now includes the story file's serial codes, in the traditional . format. Note that v6.15 Technical Manual now contains an algorithm for syntax-colouring Inform source code, incorporating corrections made by John Wood. ---------------------------------------------------------------------------