FreeM 0.62.2

From FreeM Wiki
Jump to navigation Jump to search

Overview

FreeM 0.62.2 was released on March 23, 2025

Changes

Comply with MDC Type A extension X11/96-13 - Portable length of names

This MDC Type A extension requires implementations that exceed the proposed 31-character length limit for identifiers (variable names, function and subroutine names, etc) treat all characters beyond the 31st as syntactically significant, and also requires that identifiers beyond the implementation's length limit generate error M56, instead of being silently truncated.

This behavior applies only when $DIALECT for the routine buffer in question is M5, MDS, or FREEM (the default).

Fix reverse $QUERY polyfill

In previous releases of FreeM, routine names containing dots were allowed (ex. %SYS.INIT). Reverse $QUERY (implemented in M code) originally used such a routine name.

With the release of FreeM 0.62.1, support for routine names containing dots was removed, as the new object-oriented programming features re-purposed the dot as an indicator that the portion of the identifier preceding the dot represents a class instance, while the portion following the dot represents a method belonging to that class. However, the routine implementing reverse $QUERY did not get renamed in accordance with this change.

While this oversight did not consistently and obviously break functionality of code using reverse $QUERY, such cases were possible, and its use could lead to intermittent segmentation violations, or worse, stack-smashing.

FreeM 0.62.2 renames the M routine such that it no longer contains a dot, thus mitigating the prior regression.

It should be noted that the regression was in M glue code that connects FreeM's C code to David Wicksell's actual polyfill, and David's code did not contain any bugs. This problem was in no way due to anything David or his code did.

Silently truncate long NAME exprs in obsolete MDC dialects

This somewhat relates to the work updating FreeM to comply with MDC Type A extension X11/96-13. Previously, code running with a $DIALECT value of M77, M84, M90, or M95 had no length limit on identifiers, and treated all characters in such identifiers as syntactically significant.

With this change, FreeM will treat any character beyond the standard 8-character limit as syntactically insignificant when $DIALECT is set to M77, M84, M90, or M95. This should bring these legacy dialects closer to compliance with the MDC standards they attempt to emulate.

Note that the default value of $DIALECT is FREEM, which enables all features from the Millennium Draft Standard, as well as all FreeM vendor extensions, and as such, most code will not be affected by this change.

Packaging

FreeM 0.62.2 is natively packaged for:

  • Solaris 5.8 on 64-bit SPARC
  • Solaris 5.10 on 64-bit Intel
  • OpenIndiana Hipster 5.11 on 64-bit Intel
  • Debian Bookworm, Bullseye, and Trixie on amd64, i386, armhf, and arm64
  • Ubuntu Noble and Oracular on amd64, armhf, and arm64
  • NetBSD pkgsrc-wip

Links