Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought






























                    VAX PASCAL V3.7 Release Notes
                    VAX PASCAL V3.7 Release Notes



                            14 March 1988
                            14 March 1988















     This document contains information about new features in VAX

     PASCAL V3.7, differences between V3.7 and previous versions,

     corrections included in VAX PASCAL V3.7, and  other  topics.

     This  file  is  of  interest  to  both system management and

     application programmers.

























































                                   CONTENTS







CHAPTER 1       VAX PASCAL V3.7 RELEASE NOTES



        1.1     OVERVIEW OF VAX PASCAL V3.7  . . . . . . . . . . . 1-1

        1.2     COMPATIBILITY NOTES  . . . . . . . . . . . . . . . 1-1

        1.3     PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY

                ATTRIBUTES . . . . . . . . . . . . . . . . . . . . 1-1

        1.4     STARLET.PAS INSTALLATION DEPENDENCY  . . . . . . . 1-2

        1.5     KNOWN RESTRICTIONS . . . . . . . . . . . . . . . . 1-2

        1.5.1     Blank Padding Of PACKED ARRAY OF CHAR Value

                  Parameters . . . . . . . . . . . . . . . . . . . 1-2

        1.5.2     String Expressions As Actual Value Parameters  . 1-3

        1.5.3     Passing File Buffer Variables  . . . . . . . . . 1-3

        1.5.4     Non-printable Characters In Compile-time

                  Expressions  . . . . . . . . . . . . . . . . . . 1-3

        1.5.5     Using The ARGUMENT Routine With VAR Parameters . 1-4

        1.5.6     Maximum Number Of Environment Files Allowed  . . 1-4





CHAPTER 2       VAX PASCAL V3.7 MAINTENANCE FIXES





























                              CHAPTER 1
                              CHAPTER 1



                    VAX PASCAL V3.7 RELEASE NOTES
                    VAX PASCAL V3.7 RELEASE NOTES







1.1  OVERVIEW OF VAX PASCAL V3.7



VAX  PASCAL  V3.7  contains  only  maintenance  corrections.   No  new

functionality is provided.







1.2  COMPATIBILITY NOTES



There have been no source incompatibilities added to VAX PASCAL  V3.7.

All valid programs will continue to work as expected.



The "SYNPERIOD, Syntax: '.' expected" error message generated  by  the

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.7

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.







1.3  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




                                 1-1




















































                    VAX PASCAL V3.7 RELEASE NOTES
                    VAX PASCAL V3.7 RELEASE NOTES





in the file.  If no sequence is  specified  then  either  sequence  is

allowed.  The CHANGES and DUPLICATES options are not checked.







1.4  STARLET.PAS INSTALLATION DEPENDENCY



The VAX PASCAL V3.7 kit does not contain a new STARLET.PAS  kit.   The

existing  kit,  PASSTR034,  is  only  provided  to new customers or on

magnetic tape media.  While the STARLET.PAS kit was  not  updated,  we

strongly  suggest that you reinstall PASSTR after each VAX/VMS upgrade

or update.  This is because the STARLET.PAS file that is built by  the

PASSTR034  facility is 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.PAS  allows you to get any corrections or enhancements made to

SYS$LIBRARY:STARLETSD.TLB.







1.5  KNOWN RESTRICTIONS



This section includes all known restrictions in the  VAX  PASCAL  V3.7

compiler.







1.5.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-2




















































                    VAX PASCAL V3.7 RELEASE NOTES
                    VAX PASCAL V3.7 RELEASE NOTES





1.5.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.5.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

      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.5.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';




                                 1-3




















































                    VAX PASCAL V3.7 RELEASE NOTES
                    VAX PASCAL V3.7 RELEASE NOTES





   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.5.5  Using The ARGUMENT Routine With VAR Parameters



The ARGUMENT builtin routine cannot be used on the left-hand  side  of

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.5.6  Maximum Number Of Environment Files Allowed



The  maximum  number  of  environment  files  allowed  in   a   single

compilation  unit  is 128.  Using more than 128 environment files will




                                 1-4




















































                    VAX PASCAL V3.7 RELEASE NOTES
                    VAX PASCAL V3.7 RELEASE NOTES





result in an Internal Compiler Error.  We will consider increasing the

maximum  number of environment allowed and adding an appropriate error

message in a future release of VAX PASCAL.





































































































                                 1-5











































































                              CHAPTER 2
                              CHAPTER 2



                  VAX PASCAL V3.7 MAINTENANCE FIXES
                  VAX PASCAL V3.7 MAINTENANCE FIXES









This chapter describes  all  the  changes  for  the  VAX  PASCAL  V3.7

release.







      o  The compiler would  occasionally  get  an  Internal  Compiler

         Error during Tree Construction when the procedure integration

         optimization was enabled and a callable copy of a routine was

         generated   (because   of   GLOBAL   attribute,   ENVIRONMENT

         attribute, or the compiler's  expansion  heuristic)  and  the

         routine  was  later  expanded  into  another  routine.   This

         problem has been corrected.





      o  (SPR ICA-6429)  The  compiler  would  occasionally   generate

         incorrect  code  when optimizations were enabled for a source

         module containing  nested  WHILE  statements  with  identical

         calls to EOF or EOLN.  This problem has been corrected.





      o  The compiler would occasionally generate an Internal Compiler

         Error  during Profit Analysis when optimizations were enabled

         for a source module containing common sub-expressions  within

         nested looping constructs.





      o  The compiler would generate an Internal Compiler Error during

         Context  Analysis  when  an external value variable reference

         was typecast to a structured type.  The correct code  is  now

         generated.





      o  (SPR ICA-8691)  When   compiling   with   subrange   checking

         enabled,  assignments  to  set  variables sometimes generated

         superfluous instructions.  This problem has been fixed.






                                 2-1




















































                  VAX PASCAL V3.7 MAINTENANCE FIXES
                  VAX PASCAL V3.7 MAINTENANCE FIXES





      o  External pointer variables occasionally caused large  amounts

         of stack space to be allocated.  This problem has been fixed.





      o  (SPR ICA-9880)  An  Internal  Compiler  Error  during   Final

         occasionally occurred when compiling routines containing very

         large CASE  statements  and  the  machine  code  listing  was

         enabled  with /LIST and /MACHINE.  This would occur if any of

         the case-element displacements was greater  than  32  KBytes.

         This problem has been fixed.





      o  (SPR ICA-10185)  The compiler would go into an infinite  loop

         if  a  constant-expression  contained  a  math  function that

         referenced a reserved floating  operand.   This  problem  has

         been fixed.





      o  (SPR ICA-9835)  An  Internal  Compiler  Error   during   Flow

         Analysis   was  generated  when  optimizations  were  enabled

         compiling a  program  containing  an  IF-THEN-ELSE  statement

         similar to the following:



              FOR i := 1 TO 10 DO

                 IF Bool1

                 THEN

                   BEGIN

                   IF Bool2

                     x := arr1[i];

                   WRITELN( arr1[i] );

                   WRITELN( arr2[i] );

                   END

                 ELSE

                   WRITELN( arr2[i] );



         Where arr1 and arr2 were of the same type.  This problem  has

         been corrected.





      o  (SPR ICA-10789)  The compiler would generate a  bad  VAX  SCA

         source analysis file when the program contained a label and a

         record field of the same name.  The resulting file would  not

         load correctly into a VAX SCA library.  This problem has been

         corrected.





      o  (SPR ICA-9447)  Incorrect   code   occasionally   would    be

         generated  for  an  IF-THEN-ELSE  statment  within  a looping

         construct which contained a  common  array  index  which  was

         modified  within the loop.  The compiler did not realize that

         the value of the  index  had  changed  within  the  loop  and

         neglected to recalculate the array address for each iteration




                                 2-2




















































                  VAX PASCAL V3.7 MAINTENANCE FIXES
                  VAX PASCAL V3.7 MAINTENANCE FIXES





         of the loop.  This problem has been corrected.





      o  When using the  %IMMED  foreign  mechanism  specifier  on  an

         actual parameter of type REAL, the compiler would incorrectly

         convert the value to INTEGER before passing it to the routine

         being called.  This problem has been corrected.





      o  In a CASE statement label, the lower bound of a  range  could

         not  be  a  compile-time-constant  expression in parentheses.

         This problem has been fixed.





      o  An Internal Compiler Error would occur during Source Analysis

         or  Flow  Analysis  if  a CASE statement contained only empty

         case-elements.  This problem has  been  fixed.   The  correct

         syntax error is now issued.





      o  The message "SYNPERIOD, Syntax:  '.' expected" was issued  as

         either  a  warning  message  or an error message based on the

         context.  It is now always issued  as  an  error  message  to

         prevent  syntax  errors  from being overlooked when compiling

         with /NOWARNINGS.





      o  Incorrect code was  occasionally  generated  when  the  INDEX

         predeclared  function  was used as a CASE selector expression

         and the pattern string used the concatenation operator.  This

         problem has been fixed and the correct code is now generated.





      o  An incorrect file variable was generated  when  inheriting  a

         record  whose fields used the V3.4 key attribute enhancements

         (CHANGES,  DUPLICATES,  ASCENDING,  or   DESCENDING).    This

         problem has been corrected.





      o  The changes made to VAX  PASCAL  V3.6  to  improve  the  code

         quality  problem  reported  in  SPR ICA-8693 have been backed

         out.  These changes caused incorrect behaviour in some cases.

         SPR ICA-8693 will be re-addressed in a future release.





    o  (SPR ICA-11864)  When the ZERO builtin function was  used  to

         statically  initialize a record variable with a variant-part,

         the variant tag was incorrect initialized.  This problem  has

         been fixed, the tag is now set to zero.










                                 2-3




















































                  VAX PASCAL V3.7 MAINTENANCE FIXES
                  VAX PASCAL V3.7 MAINTENANCE FIXES





      o  (SPR ICA-11233)  The    compiler    occasionally    generated

         incorrect  code  for string comparisions when one operand was

           n
         (4n)+3 bytes long and had to be blank  padded  to  match  the

         size of the other operand.  This problem has been fixed.





      o  (SPR ICA-11248)  The    compiler    occasionally    generated

         incorrect code for modules containing backward GOTOs within a

         conditional statement  which  was  nested  within  a  looping

         construct.  This problem has been fixed.





      o  The  compiler  occasionally  generated  incorrect  code   for

         routines  with value parameters having the TRUNCATE attribute

         which are used within nested routines.  This problem has been

         fixed.





      o  The compiler did not perform the compile-time folding of  the

         set  difference  operator  correctly.   This problem has been

         fixed.





      o  (SPR ICA-13372)  The    compiler    occasionally    generated
         incorrect  code  when  a  common  subexpression  using  a set

         constructor was used in an IF_THEN_ELSE statement  which  was

         nested  within  a  looping  construct.  This problem has been

         fixed and correct code is generated.





      o  (SPR ICA-7928)The compiler occasionally generated an Internal

         Compiler  Error  during  Name  Packing when optimizations are

         enabled for a module containing common array  subscripts  for

         different  array  types  within  both  the  case selector and

         subsequent case elements.  This problem has been fixed.





      o  An  Internal  Compiler  Error  during  Source   Listing   was

         occasionally  generated  when compiling with /CROSS_REFERENCE

         when the PSECT attribute was applied to  a  type  definition.

         This problem has been fixed.





      o  An Internal Compiler Error during Tree Construction  occurred

         if  the  ARGUMENT  or ARGUMENT_LIST_LENGTH buildins were used

         with a variable that was not a parameter.  An  error  message

         is now produced.














                                 2-4

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026