This commit is contained in:
ceriel 1988-02-01 11:26:16 +00:00
parent e130b1991f
commit d70a20ae4c

View file

@ -30,13 +30,6 @@ in the "Report on The Programming Language Modula-2", as it appeared in [1],
from now on referred to as "the Report". from now on referred to as "the Report".
Also, the Report sometimes leaves room for interpretation. The section numbers Also, the Report sometimes leaves room for interpretation. The section numbers
mentioned are the section numbers of the Report. mentioned are the section numbers of the Report.
.PP
Basically, the compiler recognizes the language as described in [1], and
most of [2], for backwards compatibility. It warns the user for old-fashioned
constructions (constructions that [1] does not allow).
If the \fI-Rm2-3\fP option (see [6]) is passed to \fIack\fP, this backwards
compatibility feature is disabled. Also, it may not be present on some
smaller machines, like the PDP-11.
.NH 2 .NH 2
Syntax (section 2) Syntax (section 2)
.PP .PP
@ -68,8 +61,11 @@ The Foreign pragma is only meaningful in a \f5DEFINITION MODULE\fP,
and indicates that this and indicates that this
\f5DEFINITION MODULE\fP describes an interface to a module written in another \f5DEFINITION MODULE\fP describes an interface to a module written in another
language (for instance C, Pascal, or EM). language (for instance C, Pascal, or EM).
Runtime checks are: range-checks, checks when assigning CARDINALS to INTEGERS Runtime checks that can be disabled are:
and vice versa, and checks that FOR-loop control-variables are not changed range checks,
\f5CARDINAL\fP overflow checks,
checks when assigning a \f5CARDINAL\fP to an \f5INTEGER\fP and vice versa,
and checks that \f5FOR\fP-loop control-variables are not changed
in the body of the loop. in the body of the loop.
.PP .PP
Constants of type \f5LONGINT\fP are integers with a suffix letter \f5D\fP Constants of type \f5LONGINT\fP are integers with a suffix letter \f5D\fP
@ -96,7 +92,8 @@ Each operand of a constant expression must be a constant:
a string, a number, a set, an enumeration literal, a qualifier denoting a a string, a number, a set, an enumeration literal, a qualifier denoting a
constant expression, a typetransfer with a constant argument, or constant expression, a typetransfer with a constant argument, or
one of the standard procedures one of the standard procedures
\f5ABS\fP, \f5CAP\fP, \f5CHR\fP, \f5LONG\fP, \f5MAX\fP, \f5MIN\fP, \f5ODD\fP, \f5ORD\fP, \f5ABS\fP, \f5CAP\fP, \f5CHR\fP, \f5LONG\fP, \f5MAX\fP, \f5MIN\fP,
\f5ODD\fP, \f5ORD\fP,
\f5SIZE\fP, \f5SHORT\fP, \f5TSIZE\fP, or \f5VAL\fP, with constant argument(s); \f5SIZE\fP, \f5SHORT\fP, \f5TSIZE\fP, or \f5VAL\fP, with constant argument(s);
\f5TSIZE\fP and \f5SIZE\fP may also have a variable as argument. \f5TSIZE\fP and \f5SIZE\fP may also have a variable as argument.
.PP .PP
@ -109,7 +106,8 @@ Type declarations (section 6)
.NH 3 .NH 3
Basic types (section 6.1) Basic types (section 6.1)
.PP .PP
The type \f5CHAR\fP includes the ASCII character set as a subset. Values range from The type \f5CHAR\fP includes the ASCII character set as a subset.
Values range from
\f50C\fP to \f5377C\fP, not from \f50C\fP to \f5177C\fP. \f50C\fP to \f5377C\fP, not from \f50C\fP to \f5177C\fP.
.NH 3 .NH 3
Enumerations (section 6.2) Enumerations (section 6.2)
@ -121,14 +119,15 @@ Record types (section 6.5)
.PP .PP
The syntax of variant sections in [1] is different from the one in [2]. The syntax of variant sections in [1] is different from the one in [2].
Our implementation recognizes both, giving a warning for the older one. Our implementation recognizes both, giving a warning for the older one.
However, see section 2. However, see section 3.
.NH 3 .NH 3
Set types (section 6.6) Set types (section 6.6)
.PP .PP
The only limitation imposed by the compiler is that the base type of the The only limitation imposed by the compiler is that the base type of the
set must be a subrange type, an enumeration type, \f5CHAR\fP, or set must be a subrange type, an enumeration type, \f5CHAR\fP, or
\f5BOOLEAN\fP. So, the lower bound \f5BOOLEAN\fP.
does not have to be positive. However, if a negative lower bound is used, So, the lower bound may be negative.
However, if a negative lower bound is used,
the compiler gives a warning of the \fIrestricted\fP class (see the manual the compiler gives a warning of the \fIrestricted\fP class (see the manual
page of the compiler). page of the compiler).
.PP .PP
@ -145,7 +144,8 @@ Operators (section 8.2)
.NH 4 .NH 4
Arithmetic operators (section 8.2.1) Arithmetic operators (section 8.2.1)
.PP .PP
The Report does not specify the priority of the unary operators \f5+\fP or \f5-\fP: The Report does not specify the priority of the unary
operators \f5+\fP or \f5-\fP:
It does not specify whether It does not specify whether
.DS .DS
.ft 5 .ft 5
@ -217,15 +217,15 @@ Standard procedures (section 10.2)
.PP .PP
Our implementation supports \f5NEW\fP and \f5DISPOSE\fP Our implementation supports \f5NEW\fP and \f5DISPOSE\fP
for backwards compatibility, for backwards compatibility,
but issues warnings for their use. However, see section 2. but issues warnings for their use. However, see section 3.
.PP .PP
Also, some new standard procedures were added, similar to the new standard Also, some new standard procedures were added, similar to the new standard
procedures in Wirth's newest compiler: procedures in Wirth's newest compiler:
.IP \- .IP \-
\f5LONG\fP converts an argument of type \f5INTEGER\fP or \f5REAL\fP to the types \f5LONGINT\fP or \f5LONG\fP converts an argument of type \f5INTEGER\fP or \f5REAL\fP to the
\f5LONGREAL\fP. types \f5LONGINT\fP or \f5LONGREAL\fP.
.IP \- .IP \-
\f5SHORT\fP performs the inverse transformation, without range-checks. \f5SHORT\fP performs the inverse transformation, without range checks.
.IP \- .IP \-
\f5FLOATD\fP is analogous to \f5FLOAT\fP, but yields a result of type \f5FLOATD\fP is analogous to \f5FLOAT\fP, but yields a result of type
\f5LONGREAL\fP. \f5LONGREAL\fP.
@ -243,6 +243,16 @@ work properly.
.PP .PP
The procedure \f5IOTRANSFER\fP is not implemented. The procedure \f5IOTRANSFER\fP is not implemented.
.NH 1 .NH 1
Backwards compatibility
.PP
Besides recognizing the language as described in [1], the compiler recognizes
most of the language described in [2], for backwards compatibility.
It warns the user for old-fashioned
constructions (constructions that [1] does not allow).
If the \fI-Rm2-3\fP option (see [6]) is passed to \fIack\fP, this backwards
compatibility feature is disabled. Also, it may not be present on some
smaller machines, like the PDP-11.
.NH 1
Compile time errors Compile time errors
.PP .PP
The compile time error messages are intended to be self-explanatory, The compile time error messages are intended to be self-explanatory,
@ -270,7 +280,8 @@ The ACK Modula-2 compiler produces code for an EM machine as defined in [3].
Therefore, it depends on the implementation Therefore, it depends on the implementation
of the EM machine for detection some of the runtime errors that could occur. of the EM machine for detection some of the runtime errors that could occur.
.PP .PP
The \fITraps\fP module enables the use to install his own runtime error handler. The \fITraps\fP module enables the user to install his own runtime
error handler.
The default one just displays what happened and exits. The default one just displays what happened and exits.
Basically, a trap handler is just a procedure that takes an INTEGER as Basically, a trap handler is just a procedure that takes an INTEGER as
parameter. The INTEGER is the trap number. This INTEGER can be one of the parameter. The INTEGER is the trap number. This INTEGER can be one of the