Mon Oct 06 12:00:00 2025 Andrew Makhorin <mao@gnu.org>

        * MARST 2.8 has been released

        * marst.c, algol.h, alglib2.c, alglib3.c
        The identifiers bool, true, and false were replaced with Bool,
        True, and False, resp., to make the translator and library
        routines as well as the generated code to conform to C23, where
        these identifiers are now reserved keywords.

        * marst.c
        The option '-s' ('--semel') was added.

        By default, in the statement 'for V := A step B until C' the
        step B is evaluated *every time* on execution of the loop that
        conforms to the 1984 International Standard (ISO 1538-1984).
        If this option is enabled, the step B is evaluated *only once*
        before entering the loop that conforms to the Modified Report.

        * marst.c
        The switch bug was fixed (see examples/bug-2.7.alg).

        The switch bug in 2.7 appears due to the following bad imple-
        mentation of the switch statement:

            label switch(int kase) { switch (kase) ... }

        Since the switch works as a procedure, it needs the global dsa
        pointer, which is set, say, in the go to statement, like this:

            go_to(global_dsa = ..., call switch(kase));

        However, if the switch subscript is a formal parameter called
        by name, it also needs the global dsa pointer that translates
        as follows:

            go to(global_dsa = ...,
               call switch(global_dsa = ..., call kase));

        Thus, the first assignment to global_dsa is clobbered by the
        second one that results in memory addressing error.

        In 2.8 the switch statement was re-implemented as usual proced-
        ure with a formal parameter passed by name:

            label switch(arg kase)
               { switch (global_dsa = ..., call kase) ... }

        In this case the go to statement passes the argument descriptor
        rather that evaluates it:

            go_to(global_dsa = ..., call switch(arg(kase)));

        so the switch subscript is evaluated within the switch proced-
        ure that fixes the bug.

Sat Mar 09 12:00:00 2013 Andrew Makhorin <mao@gnu.org>

        * MARST 2.7 has been released

        * configure, Makefile
        The configure script and Makefile were regenerated with a new
        version of GNU autotools (autoconf 2.69 and automake 1.12.5) to
        avoid vulnerabilities related to older versions of automake.

        * doc/*
        The MARST User's Guide in pdf format was regenerated with a new
        version of GNU texinfo (2013-02-01.11).

        * marst.c, macvt.c
        The version number and copyright year numbers were changed.

Fri Nov 16 12:00:00 2007 Andrew Makhorin <mao@mai2.rcnet.ru>

        * MARST 2.6 has been released

        * marst.c
        Two bugs were fixed.

        The first bug was detected due to a test program provided by
        Leif Harcke <lharcke@stanford.edu>. It appeared in a context
        like follows:

           a[i] := i

        where identifier i was considered as the left part of the
        assignment statement (i.e. as if there were a[i] := i := ...)
        while it is a final expression in the right part.

        The second bug appeared if a switch designator was used before
        corresponding switch declaration.

        * tests/*.*
        A set of Algol 60 validation tests were added. These tests were
        kindly provided by Mr Brian Wichmann, one of the authors of the
        Modified Report on Algol 60. For more details about these tests
        see file tests/README.

Sat Jun 30 12:00:00 2007 Andrew Makhorin <mao@mai2.rcnet.ru>

        * MARST 2.5 has been released

        The principal change is upgrading to GPLv3.

Mon Sep 09 12:00:00 2002 Andrew Makhorin <mao@mai2.rcnet.ru>

        * Version 2.4 released.

        * marst.c
        Four serious bugs were fixed due to a test program provided by
        Jan van Katwijk <J.vanKatwijk@ITS.TUDelft.NL>. Because of these
        bugs references to wrong procedure DSAs were generated.

        The first three bugs appeared in a context like follows:

        ...
        procedure a(x);
        <specification of x>;
        begin
          ...
          procedure b(...);
          begin
            ...
            c(x);
            ...

        for which, in the cases when x was a simple formal parameter
        called by name, or a formal switch, or a formal procedure, the
        code was generated as if the parameter x were specified in the
        procedure b, not in a.

        To fix these bugs the context 'current_level()' was replaced by
        the correct context 'dsa_level(id)' in the lines 1738, 1826 and
        1917 within the routine 'actual_parameter'.

        The fourth bug appeared in a context like follows:

        ...
        <type> procedure a(...);
        begin
          ...
          procedure b(...);
          begin
            ...
            a := ...
            ...

        for which the code was generated as if assignment were made to
        the procedure identifier b, not to a.

        To fix this bug the context 'current_level()' was replaced by
        the correct context 'dsa_level(id)+1' in the line 3158 within
        the routine 'assignment_statement'.

        * alglib1.alg
        All standard functions and procedures written in Algol 60 were
        merged into one file.

        * alglib2.c, alglib3.c
        Other two files containing run-time routines written in C were
        renamed.

Mon Nov 19 12:00:00 2001 Andrew Makhorin <mao@mai2.rcnet.ru>

        * Version 2.3 released.

        The copyright notice was changed, because the copyright was
        transferred to the Free Software Foundation, Inc.

Mon Jan 22 12:00:00 2001 Andrew Makhorin <mao@mai2.rcnet.ru>

        * Version 2.2 released.

        * marst.c
        Serious bug was fixed due to bug report provided by Paulo
        Barreto <paulo.barreto@terra.com.br>.

        The error occurred because of incorrect passing a formal
        parameter called by name to other procedure. The MARST
        translator *incorrectly* treated a procedure statement like
        foo(..., bar, ...), where `bar' is a formal parameter called
        by name, as if it would be foo(..., (bar), ...), i.e. as if
        the value of `bar' would be passed, not the name. Therefore
        assignment to the corresponding formal parameter inside the
        procedure `foo' was impossible. In order to fix this bug a
        program fragment was added to the `actual_parameter' routine.

        * ex/a232.alg, ex/tennent.alg
        These two additional examples were added to the package. Due
        to the first example program a serious bug (see notice above)
        was found in MARST 2.1.

Fri Dec 01 12:00:00 2000 Andrew Makhorin <mao@mai2.rcnet.ru>

        * Version 2.1 released.

        * macvt.c
        Minor bug was fixed due to bug report provided by Bernhard
        Treutwein <Bernhard.Treutwein@Verwaltung.Uni-Muenchen.DE>
        (because of this bug the macvt converter incorrectly processed
        --ignore-case command line option)

        GNU MARST User's Guide is included into the distribution in
        texinfo (source), info, ps, pdf, and html formats.

Tue Aug 01 12:00:00 2000 Andrew Makhorin <mao@mai2.rcnet.ru>

        * Version 2.0 released.

        * marst.c
        Parsing implemented in the translator was fully re-programmed
        to continue translation in spite of syntax and semantic errors.
        In version 1.0 the translator had got an inborn defect (not a
        bug): it stopped on the first error found.

        * macvt.c
        Minor changes were made.

        * configure.in, Makefile.in
        Minor changes were made due to patches provided by Alexandre
        Oliva <oliva@lsd.ic.unicamp.br>.

Tue Jul 18 12:00:00 2000 Andrew Makhorin <mao@mai2.rcnet.ru>

        * Version 1.0 released under GNU Coding Standards.
