Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Inform 6.15 released

3 views
Skip to first unread message

Graham Nelson

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

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.,

<SetTo dial (4*the_time)>;

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 <release number>.<serial code> format.

Note that v6.15 Technical Manual now contains an algorithm for
syntax-colouring Inform source code, incorporating corrections made
by John Wood.
---------------------------------------------------------------------------

--
Graham Nelson | gra...@gnelson.demon.co.uk | Oxford, United Kingdom


0 new messages