1 08/04/86 Multics Pascal implementation restrictions and
  2           deviations from ISO standard
  3 
  4 This segment lists the size restrictions and other limits imposed by
  5 the Multics implementation of Pascal.  See "Implementation
  6 restrictions" below.  It also lists any features that are omitted from
  7 the accepted ISO standard.  See "Deviations from standard" below.
  8 
  9 
 10 Implementation restrictions:
 11 The following numerical restrictions are properties of Multics Pascal:
 12 
 13 Maximum length of identifier names = 32 characters
 14 
 15 Maximum positive integer (maxint) = 34359738367
 16 
 17 Maximum positive real (maxreal) = 1.70141183460469232E+38
 18 
 19 Minimum positive real (minreal) = 1.46936793852785938E-39
 20 
 21 Maximum set range = 288 elements
 22   It is not possible to define a set of (x..y) if y < 0 or y > 287 .
 23   or if ord (y) > 287.
 24 
 25 Maximum storage for global variables
 26   (declared in outer procedure and not imported or exported)
 27           = 32K words
 28 
 29 Maximum storage for local variables (internal to procedures)
 30           = 32K words
 31 
 32 
 33 Deviations from standard:
 34 Although Multics Pascal adheres to the ISO Pascal standard, certain
 35 incompatible deviations exist in its implementation. These are listed
 36 below. Numbers in parentheses (eg, 6.2.3.5) refer to the ISO Pascal
 37 standard document.
 38 
 39    o  The concept of an undefined variable is not implemented
 40       (i.e., the compiler does not "flag" undefined variables);
 41       their use is not detected as an error.  The following undefined
 42       variables are not implemented:
 43 
 44          -  uninitialized variables (6.2.3.5, 6.6.5.4.)
 45 
 46          -  the control variable of a "for" statement after the
 47             "for" statement (6.8.3.9)
 48 
 49          -  the field of an inactive variant or an uninitialized
 50             field (6.4.3.3)
 51 
 52          -  the buffer variable after a "put" statement
 53 
 54          -  an undefined pointer after a call to "dispose" (has
 55             a null value)(6.6.5.3)
 56 
 57    o  In a "dispose", no error is detected if the pointer points to
 58       a variable that is the actual variable of an active
 59       procedure or used with an active "with" statement
 60       (6.6.5.3).
 61 
 62    o  In a "dispose" of the long form, it is generally not an
 63       error if the parameters passed do not have the same value
 64       or are not of the same number than in the corresponding
 65       "new" statement (the control is perfomed only on the
 66       length).
 67 
 68    o  No error is detected if you use in an expression, assign in a
 69       statement, or pass as an actual parameter a variable
 70       created by a "new" of the long form (6.6.5.3).
 71 
 72    o  No error is detected if you modify a selector of a variant when
 73       it has been defined in a "new" statement of the long form
 74       (6.6.5.3).
 75 
 76    o  A component of an array cannot be a file (6.4.3.2).
 77 
 78    o  A record cannot have a component of file type (6.4.3.3).
 79 
 80    o  Using a component of a record that has not been initialized
 81       is not detected as an error.  Using a component of a record
 82       when the case selector has an incorrect value is not
 83       detected as an error (6.4.3.3).
 84 
 85    o  The maximum size of a set is 288 elements.  For that reason, it
 86       is impossible to define set_type = set of ordinal_type if
 87       the ordinal type has more than 288 elements (6.4.3.4).
 88 
 89    o  "pack" and "unpack" are not allowed on conformant arrays
 90       (6.6.3.7).
 91 
 92    o  No error is detected if the current file position of a file
 93       "f" is altered while the file's buffer variable "f^" is an
 94       actual variable parameter, or an element of the record
 95       variable list of a "with" statement, or both (6.5.5).
 96 
 97    o  (* ....  *) is a comment, as well as { ....  }.  But "(*"
 98       and "{" , "*)" and "}" are not synonyms.  A comment which
 99       begins with "(*" must end with "*)" and a comment which
100       begins with "{" must end with "}" (6.1.9).
101 
102    o  set overlapping is not always detected (6.4.5, 6.4.6,
103       6.7.2.4).
104 
105    o  Modification of the selector field of a record when this
106       record has been allocated by a "new" statement of the long
107       form (using the value of this field) is not detected as an
108       error .
109 
110    o  A selector field can be passed to a procedure (6.6.3.3).
111 
112    o  An error is not detected if the control variable of a "for"
113       statement is modified in a procedure contained in the block
114       (6.8.3.9).
115 
116    o  An array which is component of a packed type can be passed as
117       an actual parameter to a variable conformant array.
118       (6.6.3.7.3).
119 
120    o  Two  string  constants  of  the  same  length  can  be passed
121       as actual parameters to variables conformant arrays of same schema
122       (6.6.3.8).