VAX PASCAL V3.8 Release Notes
VAX PASCAL V3.8 Release Notes
29 July 1988
29 July 1988
This document contains information about new features in VAX
PASCAL V3.8, differences between V3.8 and previous versions,
corrections included in VAX PASCAL V3.8, and other topics.
This file is of interest to both system management and
application programmers.
CONTENTS
CHAPTER 1 VAX PASCAL V3.8 RELEASE NOTES
1.1 OVERVIEW OF VAX PASCAL V3.8 . . . . . . . . . . . 1-1
1.2 LMF SUPPORT . . . . . . . . . . . . . . . . . . . 1-1
1.3 SUBSTANTIALLY FASTER ENVIRONMENT FILE SUPPORT . . 1-1
1.3.1 Maximum Number Of Environment Files Increased . 1-2
1.3.2 Number Of Simultaneously Open Files Increased . 1-2
1.3.3 Locality Of Reference In Environment Files . . . 1-3
1.3.4 VAX RMS Multiblock And Multibuffer Counts . . . 1-3
1.3.5 Compatibility With Previous Compilers . . . . . 1-3
1.4 MTPR/MFPR BUILTIN ROUTINES . . . . . . . . . . . . 1-3
1.4.1 MTPR Builtin Procedure . . . . . . . . . . . . . 1-4
1.4.2 MFPR Builtin Function . . . . . . . . . . . . . 1-4
1.5 INSTALLATION VERIFICATION PROCEDURE (IVP) . . . . 1-4
1.6 COMPATIBILITY NOTES . . . . . . . . . . . . . . . 1-4
1.7 PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY
ATTRIBUTES . . . . . . . . . . . . . . . . . . . . 1-5
1.8 STARLET.PAS INSTALLATION DEPENDENCY . . . . . . . 1-5
1.9 KNOWN RESTRICTIONS . . . . . . . . . . . . . . . . 1-5
1.9.1 Blank Padding Of PACKED ARRAY OF CHAR Value
Parameters . . . . . . . . . . . . . . . . . . . 1-6
1.9.2 String Expressions As Actual Value Parameters . 1-6
1.9.3 Passing File Buffer Variables . . . . . . . . . 1-6
1.9.4 Non-printable Characters In Compile-time
Expressions . . . . . . . . . . . . . . . . . . 1-7
1.9.5 Using The ARGUMENT Routine With VAR Parameters . 1-7
1.10 NEW ERROR MESSAGES . . . . . . . . . . . . . . . . 1-8
CHAPTER 2 VAX PASCAL V3.8 MAINTENANCE FIXES
CHAPTER 1
CHAPTER 1
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
1.1 OVERVIEW OF VAX PASCAL V3.8
VAX PASCAL V3.8 contains the following new features:
1. LMF support
2. Substantially faster environment file support
3. MTPR/MFPR builtin routines
1.2 LMF SUPPORT
VAX PASCAL V3.8 contains support of the License Management Facility
(LMF). When VAX PASCAL V3.8 in invoked, it checks to see whether it
is licensed on the machine. If a valid license exists, the
compilation continues. If a valid license does not exist, an error
message is printed and the compilation is aborted. For example,
$ pascal test
%LICENSE-F-NOAUTH, DEC PASCAL use is not authorized on this node
-LICENSE-F-NOLICENSE, no license is active for this software product
-LICENSE-I-SYSMGR, please see your system manager
Please refer to the VAX/VMS License Management Facility manual for
more information.
1.3 SUBSTANTIALLY FASTER ENVIRONMENT FILE SUPPORT
VAX PASCAL V3.8 contains several improvements in the inheriting of
environment files. These improvements result in substantial decreases
in elapsed time and Direct I/O counts. For example, one test program
1-1
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
of 2339 lines that inherited 14 different environment files generated
24,652 Direct I/Os and used 8:10.9 seconds of elapsed time on an empty
VAX 8800 when compiled with VAX PASCAL V3.7. The same program when
compiled with V3.8 in the same environment, only generated 73 Direct
I/Os and used only 17.1 seconds of elapsed time. This amounts to a
99.7% improvement in the Direct I/O count and a 96% improvement in
elapsed time.
Of course, this dramatic increase in performance is not without some
cost. The VAX PASCAL V3.8 compiler will use more virtual memory
(actual amount is directly proportional to the number and the size of
the environment files inherited) and keep more environment files open
simultaneously than previous releases. However, programs which don't
inherit environment files should not see any additional overhead.
1.3.1 Maximum Number Of Environment Files Increased
The maximum number of environment files that you can inherit has been
increased from 128 to 512. Additionally, the compiler now produces an
error message when the limit is exceeded.
1.3.2 Number Of Simultaneously Open Files Increased
In previous releases of VAX PASCAL, the compiler only kept one
environment file open at any time. When it needed information from
another file, it closed the current environment file and opened the
desired environment file. This behavior caused a large amount of disk
I/O for programs that used many environment files. The compiler has
been enhanced to keep several environment files open simultanously.
The maximum number of environment files that the compiler can open
simultanously is dependant on the process' open file quota. The
algorithm used by the compiler is:
"Maximum OPEN" = MIN(50,"Current Open File Quota" - 16)
The current open file quota is determined by using the JPI$_FILCNT
item with the SYS$GETJPI system service. An adjustment of 16 is made
to account for other files that compiler might have to open (.OBJ,
.LIS, .DIA, etc.). The maximum of 50 is chosen to prevent excessive
use of virtual memory. If you inherit more environment files than
this number, the compiler will close some environment files in order
to open other files. If the resulting number is less than 50, you can
increase the performance of the compiler by raising the FILLM quota in
the UAF entry.
1-2
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
1.3.3 Locality Of Reference In Environment Files
In previous releases, the contents of the environment file was a
breadth-first scan of the outermost symbols of the compiler's symbol
table. However, when a symbol is used from an environment file, a
depth-first scan is performed. This caused considerable page faults
and increased the number of $GETs to the file. The compiler has been
enhanced to write out environment files in a depth-first order to
maximize the locality of reference when a symbol is inherited.
1.3.4 VAX RMS Multiblock And Multibuffer Counts
Since previous compilers continually opened and closed the environment
files, the values of the RMS multiblock and multibuffer counts did not
affect the performance of inheriting. However, since the compiler now
will keep the environment file open for an extended length of time,
the compiler now computes sufficient values to map a reasonable
portion of the file. However, STARLET.PAS is excluded from this
algorithm since the number of symbols used is quite small.
1.3.5 Compatibility With Previous Compilers
The VAX PASCAL V3.8 compiler will accept environment files generated
by earlier compilers. The environment files generated by V3.8 can be
inherited by V3.4, V3.5, V3.6, and V3.7 compilers. To achieve the
best performance when inheriting environment files, we suggest that
you rebuild them with the V3.8 compiler.
1.4 MTPR/MFPR BUILTIN ROUTINES
The VAX PASCAL compiler generates user-mode code. VAX PASCAL does not
explicitly support the running of VAX PASCAL generated code in kernel
mode. However, if the following rules are observed, then the
generated code has a good chance of working as expected in elevated
access modes.
1. All code must be compiled with the /NOCHECK qualifier or
[CHECK(NONE)] attribute. The VAX PASCAL run-time signalling
method relies on trying to execute the HALT instruction. In
user-mode, this causes an exception which is a signal to the
VAX PASCAL run-time library. In kernel-mode, this simply
HALTs the machine.
2. Avoid all routine calls which translate into run-time library
calls. These include all I/O routines, several arithmetic
routines, several string routines, etc. A list of such
1-3
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
routines is not provided.
Two new builtin routines have been added to VAX PASCAL V3.8. These
new builtin routines provide access to the MTPR and MFPR privileged
VAX instructions.
1.4.1 MTPR Builtin Procedure
The MTPR procedure assigns a value into a VAX internal processor
register. MTPR has the following form:
MTPR(ipr_register_expression, source_expression)
The ipr_register_expression and source_expression parameters are
expressions compatible with the UNSIGNED type. The source expression
is moved into the internal processor register with the MTPR privileged
VAX instruction.
1.4.2 MFPR Builtin Function
The MFPR function returns the value of a VAX internal processor
register. MFPR has the following form:
MFPR(ipr_register_expression)
The ipr_register_expression parameter is an expression compatible with
the UNSIGNED type. MFPR returns a value of type UNSIGNED. The value
of the internal processor register is retrieved with the MFPR
privileged VAX instruction.
1.5 INSTALLATION VERIFICATION PROCEDURE (IVP)
The VAX PASCAL IVP is left on the system disk in
SYS$COMMON:[SYSTEST.PASCAL]PASCAL$IVP.COM. This command file can be
invoked at any time to verify that the VAX PASCAL compiler is present
and working.
1.6 COMPATIBILITY NOTES
There have been no source incompatibilities added to VAX PASCAL V3.8.
All valid programs will continue to work as expected.
The "SYNPERIOD, Syntax: '.' expected" error message generated by the
1-4
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL compiler has been changed from a warning-level to an
error-level. There have been several reports of confusion resulting
from programs that had unbalanced END keywords and were compiled with
/NOWARNINGS. These programs didn't produce any visible diagnositics.
By changing the severity from warning to error, the /NOWARNINGS
qualifier will not prevent the diagnostic from being issued.
The VAX SCA source code analyzer files produced by VAX PASCAL V3.8
with the /ANALYSIS_DATA qualifier require VAX SCA V1.1 or greater.
The source code analyzer files will not work correctly with VAX SCA
V1.0.
The object files produced by VAX PASCAL V3.8 require VAX/VMS V4.6 or
later.
1.7 PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY ATTRIBUTES
When an existing indexed file is opened, the Run-Time Library compares
the keys in the file against the KEY attributes specified in the
program. If no KEY attribute was specified for the corresponding key
in the indexed file, then the comparison is bypassed and the open
continues. The Run-Time Library compares the position and the
datatype of the file's keys against the KEY attributes specified. If
the KEY attribute explicitly specifies a collating sequence (ASCENDING
or DESCENDING) then the specified sequence must match that of the key
in the file. If no sequence is specified then either sequence is
allowed. The CHANGES and DUPLICATES options are not checked.
1.8 STARLET.PAS INSTALLATION DEPENDENCY
The VAX PASCAL V3.8 kit contains a new STARLET kit. This kit creates
definition files for several Run-Time Libraries. See the PASSTR V3.8
release notes for more information.
The STARLET.PAS and RTL definition files that are built by the
PASSTR038 facility are built from a file of definitions shipped on the
VAX/VMS kit. This file is SYS$LIBRARY:STARLETSD.TLB. This file is
owned and maintained by the VAX/VMS group and may be updated by
VAX/VMS releases. After each VAX/VMS update or upgrade, reinstalling
STARLET allows you to get any corrections or enhancements made to
SYS$LIBRARY:STARLETSD.TLB.
1.9 KNOWN RESTRICTIONS
This section includes all known restrictions in the VAX PASCAL V3.8
compiler.
1-5
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
1.9.1 Blank Padding Of PACKED ARRAY OF CHAR Value Parameters
A string parameter must be structurally compatible with its
corresponding formal parameter. The VAX PASCAL compiler will not
blank pad a fixed length character string expression with blanks to
match the formal declaration. Also VAX PASCAL will not blank pad
default values for such string parameters. For example, the following
program segment will produce a compile-time error:
TYPE STR40 = PACKED ARRAY [1..40] OF CHAR;
PROCEDURE PASS_STR40( P : STR40 );
BEGIN
END;
BEGIN
PASS_STR40('Shorter than 40 chars');
END.
1.9.2 String Expressions As Actual Value Parameters
If several formal value parameters are declared in the same section
and have the same conformant packed array schema, all corresponding
actual parameters must have the same bounds at run-time. For example:
PROCEDURE P( A,B : PACKED ARRAY [L..U:INTEGER] OF CHAR );
In a call to P, the actual parameters passed to A and B must have
identical string bounds. However, due to an error in the VAX PASCAL
compiler, the bounds of these parameters are not checked. If a
program calls P with two character-string parameters of different
lengths, an error will not be signaled and the bound identifiers L and
U will not correctly describe the bounds of the formal parameter B.
This restriction applies only to string expressions passed to value
conformant PACKED ARRAY OF CHAR parameters. For all other types of
parameters, bounds checking is done during compile-time.
1.9.3 Passing File Buffer Variables
When the buffer variable of a file is passed as a VAR parameter, the
allocation size of the formal VAR parameter must match that of the
components of the file. Failure to do so will result in an Internal
Compiler Error. For example:
PROGRAM A;
VAR
1-6
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
F : PACKED FILE OF 0..65535;
G : FILE OF [WORD] 0..65535;
PROCEDURE P( VAR I : INTEGER ); EXTERNAL;
BEGIN
P(F^); { causes an Internal Compiler Error }
P(G^); { causes an Internal Compiler Error }
END.
1.9.4 Non-printable Characters In Compile-time Expressions
The extended syntax for imbedding non-printable characters in string
literals may yield incorrect results when used in compile-time
expressions. For example:
PROGRAM A(OUTPUT);
CONST BOOL = 'BELL'(7) = 'BELL'(7)'CHAR';
VAR STRING : PACKED ARRAY [1..32] OF CHAR :=
'STRING WITH A BELL'(7)' CHARACTER';
BEGIN
WRITELN(BOOL,' ',STRING);
END.
The above program will print "TRUE" for BOOL and garbage characters
for STRING. As a workaround, you can use run-time expressions. For
example:
PROGRAM A(OUTPUT);
VAR BOOL : BOOLEAN;
STRING : PACKED ARRAY [1..32] OF CHAR;
BEGIN
BOOL := 'BELL'(7) = 'BELL'(7)'CHAR';
STRING := 'STRING WITH A BELL'(7)' CHARACTER';
WRITELN(BOOL,' ',STRING);
END.
We expect to lift this restriction in a future release of VAX PASCAL.
1.9.5 Using The ARGUMENT Routine With VAR Parameters
The ARGUMENT builtin routine cannot be used on the left-hand side of
1-7
VAX PASCAL V3.8 RELEASE NOTES
VAX PASCAL V3.8 RELEASE NOTES
an assignment statement. However, you can still assign into VAR
parameters with the LIST attribute by using the IADDRESS builtin. For
example:
PROCEDURE A(VAR P : [LIST] INTEGER);
VAR I,PTR : ^INTEGER;
BEGIN
FOR I := 1 TO ARGUMENT_LIST_LENGTH(P) DO
BEGIN
PTR := IADDRESS(ARGUMENT(P,I));
PTR^ := 42;
END;
END;
We will consider further enhancements to the ARGUMENT routine in a
future release of VAX PASCAL.
1.10 NEW ERROR MESSAGES
CNFREQNCA, Conformants of this parameter type require CLASS_NCA
Error. The conformant parameter cannot be described with the
default CLASS_A descriptor. Add the CLASS_NCA attribute to the
parameter declaration.
MAXNUMENV, Maximum number of environments exceeded
Fatal. More than 512 environment files were used in the
comipilation.
1-8
CHAPTER 2
CHAPTER 2
VAX PASCAL V3.8 MAINTENANCE FIXES
VAX PASCAL V3.8 MAINTENANCE FIXES
This chapter describes all the changes for the VAX PASCAL V3.8
release.
o The compiler would occasionally generate a invalid VAX SCA
source analysis file when the program was very large (approx.
9000 lines). The resulting file would not load correctly
into a VAX SCA library. This problem has been corrected.
o Incorrect code was occasionally generated when a module
contains a procedure call which passed a packed character
conformant array to an unsafe conformant array parameter.
This problem has been fixed and the correct code is now
generated.
o (SPRs ICA-12279 & ICA-13478) Incorrect code was occasionally
generated for programs that used procedure parameters and the
procedures contained up-level references. The correct code
is now generated.
o (SPR ICA-14581) When compiling with overflow checking
enabled, the compiler would occasionally generate incorrect
code which would produce erroneous integer overflow errors.
The compiler now produces inproved code sequences which do
not generate exceptions.
o (SPRs ICA-13631 & SPR 11-94665) Incorrect code was
occassionally generated for a program containing assignment
statements for unaligned strings less than 32 bits in size
and the assignment required blank padding. This problem has
been fixed and the correct code is now generated.
2-1
VAX PASCAL V3.8 MAINTENANCE FIXES
VAX PASCAL V3.8 MAINTENANCE FIXES
o A fatal I/O error occurred when a compilation had diagnostic
errors and the last diagnostic message was in a section of
code that was extracted from a text library and a listing was
not being produced. This problem has been fixed.
o Incorrect code was generated when passing variables which
were declared with the VALUE attrubute to %REF UNSAFE formal
parameters. This problem has been fixed and the correct code
is now generated.
o The compiler would not optimally align variables allocated on
the stack. The algorithm has been modified to align on
longword boundaries wherever possible to maximize hardware
performance.
o Incorrect code was occasionally generated for string
concatenation when the operands were results of PAD or SUBSTR
builtins. This problem has been fixed.
o An error was not detected and incorrect code was generated
for a conformant array parameter whose components are
non-contiguous. This type of parameter requires a CLASS_NCA
descriptor and the compiler did not require the CLASS_NCA
attribute when it should have.
o Incorrect code was occassionally generated for calls to the
builtin routines FIND_FIRST_BIT_SET and FIND_FIRST_BIT_CLEAR
nested within a looping construct.
o (SPR ICA-7917) An Reserved Operand Fault would occur at
run-time if the ZERO builtin function was used with
conformant array parameters. This problem has been fixed.
o The compiler would occasionally generate an Internal Compiler
Error during Source Analysis when generating VAX SCA
information for formal routine declarations that included
conformant array parameters.
o (SPR ICA-14370) The compiler would occasionaly enter an
infinite loop of allocating virtual memory if the ZERO
function was used in constructors with nested structured
types. This problem has been fixed.
2-2