Inform 6.36
Inform 6.36 was released on 25th January 2022.
Features added
-
The algorithm used to apply abbreviations for Z-code has been replaced with a more efficient dynamic programming algorithm, based on the paper by R.A. Wagner "Common phrases and minimum-space text storage", Communications of the ACM, 16 (3) (1973).
-
Inform has been refactored to use dynamic memory allocation rather than fixed size buffers. As a result, the following settings are now removed: if the available space is filled, Inform will allocate more memory without requiring user intervention.
- ALLOC_CHUNK_SIZE
- SYMBOLS_CHUNK_SIZE
- MAX_ABBREVS (removed only for Glulx)
- MAX_ACTIONS
- MAX_ADJECTIVES
- MAX_ARRAYS
- MAX_CLASSES
- MAX_DICT_ENTRIES
- MAX_EXPRESSION_NODES
- MAX_GLOBAL_VARIABLES
- MAX_INCLUSION_DEPTH
- MAX_INDIV_PROP_TABLE_SIZE
- MAX_LABELS
- MAX_LINESPACE
- MAX_LINK_DATA_SIZE
- MAX_LOCAL_VARIABLES (now a constant)
- MAX_LOW_STRINGS
- MAX_NUM_STATIC_STRINGS
- MAX_OBJ_PROP_COUNT
- MAX_OBJ_PROP_TABLE_SIZE
- MAX_OBJECTS
- MAX_PROP_TABLE_SIZE
- MAX_QTEXT_SIZE
- MAX_SOURCE_FILES
- MAX_STATIC_DATA
- MAX_STATIC_STRINGS
- MAX_SYMBOLS
- MAX_TRANSCRIPT_SIZE
- MAX_UNICODE_CHARS
- MAX_VERBS
- MAX_VERBSPACE
- MAX_ZCODE_SIZE
As a result of this, the memory size command line arguments (
$SMALL
,$LARGE
and$HUGE
) are now redundant, and have been removed. -
It is now possible to declare an individual property with the
Property
directive:Property individual propname;
-
A new setting
$ZCODE_LESS_DICT_DATA
has been introduced. When set to a non-zero value, this tells the compiler to omit the last byte of Z-code dictionary entries (which can be referred as#dict_par3
), as this is commonly unused. -
There are now warnings if the compiler detects that the type used in certain expressions is not correct. This only checks expressions that contain defined symbols, and does not change the generated code. The checks are:
remove O
: O is an objectmove O to P
: O is an object; P is an object or a classgive O A
: O is an object; A is an attributeO has/hasnt A
: O is an object; A is an attributeO in/notin P
: O is an object; P is an object or a classX ofclass C
: C is a classX provides P
: P is a propertyX.P
,X.P()
,X.&P
,X.#P
: P is a property
-
Assembly output (
-a
mode) now shows symbolic information for each assembly operand, if possible. -
The
-u
switch now generates$MAX_ABBREVS
possible abbreviations. -
The
Trace verbs
directive now prints out the entire grammar table. -
Using the
-D
switch when the game or library does not supportdebug_flag
now produces an explanatory warning:DEBUG mode is on, but this story or library does not appear to support it
-
Expressions of the form
(x <= y or z)
or(x >= y or z)
now produce a warning message: while their effect is documented, well defined, and is not being changed, it is not necessarily what a user might expect. -
The check for whether an abbreviation actually reduces the size of the Z-code output file has been made more accurate, and the message if an abbreviation does not reduce the size is now a warning, rather than an error.
Bugs fixed
-
For Glulx, stub functions (and the veneer function
Symb__Tab()
) are now always compiled as local-argument functions (with a type byte of 0xC1). Previously, they were in some cases compiled as stack-argument functions (with a type byte of 0xC0). -
Counts of properties in errors and in the statistics report (output with the
-s
switch) are now consistent, and reflect how many properties the user can define. -
The check that there are not too many common properties defined now correctly excludes individual and alias properties.
-
Inform will now report an error if the "class" line of a class definition mentions the class being defined.
-
A crash when compiling a malformed array declaration has been fixed.