Skip to content

Inform 6.34

Compare
Choose a tag to compare
@DavidKinder DavidKinder released this 25 May 13:26
· 1508 commits to master since this release

Inform 6.34 was released on 25th May 2020.

Features added

  • The following system constants are now supported for Glulx: #highest_class_number, #highest_object_number, #lowest_attribute_number, #lowest_action_number, #lowest_routine_number, #lowest_array_number, #lowest_constant_number, #lowest_class_number, #lowest_object_number, and #lowest_property_number.

  • Unicode characters can now be included in Glulx word arrays as literals, e.g.

    Array text1 table "A @{1c4} A";
    Array text2 --> "A @oef A";
    
  • For Glulx, high-plane Unicode characters in the range $100000 to $10FFFF are supported in UTF-8 source code, and in @{...} sequences, which can now contain up to six hex digits.

  • The new command line switch -V simply prints the version and date of the compiler and then exits.

  • The new setting $SERIAL sets the six digit serial number written into the header of the game, e.g.

    $SERIAL=160305
    
  • It has always been possible to replace the paths used by the compiler with a command line option of the form +include_path=foo. It is now possible to add to an existing path without replacing it by using an additional '+' character, like so: ++include_path=foo.

  • The Replace directive can now be applied to routines in any file, whether it has the System_file directive or not. Replace also now works on recursive functions, which it previously did not. Its behavior can now be described this way:

    Replace Func;
    Replace Func OriginalFunc;
    
  • Multiple definitions of Func() may follow this directive. Func will refer to the last-defined version, except that definitions in normal files are preferred over definitions in System_file files or the veneer. With the two-symbol form (introduced in 6.33), the latter symbol will refer to the first-defined version of the function.

  • A new Origsource directive has been added to allow a record of the location of the relevant in a higher-level language that has been converted to Inform 6. (In practice, this will very likely be the location in an Inform 7 source.) The syntax is

    Origsource <file>
    Origsource <file> <line>
    Origsource <file> <line> <char>
    Origsource
    

    The first three forms declare that all following lines are derived from the named Inform 7 source file (with an optional line number and character number). This will be reported in error messages and in debug output. The declaration holds through the next Origsource directive (but does not apply to included files). The fourth form, with no arguments, clears the declaration. Unlike the Include directive, Origsource does not open the named file or even verify that it exists. The filename is treated as an opaque string.

  • The constant $INDIV_PROP_START is now a setting that can be changed for Glulx.

  • Arrays that are never modified can be declared as "static": in Z-code, this places the array at the end of readable memory (after the dictionary and before the beginning of code storage); in Glulx, it places the array at the end of ROM (after string storage). The syntax is

    Array arrayname static --> 1 3 5 7 9 11 13 15;
    

Bugs fixed

  • It is no longer possible to cause values to be pushed onto the stack but not then pulled by evaluating a logical expression but not assigning or using the result of that expression.

  • Replacing a recursive function now works correctly.

  • The output for the $list command line argument now includes the value of the $MAX_ARRAYS setting.

  • Memory settings can no longer overflow if set to very large values. These values are limited to a maximum of 999999999: setting them higher just results in a warning.

  • The debugging output file now contains the correct function addresses even when the compiler has been told to omit unused functions.

  • Invalid statements with empty parentheses (like return ();) now generate a sensible error.

  • Crashes caused by over-long identifiers have been fixed. Note that as a result, the previously allowed (although undocumented) use of strings or dictionary words in an action-based (implicit) switch statement now causes an error.

  • The object table is now always generated at an even Z-Machine address, as the logic in the veneer routine RA__Pr() requires this.

  • The F and u options are now explicitly disallowed with the Switches directive.

  • Assigning values to system functions now leads to an error message, rather than a crash.

  • Crashes due to over-long abbreviations have been fixed.

  • Representing the at symbol '@' by @{0040} now works when compiling to Glulx.

  • The USE_TEMPORARY_FILES option no longer has a bug that led to files being closed more than once.

  • The platform-specific definitions in header.h for Unix have been cleaned up: "UNIX64" has been removed, since it was identical to "UNIX"; and "UNIX" no longer implies "USE_TEMPORARY_FILES".

  • The platform-specific definitions in header.h for the Macintosh have been cleaned up: "MACINTOSH" is now "MAC_CLASSIC"; "OSX" is now "MACOS", and "MACOS" now uses "HUGE_SIZE" for the default array sizes.

  • The maximum length of a verb is now limited to 120 (which can be changed in the source code). Previously very long verbs would crash the compiler.

  • Compiling to Z-code version 3 has shown a number of regressions since Inform 6.15:

    • Diverted actions, of the form <<ACTION>>, are fixed.
    • The veneer routine RA__Pr() can be used.