home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / modu1096.zip / admin / m2errs.txt < prev   
Text File  |  1996-09-19  |  50KB  |  1,081 lines

  1. Errors defined in gardens point modula
  2.   1 Line ends inside literal string
  3. Literal strings are limited to a single line. Commonly, this error is due
  4. to omission of the closing quote (which must match the opening quote --
  5. either ' or "). If you wish to construct literal strings longer than editor
  6. or system line length limits, you must do so by programmed concatenation.
  7. \
  8.   2 Illegal character in input file
  9. All characters within the Modula character set are acceptable, and control 
  10. characters in the range 1C to 37C are ignored. Other characters are invalid. 
  11. If there is no apparent invalid character, use your text editor's "show 
  12. non-printable characters" option or some dump utility to check for spurious 
  13. characters.
  14. \
  15.   3 Input file ends inside a comment
  16. This error will occur if a closing comment bracket is omitted. Note that
  17. comments nest in Modula, so that a subsequent closing bracket will match
  18. only its corresponding opening bracket; note also that an intervening 
  19. space between the '*' and the ')' characters will destroy a comment bracket.
  20. Since end-of-file is indicated by a null character (0C), this error will 
  21. also occur if a null is introduced within a comment.  The error is reported 
  22. at the beginning of the unclosed comment.
  23. \
  24.   4 Invalid REAL constant
  25. Immediately after the 'E' which introduces a real exponent, there must
  26. follow an optional sign, and then an unsigned integer.
  27. \
  28.   5 Invalid character in numeric constant
  29. Numeric constants may contain only --
  30.     the digits 0..7 for octal constants (suffix B or C), 
  31.     digits 0..9 for decimal (no suffix), 
  32.     or 0..9,A..F for hexadecimal (H suffix).
  33. \
  34.   7 Number too large
  35. Ordinal numeric constants are represented internally by a WORD value.
  36. This constant cannot be represented in a single machine word.
  37. \
  38.   8 Character constant too large (377C is maximum)
  39. \
  40.   9 Illegal use of underscore in identifier
  41. Underscores are allowed in identifiers only singly and internally -- a
  42. leading or trailing underscore is not allowed; nor are two or more adjacent
  43. underscores.
  44.  
  45. These rules are relaxed in interface definition modules, or in any 
  46. modules which import such modules. In that case, the use of underscores 
  47. is entirely free, and error 9 should not arise.
  48. \
  49. 100 Invalid symbols preceed start of module
  50. \
  51. 101 No identifier at end of module
  52. \
  53. 102 No fullstop at end of module
  54. \
  55. 103 Expected END symbol
  56. \
  57. 104 Expected module END symbol
  58. \
  59. 105 Expected semicolon
  60. \
  61. 106 Expected declarations
  62. \
  63. 107 Expected equals sign
  64. \
  65. 108 Expected identifier
  66. \
  67. 109 Expected IMPORT symbol
  68. \
  69. 110 Expected comma
  70. \
  71. 111 Expected ')' symbol
  72. \
  73. 112 Expected '..' symbol
  74. \
  75. 113 Error in qualified identifier
  76. \
  77. 114 Expected parameters
  78. \
  79. 115 Expected ']' symbol
  80. \
  81. 116 Expected OF symbol
  82. \
  83. 117 Expected colon
  84. \
  85. 118 Formal parameter bad
  86. \
  87. 119 Expected '{' symbol
  88. \
  89. 120 Error in expression
  90. \
  91. 121 Expected '(' symbol
  92. \
  93. 122 Expected '}' symbol
  94. \
  95. 123 Expected '|' symbol
  96. \
  97. 124 Expected EXPORT symbol
  98. \
  99. 125 Expected selectors
  100. \
  101. 126 Expected addops
  102. \
  103. 127 Expected mulops
  104. \
  105. 128 Error in statement
  106. \
  107. 129 Expected DO symbol
  108. \
  109. 130 Expected UNTIL symbol
  110. \
  111. 131 Expected ':=' symbol
  112. \
  113. 132 Expected TO symbol
  114. \
  115. 133 Expected THEN symbol
  116. \
  117. 134 Expected start of type
  118. \
  119. 135 Expected start of factor
  120. \
  121. 136 Expected BEGIN
  122. \
  123. 137 Premature exit: too few ENDs in  block
  124. \
  125. 138 Expected END identifier;
  126. \
  127. 139 Resynchronizing here
  128. gpm uses the names at the end of procedures and modules to help in recovery 
  129. from errors which are due to too many or too few ENDs.  In the case that the 
  130. 'END identifier' is found too soon, gpm abandons parsing the rest of (possibly 
  131. nested) statement sequences and issues error 137. 
  132.  
  133. If an END is found but the expected identifier is missing then error 138 is 
  134. emitted and gpm searches for an END with the matching identifier. This search 
  135. will stop at the start of any new declaration, so that a simple omission of 
  136. the identifier will not cause any information to be skipped. However, if there 
  137. are too many ENDs gpm will find the matching one, and issue "error" 139 to 
  138. announce that it has found the correct resynchronization point.
  139. \
  140. 140 Foreign import must be 'IMPORT IMPLEMENTATION FROM litstring'
  141. The allowed format for litstrings is exactly the usual Modula format. If the
  142. internal structure of the litstring is erroneous, this will cause an error
  143. at build time.
  144. \
  145. 200 Identifier at block end does not match
  146. Modula requires that the END of a module (compilation unit, or nested module) 
  147. or procedure be followed by the name of the module or procedure.  Either you 
  148. have omitted the matching identifier, or mis-spelt it, or perhaps incorrect 
  149. pairing of ENDs with structures has misled the compiler? 
  150. (Errors 137 -- 139 should catch most incorrect pairings) 
  151. \
  152. 201 Symbol file missing
  153. You have tried to import from a definition module, and its symbol file was
  154. not found. The import may be explicit, or the implicit import of its own
  155. definition module by an implementation module.  
  156.     Is the module name spelt correctly? 
  157.     Has the definition module been compiled? 
  158.     Is it in the current path? 
  159.     Do you have read access to it?
  160. \
  161. 202 Identifier is not exported from module
  162. You have tried to IMPORT a particular identifier from a definition module;
  163. the module's symbol file was found, but that identifier was not exported.
  164. Is it spelt correctly (or at least the same way -- Modula is case sensitive). 
  165. Is it defined in that definition module?
  166. (Quick check: "grepdef identifier" will find the identifier no matter which 
  167.    file it is in, or what directory on the search path the file may be in).
  168. \
  169. 203 Identifier already known in this scope
  170. You are trying to define a new object, and the name used already has some
  171. other meaning in the current scope.  It may have been IMPORTed from some 
  172. external scope, or declared previously in this scope, or is being EXPORTed 
  173. from the current scope and clashes with a name in the enclosing scope ("this 
  174. scope" is then the enclosing scope).  If you wish to use a similar name, 
  175. Modula's case-sensitivity may be used to distinguish them; but beware of 
  176. confusion later -- two variables of the same type, distinguished only by 
  177. case, could easily be confused; on the other hand, two variables of different 
  178. type, or a type and a variable, would almost certainly cause a compiler error 
  179. if accidentally transposed.
  180. \
  181. 204 Identifier not known in this scope
  182. You are using an identifier which has no definition visible in this scope. 
  183. Did you mis-spell, or fail to IMPORT?  Remember that although global objects 
  184. are visible by default in nested procedures, nothing is visible across module 
  185. boundaries unless explicitly exported and/or imported. If you are trying to 
  186. IMPORT into a nested module from a module which is not visible in the 
  187. enclosing scope, "this scope" means that enclosing scope. 
  188. \
  189. 205 Qualified identifier is not a type name
  190. In a situation where the syntax requires the name of a type, the identifier
  191. you have used is known, but is not a type name.  Could it be a mis-spelt name 
  192. matching another identifier? Or did you forget that a type is required here?
  193. \
  194. 206 Type is not an ordinal type
  195. An even more restricted version of error 205 -- the type must be ordinal. That 
  196. is, it must be a type for which the next "counting" or "successor" value is
  197. defined. This allows CARDINAL, INTEGER, BOOLEAN, CHAR, a user-defined 
  198. enumeration, or a subrange of one of those; REALs or any structured type 
  199. (arrays, records, sets) are not allowed. Ordinal types are required for CASE 
  200. statement selectors, array indices, variant record tag types, FOR loop control 
  201. variables, and arguments of CHR, ODD, ORD, INC & DEC. 
  202. \
  203. 207 Expression is not compatible with declared type
  204. Modula enforces strict agreement between types of expressions and the context 
  205. in which they are used. This error occurs if a label of a CASE statement 
  206. branch does not match the selector type, an element in a set constructor does 
  207. not match the set type, a bound of a subrange does not match the host type or 
  208. the other bound, a record variant label does not match the tag type, or an 
  209. array index does not match the index type.
  210. \
  211. >The expected type was <
  212. while the actual type was >
  213. \
  214. 208 Identifier is not a constant
  215. The syntax requires a constant here.  Did you mis-spell the identifier?
  216. \
  217. 209 Maximum of range is less than minimum
  218. Where a range a..b is allowed, a should be the lower bound and b the upper;
  219. the range is from a up to b, inclusive.
  220. \
  221. 210 Implementation limit exceeded for set base type
  222. gpm, like most compilers, puts a limit on the size of sets by restricting
  223. the range of the base type; for gpm, the limit is 256 members, starting at
  224. ordinal 0.  Note that this means some small sets may cause this error --
  225. a SET OF [1980..1999] has 2000 possible members, not just 20; also a 
  226. SET OF [-5..5] would breach the lower range limit.  If necessary, you can 
  227. work around these limitations by defining your own HugeSet or NegativeSet 
  228. types, implemented as ARRAY OF BITSET, and mapping members of your desired 
  229. set type to members of elements of the array. (Future releases will relax 
  230. this constraint, in line with ISO recommendations)
  231. \
  232. 211 Target of forward reference not declared
  233. Modula generally expects that identifiers be declared before use, but
  234. there are exceptions: the target type of a pointer (Fred in POINTER TO Fred),
  235. the formal parameter and result types of a procedure type, and procedure
  236. names. These names must be subsequently declared within that compilation
  237. unit. Because of different internal processing of types and procedure names,
  238. gpm reports the two cases differently. Error 211 reports incomplete type
  239. definitions, at the point where it becomes clear that no definition can
  240. appear.  Error 204 occurs for missing procedures. 
  241. \
  242. 212 Type ident not expected here
  243. In an expression which is required by the syntax to have a constant value,
  244. the only type identifier which can occur is that of a set (giving the type
  245. of a set constant).
  246. \
  247. 213 Function HIGH cannot be used in a constant expression
  248. Since HIGH always returns a value which varies with the actual parameter
  249. corresponding to an open array formal parameter, it cannot be used in an
  250. expression which is required to have a constant value.
  251. \
  252. 214 Parameter is of wrong type
  253. This actual parameter does not match the type required by the formal
  254. parameter in the procedure declaration. This includes built-in functions
  255. such as ABS, CAP & CHR.
  256. -- or --
  257. This argument to a built-in procedure or function is not a variable or type
  258. designator.
  259. \
  260. 215 Range of type exceeded
  261. A value which can be checked at compile-time has been found to be out of 
  262. range. These include constant arguments to built-in procedures and functions,
  263. the results of evaluating constant expressions, set elements, and record
  264. variant labels.  In some cases, error 207 may be reported instead of error 215 
  265. -- for example a CASE statement selector is of CARDINAL subrange type, and so 
  266. a negative branch label is rejected as incompatible (which, of course, implies 
  267. out of range).
  268. \
  269. 216 Too many parameters
  270. You have supplied too many parameters for the procedure called.  Check the 
  271. definition: in the documentation for built-in procedures, in the definition 
  272. module for external procedures, or in this module for local procedures.
  273. \
  274. \
  275. 218 Type is not an ordinal or numeric type
  276. VAL requires that the first parameter denotes an ordinal or numeric type and
  277. that the type of the expression be ordinal or numeric.  Other restrictions
  278. apply and violation of these give a warning 510.
  279. \
  280. 219 Operation invalid on constant
  281. This operation is not appropriate for the constant operand supplied.
  282. Check the (implied) type of the constant, and that of the other operand,
  283. for consistency with one another and the operator. There is also the case
  284. of a specific value of the operand being inappropriate -- division by zero.
  285. \
  286. 220 Type incompatible operands
  287. In general, operators combine operands of the same types; exceptions such
  288. as the set membership operator IN still require compatibility between the
  289. element being tested for membership and the base type of the set.
  290.  
  291. Note that if this error occurs, no check is made for the appropriateness of
  292. the operator; on correcting the operand incompatibility, an inappropriate
  293. operator will give an error such as 270 -- 275.
  294. \
  295. >The left hand expression type was < 
  296. the right hand expression type was >
  297. \
  298. 221 Not of Boolean type
  299. The operand of the Boolean operator NOT must be Boolean; so too must the
  300. conditions which are used in IF, WHILE and REPEAT statements.
  301. \
  302. 222 Record field name is not unique
  303. Within a single record, each field must have a distinct name; this includes
  304. the tag field of a variant, and each of the variant fields. Fields of other
  305. records (including records which are the types of fields of this record)
  306. may of course re-use the same names, since qualification by their variable
  307. or field name prevents an ambiguity.
  308. \
  309. 223 Opaque type only allowed in definition part
  310. Opaque types are intended to provide an exported declaration which allows 
  311. limited access to the type while hiding other details; they are thus 
  312. allowed only in DEFINITION modules. Note that this implies a 
  313. limitation on nested modules -- they cannot export opaquely. 
  314. \
  315. 224 Opaque type not elaborated
  316. An opaque type declared in a DEFINITION module must be elaborated -- its
  317. hidden details completed -- in the corresponding IMPLEMENTATION 
  318. module. This message is at the end of the implementation part, since it is
  319. now clear that there can now be no declaration of the type in this scope.
  320. The name of the undeclared type is quoted here.
  321.  
  322. Note that references to variables of the opaque type within the code of 
  323. the IMPLEMENTATION module will not have caused errors, since the elaboration 
  324. check error on the first pass suppresses further semantic checking. 
  325. \
  326. 225 Exported procedure not declared
  327. This is a similar instance to error 224, except that the object partially
  328. declared in the DEFINITION module and not completed in the IMPLEMENTATION
  329. module was a procedure. You must supply the procedure body in the
  330. IMPLEMENTATION module.
  331. \
  332. 226 (Implementation restriction) Too many formals of same type
  333. In a parameter list of the form "(a,b,c,d:SomeType)" there can only be 15
  334. items in the list of parameters all sharing the same type SomeType. You
  335. can easily circumvent the limit by splitting the list into two:
  336.     "a,b,c,...,o:SomeType; p,q,...,u:SomeType)"
  337. \
  338. 227 Invalid elaboration of opaque type (must be a pointer)
  339. An opaque type must turn out to be a pointer; if you want something else,
  340. you must define a pointer to it and opaquely export the pointer type.
  341. \
  342. 228 Invalid elaboration of procedure header
  343. The definition of a procedure in a DEFINITION module and its subsequent
  344. elaboration in the IMPLEMENTATION module must have the same headings. This
  345. error occurs if a parameter does not match in type and mode of passing 
  346. (VAR or value), or if the DEFINITION specified a function and the 
  347. IMPLEMENTATION was a proper procedure (no result type). In the case of a 
  348. parameter mismatch, the name of the offending parameter in the IMPLEMENTATION 
  349. module is quoted.  (Note that the parameter names used in DEFINITION and 
  350. IMPLEMENTATION need not match, only their types and modes.)
  351.  
  352. Exactly the same rules apply for the elaboration of procedures which have been 
  353. declared with the FORWARD keyword. Remember that forward declarations are not 
  354. required for gpm. The keyword is only recogized in order to provide source code
  355. compatability with those Modula compilers which have single-pass restrictions.
  356. \
  357. 229 Function return type not as defined
  358. The elaboration of a function in an IMPLEMENTATION module specifies a
  359. different result type from the DEFINITION module.
  360. \
  361. 230 Exported object not declared
  362. A local or nested module has exported a name, and that name has not been
  363. declared within the module. The name of the undeclared object is quoted above.
  364. It is now too late for a declaration of the object in this block.
  365. \
  366. 231 Too many constants in enumeration
  367. There is an implementation limit of 255 values in an enumeration type.
  368. If you need more (!), you will have to use a CARDINAL subrange to represent
  369. them, and take appropriate care to avoid using CARDINAL operations which
  370. would be meaningless on the enumeration.
  371. \
  372. 232 Designator is not a record type
  373. A WITH statement allows shorter references to record fields by implicitly
  374. prefixing all relevant identifiers with that field name; clearly, the name
  375. following WITH must be the name of a variable of record type (it may be a
  376. complex reference, such as a.b[c].e[f], but the end result must be a record).
  377. \
  378. 233 Fieldname not known for this type
  379. In the syntax a.b, a is a record variable name, but b is not a field of
  380. that record type.
  381. \
  382. 234 Attempted field selection not on a record structure
  383. In the syntax a.b, a has been determined not to be a module name; however, 
  384. it is also not a variable of record type, so that the apparent selection of 
  385. field b is invalid.
  386. \
  387. 235 Designator is not a variable
  388. There are various places where an object must be a variable: on the left-hand 
  389. of an assignment; as the control variable of a FOR loop; anywhere where 
  390. subscripting, field selection or dereferencing is performed; as the 
  391. prefixing object of a WITH statement.
  392. \
  393. 236 Attempted pointer dereference not on a pointer type
  394. Clearly, only pointers can be dereferenced ^ -- that is, variables whose
  395. type is POINTER TO something or ADDRESS.
  396. \
  397. 237 Attempted array index not on an array type
  398. Only arrays can be subscripted ([]).
  399. \
  400. 238 BY expression not within INTEGER value range
  401. The expression which gives the step between successive values of a FOR loop
  402. control variable must take INTEGER values; this is the number of values
  403. 'forward' or 'backward'. Even in the case of control variables of type
  404. CHAR, or some enumerated type, etc., the step must be the INTEGER number of
  405. values. A large CARDINAL (value >  MAX(INTEGER)) is also unacceptable. 
  406. \
  407. 239 Control variable not found in local scope
  408. Good (structured) programming practice suggests that the control variable
  409. of a structured statement such as a FOR loop should be declared locally --
  410. i.e. in the procedure whose body contains the loop. Modula enforces this
  411. good practice. This error occurs if the control variable is relatively
  412. global to the procedure.
  413. \
  414. 240 Control variable must not be a formal parameter
  415. Continuing on from error 239: one way in which the control variable could be
  416. a local name for a non-local object is via the parameters. Modula forbids
  417. even the use of a value parameter as a control variable.
  418. \
  419. 241 Control variable must not be imported or exported
  420. Another way of making an external variable appear local, and thus avoiding
  421. errors 239 & 240, is to IMPORT it from an enclosing module, or have it
  422. EXPORTed by a nested module. Both of these are also unacceptable as FOR 
  423. loop control variables.
  424. \
  425. 242 Selectors not permitted on constant
  426. This constant cannot be selected by the method which you have attempted.
  427. \
  428. 243 Selectors not permitted on procedure name
  429. Procedure variables are unstructured -- you cannot 'select' a component by
  430. array indexing, record field extraction or pointer dereferencing.
  431. \
  432. 244 Standard procs are not valid as proc-values
  433. It is a rule of the language that standard procedures may not be assigned
  434. as values of procedure variables. You can work around this restriction by
  435. declaring a procedure whose sole purpose is to call the standard procedure;
  436. since it is user-defined, it may be assigned to procedure variables. Note
  437. that the user-defined procedure must be declared in the module scope, not
  438. within any procedure, to conform with Modula's other restriction on
  439. procedure variable values (see error 287).
  440. \
  441. 245 Function name not known in this scope
  442. An object which appears to be a function call (e.g. b in "a := b(..)") is not 
  443. declared in, or IMPORTed or EXPORTed into this scope or any enclosing scope. 
  444. \
  445. 246 Designator is not a function
  446. An object which appears to be a function call is known to be some other
  447. type (including a proper procedure).
  448. \
  449. 247 Constructors are not defined for this type
  450. An object which appears to be a constructor designator e.g. T{...} begins with
  451. an identifier (T in the example) for which constructors are not permitted.
  452. \
  453. 248 Too few parameters
  454. A procedure or function call does not have as many parameters as required
  455. by the procedure or function declaration.
  456. \
  457. 249 Designator is not a procedure name
  458. An object which appears to be a procedure call e.g. P(...); is not. 
  459. It may be a function, or some other type.
  460. \
  461. 250 Designator is not a procedure variable name
  462. A variable used in the style of a call to a procedure variable
  463. e.g. P(...); is not a procedure variable.
  464. \
  465. 251 Missing function return expression
  466. A function procedure has no RETURN statement and so cannot return a result. 
  467. \
  468. 252 Proper procedure cannot return a value
  469. The RETURN statement in a proper procedure should not specify a return value; 
  470. proper procedures return values only via VAR parameters, while function 
  471. procedures should return a single result.
  472. \
  473. 253 Actual value parameter is not assignment compatible with formal
  474. Since a formal value parameter is treated as a local variable to which the
  475. value of the actual parameter is assigned at procedure entry, the same
  476. compatibility rules as for assignment statements apply.
  477. Some special cases: 
  478.  * the second parameter of INC and DEC must be assignment compatible with 
  479.    either INTEGER or CARDINAL, depending on the type of the first parameter; 
  480.  * the second parameter of ROTATE and SHIFT must be assignment compatible 
  481.    with INTEGER. 
  482.  
  483. Assignment compatibility is defined as follows --
  484.  * identical types are compatible;
  485.  * INTEGER and CARDINAL are compatible;
  486.  * a subrange is compatible with its host type;
  487.  * strings are compatible with string variables of equal or greater length.
  488. \
  489. >The formal parameter type was <
  490. the actual parameter type was >
  491. \
  492. 254 Actual variable parameter type not identical to formal
  493. Since a formal variable parameter allows direct access to the corresponding
  494. actual parameter, the compatibility requirements are strict -- actual and
  495. formal must be of identical type. Note that identical means the same named type
  496. -- it is name equivalence which is required, not just structural equivalence.
  497. \
  498. >The formal VAR param type was >
  499. the actual variable type was <
  500. \
  501. 255 Actual variable parameter must be a variable
  502. Since an actual variable parameter may be altered by a procedure, it must
  503. be a variable. Constants could not be altered, and expressions have no
  504. memory location to hold the updated value.
  505.  
  506. Also returned if the argument of ADR is not a variable.
  507. \
  508. 256 Actual parameter corresponding to open array formal not an array
  509. With the exception of the universally conformable ARRAY OF WORD and 
  510. ARRAY OF BYTE, open array parameters are compatible only with actual 
  511. parameters which are arrays of the appropriate type.
  512. \
  513. 257 Incompatible open array element type
  514. An open array formal parameter has an actual which is an array, but of the
  515. wrong element type.
  516. \
  517. 258 Expression not assignment-compatible with variable
  518. Assignment compatibility is required in an actual assignment statement, and
  519. also between the initial value of a FOR loop and the control variable, and
  520. between the elements of constructors and the declared element types.
  521.  
  522. Assignment compatibility is defined as follows --
  523.  * identical types are compatible;
  524.  * INTEGER and CARDINAL are compatible;
  525.  * a subrange is compatible with its host type;
  526.  * strings are compatible with string variables of equal or greater length.
  527. \
  528. >The type of the variable was < 
  529. the type of the expression was >
  530. \
  531. 259 Return value not assignment-compatible with function type
  532. The value RETURNed by a function procedure must be assignment compatible
  533. (see error 258) with the declared result type of the function.
  534. \
  535. >The declared return type was <
  536. The return expression type was >
  537. \
  538. 260 Designator is not a function variable name
  539. A variable used in the style of a call to a function variable
  540. e.g. b in a := b(...); is not a function variable.
  541. \
  542. 261 Selectors not permitted on set type name
  543. Components of set variables cannot be "selected" by array indexing,
  544. record field extraction or pointer dereferencing.
  545. \
  546. 262 HIGH may only be applied to open array parameters
  547. The built-in function HIGH applies only to open array formal parameters.
  548. For normal array parameters, the upper bound is known from the type using
  549. MAX(IndexType). If general size information is required, the SIZE or TSIZE
  550. functions should be used.
  551. \
  552. 263 Expression is not of type CHAR
  553. The operand of standard function CAP must be CHAR.
  554. \
  555. 264 Name of qualifying module clashes in outer scope
  556. The name of this nested module, which is visible in the enclosing scope,
  557. has already been used there for some other purpose.
  558. \
  559. 265 Enumeration constant name clashes in this scope
  560. This enumeration value name has already been used in the current scope.
  561. Note that the error message quotes the offending name in the case where 
  562. only the enumeration type name was explicitly imported, but the resulting
  563. import of each of the value names caused the conflict.
  564. \
  565. 266 Name clashes with an enumeration constant name
  566. This is a more specific version of error 203: the name you have used is
  567. already used in this scope, as the name of a value of an enumeration type.
  568. Since it is easy to overlook enumeration names, this specific error
  569. highlights the problem. The clashing name may also have entered the scope 
  570. by importation of its type name.
  571. \
  572. 267 Duplicate case selector in this range
  573. Each case branch selector must occur only once, so that the statements to
  574. be performed are uniquely determined. Have you included this value in a
  575. range, as well as this occurrence?
  576. \
  577. 268 Operand not of signed numeric type
  578. The arithmetic negation operator (unary or prefix minus) can only be
  579. applied to operands which are of signed type; it is illegal on a CARDINAL
  580. operand, or any non-numeric operand. Note that binary or infix minus may be
  581. applied to CARDINAL operands; thus for CARDINAL a and b the expression 
  582. a-b is valid, while -b+a is not.
  583. \
  584. 269 Operand(s) not of Boolean type
  585. The single operand of NOT, or either operand of AND or OR, must be Boolean.
  586. \
  587. 270 Operand(s) not of numeric type
  588. Arithmetic operators apply only to numeric operands.
  589. \
  590. 271 Operand(s) not of whole number type
  591. The operators DIV, MOD, REM and '/' apply only to INTEGER or CARDINAL 
  592. operands, implementing whole number arithmetic.
  593. \
  594. 272 Operand may not be compared
  595. Structured types such as arrays and records cannot be compared. Given your
  596. understanding of the elements of the structure, you must write an appropriate 
  597. Compare procedure.
  598. \
  599. 273 Proper inclusion operator not defined for sets
  600. Only <= and >= inclusion operators are defined for sets. If you wish to test 
  601. for proper inclusion, replace (a < b) by ((a <= b) AND (a <> b)).
  602. \
  603. 274 This type may only be compared for (in)equality
  604. The only comparison operators defined for types ADDRESS, WORD, BYTE,
  605. POINTER TO ..., PROCEDURE, and opaque types are '=' and '<>'. If you believe
  606. a meaning can be attached to other comparisons, you must first coerce or
  607. cast to an arithmetic type, on which those operations are allowed.
  608. \
  609. 275 Right operand or first parameter not of set type
  610. The set membership operator IN tests member IN set; thus the right operand 
  611. must be of some set type. The built-in include and exclude procedures
  612. INCL and EXCL have parameters (set, member); thus the first parameter 
  613. must be of some set type.
  614. \
  615. 276 Exported enumeration constant clashes in outer scope
  616. Another variation of the problem reported by error 265: when you export an
  617. enumeration type you also export the name of each value of the type. One of
  618. those names has already been used in the scope into which you are exporting
  619. the type.
  620. \
  621. 277 Procedure in !LIBRARY module calls non-library procedure
  622. A module with the !LIBRARY pragma assures the compiler that it does not
  623. perform direct or indirect recursion, thus allowing the compiler to make
  624. optimizations. This assurance is invalidated if a procedure in the module
  625. calls a procedure in another module and that other module does not
  626. guarantee the !LIBRARY attribute.
  627. \
  628. 278 EXIT not within a LOOP
  629. The EXIT statement exits from the nearest enclosing LOOP statement, 
  630. continuing execution with the statement after the LOOP. This EXIT statement 
  631. is not within any LOOP.
  632. \
  633. 279 FOR loop control variable may not be modified
  634. Consistent with its use as the control of a count-controlled loop, a FOR
  635. loop variable may not be modified. Thus, it may not be assigned a value, or
  636. passed as a variable parameter to a procedure which could then modify it.
  637. If you wish to pass the value of the control variable as a VAR parameter,
  638. copy it to another variable.
  639. \
  640. 280 Name is not a module name
  641. The name from which you have tried to IMPORT is known, but is not an
  642. external module name.
  643. \
  644. 281 Expected proper procedure, not function
  645. The definition of this procedure specified that it was a proper procedure
  646. (i.e., not a function procedure). The implementation conflicts by specifying 
  647. a function result type.
  648. \
  649. 282 ALLOCATE not known in this scope
  650. A call to NEW is treated as a call to ALLOCATE, with the appropriate size.
  651. There is no visible ALLOCATE -- probably because it was not imported from 
  652. Storage, though a compatible local ALLOCATE procedure will suffice. 
  653. \
  654. 283 DEALLOCATE not known in this scope
  655. A call to DISPOSE is treated as a call to DEALLOCATE, with the appropriate 
  656. size. There is no visible DEALLOCATE -- probably because it was not imported 
  657. from Storage, though a compatible local DEALLOCATE procedure will suffice. 
  658. \
  659. 284 Not a valid substitution for NEW or DISPOSE
  660. The ALLOCATE or DEALLOCATE procedure used to implement NEW or DISPOSE must
  661. be of the form PROCEDURE(VAR ADDRESS, CARDINAL).
  662. \
  663. 285 Type ranges do not overlap at all
  664. In checking assignment compatibility and the need for range checking, the
  665. special case of a complete mismatch of two subranges causes this error.
  666. \
  667. 286 Selectors not permitted on type identifier
  668. Types cannot be "selected" by array indexing, record field extraction or
  669. pointer dereferencing. Only variables of the appropriate structured types
  670. can be so selected, leading to components of those variables.
  671. \
  672. 287 Nested procedures are not valid as proc-values
  673. It is a language restriction that procedures assigned to procedure
  674. variables must be declared at the module level; i.e., they cannot be
  675. declared within procedures. (Actually, they must be at the outer level of 
  676. a static module, that is one not nested within a procedure.)
  677. \
  678. 288 Implementation restriction: case range too large
  679. The implementation restriction on the range of case labels from smallest to
  680. largest is 1024. If you wish to use a larger range, IF statements to select
  681. appropriate ranges can be used, and are likely to be more compact.
  682. \
  683. 289 Duplicate identifier in export list of module
  684. This identifier being exported has already been mentioned in the export list.
  685. \
  686. 290 Actuals passed to amorphous formals must be simple
  687. Amorphous open array formal parameters (i.e. ARRAY OF WORD or 
  688. ARRAY OF BYTE) will accept almost any actual parameter; however, there 
  689. are some restrictions imposed by the implementation. Any variable is ok; 
  690. expressions in general are not. Some special non-variables are allowed: 
  691. string constants (including single characters), set constants, and set 
  692. expressions which occupy more than a word and so are held in temporary 
  693. variables. 
  694.  
  695. If you wish to pass one of the prohibited objects to an amorphous open
  696. array parameter, simply assign it to a local variable and pass that.
  697. \
  698. 291 No literals except sets and strings allowed here
  699. As described under error 290, it is an implementation restriction that in
  700. general constants are not allowed as actual parameters corresponding to
  701. amorphous open array formals.  For similar reasons, it is not allowable to 
  702. CAST constants to other types, except in these special cases. 
  703. \
  704. 294 Actual parameter must be a pointer type
  705. The first parameter of the SYSTEM procedures INCADR, DECADR, DIFADR must be 
  706. either a pointer type or ADDRESS; so must the second parameter of DIFADR. 
  707.  
  708. The parameter of NEW and DISPOSE must be a pointer type (not ADDRESS).
  709. \
  710. >Type of expression was <
  711. \
  712. 295 Right operand must be greater than zero
  713. The whole number modulo arithmetic operators DIV and MOD are defined only for 
  714. positive right operands. For negative right operands, the quotient remainder 
  715. operators '/' and REM are available, but note that they have different 
  716. semantics from DIV and MOD for negative left operands. 
  717. \
  718. 296 FOR loop control variable is threatened in uplevel access
  719. The loop control variable has been threatened inside the body of a nested
  720. procedure. Threatening actions include being assigned to, passed as a 
  721. VAR-mode parameter, having its address taken, or subjected to INC or DEC.
  722. \
  723. 297 FOR loop control variable is threatened
  724. The loop control variable has been threatened inside the body of the loop.
  725. Threatening actions include being assigned to, passed as a VAR-mode parameter, 
  726. having its address taken, or subjected to INC or DEC.
  727. \
  728. 298 Feature not implemented -- read latest release notes
  729. \
  730. 300 Incompatible keys for symbol files
  731. When IMPORTing from various modules, repeated references to the same module 
  732. are checked for the same version keys. Thus, for example, if module A imports 
  733. from modules B and C, and each of B and C in turn imported from D, the two 
  734. references to D must be consistent. Note that this check also applies to an 
  735. IMPLEMENTATION module's implicit import of its own DEFINITION file; thus if 
  736. the implementation of A imports from B, and B's DEFINITION imported from A, 
  737. the check for consistency between the current A and that via B is made. 
  738.  
  739. You must determine which module(s) are obsolete, and recompile in the
  740. appropriate order. Use of the -V (super-verbose) option of gpm is 
  741. strongly recommended, or use gpmake.
  742. \
  743. 301 Wrong name in symbol file
  744. The module name in the symbol file (quoted in the error message) is not the
  745. expected one (that in the IMPORT statement). With the symbol file name 
  746. normally derived from the module name, this will occur only if another file
  747. has been renamed to the symbol file name. It is common to rename object files 
  748. (or better still, use the -f option) when there are several alternative 
  749. implementations, but you should never rename a symbol file.
  750. \
  751. 302 Linker name is not unique
  752. Since linker names are constructed from the first 10 characters of the module 
  753. name followed by the first 20 characters of the exported procedure or variable 
  754. name, it is possible for clashes to occur within a compilation unit, where the 
  755. full names would not clash. Thus, for example, procedure 
  756.     FilesMod001.WriteToLogfileAndStdError 
  757. would produce the linker name
  758.     FilesMod00_WriteToLogfileAndStd
  759. This name would clash with the name formed for the procedure
  760.     FilesMod002.WriteToLogfileAndStdOut
  761. Clearly, avoidance of module and exported procedure / variable names with 
  762. long common prefixes will prevent this problem. The problem does not arise 
  763. for non-exported names, since gpm itself takes account of all characters of 
  764. identifiers no matter how long.
  765.  
  766. Note that further clashes may arise at build time, due to names constructed
  767. in independent compilation units. 
  768. \
  769. 303 Fatal circular import through this module
  770. This DEFINITION module indirectly imports itself. This can only occur if it 
  771. imports from another module which in turn imports from an earlier version of 
  772. the module being compiled. 
  773. \
  774. 304 Target object has zero storage size
  775. The object pointed to by the parameter of NEW has zero size. If the default 
  776. ALLOCATE procedure was the result of the substitution for NEW, a run-time 
  777. error would result.
  778. \
  779. 305 Header file not found
  780. It is assumed that the C header file for the runtime system file, m2rts.h 
  781. exists somewhere in the path given by the environment variable $M2SYM.
  782. \
  783. 306 Library name has bad format in header file
  784. This error is not used in the current version of gpm.
  785. \
  786. 307 Open array element type incompatible
  787. For a formal parameter of type ARRAY OF WORD, there is a restriction that
  788. the actual parameter must be word aligned and a multiple of word size. 
  789. \
  790. 308 Ident was already uplevel referenced in this scope
  791. The identifier being declared has already been used in the current scope to
  792. reference an object in an enclosing scope -- thus there is a conflict
  793. between the apparent reference to its previous (uplevel) meaning and the
  794. attempted new meaning.
  795. \
  796. 309 Procedure declared FORWARD was not elaborated
  797. A procedure declared using the FORWARD keyword was not elaborated within the 
  798. same block. It is a rule that the forward declaration and its elaboration 
  799. must be in the same lexical scope.
  800.  
  801. Remember that forward declarations are not required for gpm. The keyword 
  802. is only recognized in order to provide source code compatability with those
  803. Modula compilers which have single-pass restrictions.
  804. \
  805. 310 Array exceeds machine size limit
  806. The C compiler limits the size of an array, and its index range, to less
  807. than 2^31. Even for sizes just less than 2^31, the loader fails with an
  808. obscure error. gpm sets an experimentally-determined limit of 2^31 - 90000,
  809. and rejects any larger sizes with this error.
  810.  
  811. Note that this is of rather academic interest, since the executable file must
  812. be large enough to hold the array in question, and such a 2 gigabyte file
  813. would very likely fill the file system. See warning 496.
  814.  
  815. The segmented memory of the PC limits arrays to either 2^16 bytes (global, or
  816. static, variables) or 2^15 (local, or automatic, variables) - see errors 327
  817. and 328. Dynamic arrays (allocated via Storage) are restricted only by
  818. available memory size and access methods, and in the case of the current gpm
  819. Storage the limit is the available conventional (first 640K) memory.  Thus on
  820. the PC this error occurs if size exceeds 640K; in practice, low memory use by
  821. programs will reduce the available memory - as always the result of NEW (or
  822. ALLOCATE) calls must be checked for NIL.
  823. \
  824. 311 Parameter name was repeated
  825. The previous procedure declaration had two formal parameters with the same name
  826. \
  827. 312 Expression must be a designator
  828. The first parameter to the exception handler procedure CALL must be the 
  829. designator of a visible procedure, but (unlike the usual case with procedure 
  830. parameters) need not be declared at level-0.
  831. \
  832. 313 Constructor has too few elements
  833. Value constructors for arrays and records must have exactly the correct
  834. number of elements, taking into account the multiplicity of values which 
  835. appear with the BY repeatCount construct.
  836. \
  837. 314 Constructor has too many elements
  838. Value constructors for arrays and records must have exactly the correct
  839. number of elements, taking into account the multiplicity of values which 
  840. appear with the BY repeatCount construct.
  841. \
  842. 315 Ranges not allowed in record or array constructors
  843. Ranges (constructor elements of the form expression .. expression) are only 
  844. allowed in set constructors. They are not permitted in record or array 
  845. contructors.
  846. \
  847. 316 Replicators only allowed for array constructors
  848. Replicators (constructor elements of the form "expression BY repeatCount")
  849. are only allowed in array constructors. They are not permitted in record or 
  850. set constructors.
  851.  
  852. The plausible use of replicators in records with repeated elements of the 
  853. same kind is not supported by standard ISO Modula-2.
  854. \
  855. 317 Repetition count must be positive
  856. The repetition count in an array constructor must be a positive, constant 
  857. value.  Probably it does not make any sense unless it is a non-zero, positive, 
  858. constant value.
  859.  
  860. Check that you have gotten the order of expressions correct. The left-hand-
  861. side of the BY is the expression value which you wish to replicate, the right-
  862. hand-side is the number of times which you want it repeated.
  863. \
  864. 318 Illegal assign of INTERFACE proc with open array
  865. Procedures from INTERFACE modules with open arrays have parameters passed 
  866. in a different way to Modula procedures (no HIGH value is passed).  Such 
  867. procedures can only be assigned to variables of procedure types which are 
  868. also imported from INTERFACE procedures.
  869.  
  870. If you really do need to assign this procedure, write a dummy interface 
  871. definition which exports a procedure type with a conforming parameter list. 
  872. Import this procedure type and declare the variable to be of this type. 
  873. This is pretty tricky stuff -- read the chapter Interfacing to other 
  874. languages before going any further.
  875. \
  876. 319 Open arrays may only be accessed element by element
  877. Open array formal parameters may only be accessed one element at a time.
  878. In cases where all elements are to be accessed it is necessary to write 
  879. code along these lines --
  880.         FOR index := 0 TO HIGH(param) DO
  881.           -- do something with param(index) ...
  882. \
  883. 320 Procedure declaration nesting limit has been exceeded
  884. Procedure declarations may only be nested 18 deep. That is 17 procedures nested
  885. inside each other, inside some enclosing module. In counting the levels when 
  886. modules are nested inside procedures, only the levels of procedure declarations
  887. count. This is because the data belonging to such dynamic modules shares the 
  888. stack frame with the data of the enclosing procedure.
  889.  
  890. Compared to Pascal there is little need to nest procedure declarations in 
  891. Modula. Instead, visibility of identifiers is best controlled by the 
  892. declaration of modules.
  893. \
  894. 321 RETRY is not inside an EXCEPT clause
  895. The retry statement is only allowed to be used within an except clause,
  896. in the same way in which EXIT may only be used inside a loop.
  897. \
  898. 322 Forward IMPORT not elaborated
  899. An object IMPORTed into a local module may be declared later in the
  900. enclosing module, or in a later local module (provided it is exported
  901. from that local module). This message will appear at the end of the scope
  902. which is the source of the IMPORT, when the declaration has not so
  903. occurred.  (cf errors 224, 225 and 309)
  904. \
  905. 323 Declaration must precede use in a declaration
  906. Although use of an identifier before declaration is allowed in general,
  907. it is not permitted when that use forms part of another declaration
  908. (i.e. a use of a type identifier). The exceptions to the restriction are
  909. declarations of pointer and procedure types.
  910. Most violations of this rule attract error 204 or 205; however, if an
  911. IMPORTed identifier which has not yet been declared is used in a
  912. declaration this message is given.
  913. \
  914. 324 Expression must be compatible with control variable
  915. Modula requires that the type of the upper bound expression of a FOR
  916. loop and the control variable have identical types, or share host (of
  917. subrange) type. Note that this is more restrictive that the requirement
  918. that the lower bound be assignment compatible with the control variable.
  919. \
  920. 325 Linker name aliases are only permitted for INTERFACE modules.
  921. GPM only allows name aliases (for variable and procedure names) within
  922. the mechanism of INTERFACE modules.
  923. \
  924. 326 FOR control variable cannot be a record field.
  925. The control variable of a FOR loop must be a "simple" variable - that is,
  926. it cannot be a field of a record. This control variable is a field of a
  927. record designator specified in an enclosing WITH statement.  Errors 206,
  928. 239..241,279,296 & 297 refer to other restrictions on control variables.
  929. \
  930. 327 [PC only] Local variables too large
  931. In the PC version only, the total size of local (automatic) variables of
  932. a single procedure is limited to 32768 bytes (arising from the signed
  933. 16-bit offsets used to address parameters and local variables in the stack
  934. frame). To overcome this limitation, use dynamic allocation for large
  935. variables.
  936. \
  937. 328 [PC only] Global variables too large
  938. In the PC version only, the total size of global (static) variables of a
  939. single module is limited to 65535 (arising from the object-format and
  940. segment size limit). As for error 327, dynamically-allocated variables
  941. may be used to avoid this limit.
  942. \
  943. 329 Right operand must be non-zero
  944. The whole number arithmetic operators DIV, MOD, '/' and REM are undefined
  945. for a right operand of zero.
  946. \
  947. 330 First parameter must be of a STRING type
  948. The procedure APPEND only applies to objects of type STRING OF T,
  949. while CONCAT only applies to objects of the specific type STRING OF CHAR.
  950. \
  951. 331 Second parameter of CONCAT must be string, array or char
  952. The second parameter of CONCAT must be one of --
  953.   *  single character variable or literal
  954.   *  literal string of characters
  955.   *  STRING OF CHAR
  956.   *  ARRAY OF CHAR
  957. \
  958. 332 Bad second parameter type for APPEND
  959. If the first parameter of APPEND is a STRING OF T, then the second parameter
  960. must be one of --
  961.   *  single T element
  962.   *  STRING OF T
  963.   *  ARRAY OF T
  964. \
  965. 333 Bad second parameter type for CUT
  966. The second parameter of CUT must be an integer between -1 and HIGH(par1).
  967. \
  968. 494 Non-standard assignment to a BYTE, WORD or ADDRESS variable.
  969. GPM allows any word-sized value to be assigned to a variable of type WORD,
  970. any byte-sized value to be assigned to a variable of type BYTE, and any
  971. pointer or opaque value to be assigned to a variable of type ADDRESS.
  972.  
  973. This behaviour is non-standard, and hence non-portable, although a common 
  974. extension.  The standard allows such assignments only for substitition 
  975. of actual for formal parameters.  Only a single warning is given for each
  976. affected identifier, no matter how many times they are used.
  977. \
  978. 495 Name or function is not standard
  979. The name, functionality or formal parameters of this built-in procedure
  980. no longer conforms to standard ISO Modula-2.
  981. \
  982. 496 Array is very large
  983. As explained under error 310, gpm allows arrays whose size may well
  984. embarass virtual memory management, file system capacity, or both. Since
  985. such a large size may be unintended, this warning is given for sizes
  986. greater than 16 megabytes.
  987.  
  988. On the PC, where segmentation limits begin at 32K bytes, this warning is
  989. given for sizes greater than 32K (see further details under errors 310, 327
  990. & 328).
  991. \
  992. 497 Last type has zero storage size
  993. The type used in this type or variable declaration has no useful capacity.
  994. While this is syntactically legal and may occur deliberately in some test
  995. programs, it may also result inadvertently from the deletion of code, or
  996. code ignored due to comment brackets.
  997. \
  998. 498 Case statement has very low density
  999. Of the range of values used by this CASE statement, less than 25% are actually 
  1000. referenced; since the compiler typically implements a CASE statement as a jump 
  1001. table, relatively large amounts of code may be generated. If the Modula code 
  1002. can be expressed as IF statements without loss of clarity, more compact code 
  1003. will usually result.
  1004. \
  1005. 499 Variant tags are ignored in this implementation
  1006. In arguments to SIZE, TSIZE, NEW and DISPOSE, variant tags may be given to
  1007. specify the size of a particular variant. gpm ignores these, and uses the
  1008. size of the largest variant.
  1009. \
  1010. 500 Symbols follow module end
  1011. It is legal to have further text following the END ModuleName. which must
  1012. terminate any compilation unit; however, since this may not have been
  1013. intended, this warning is issued.
  1014. \
  1015. 501 Obsolete syntax, colon is compulsory
  1016. Modula syntax requires that an undistinguished variant record be declared as 
  1017. CASE : TagType OF ...; however, the older form CASE TagType OF ... is also 
  1018. accepted by gpm , with this warning.
  1019. \
  1020. 502 Obsolete syntax, export list is ignored
  1021. Modula no longer requires that objects be explicitly exported from
  1022. definition modules -- all names defined in definition modules are exported
  1023. automatically. The older form is simply ignored.
  1024. \
  1025. 503 Invalid option selection character (I,R,F,C,S only)
  1026. Any comment beginning with optional whitespace followed by "$" is assumed
  1027. to be an option selection. Like any comment, it has no effect on the meaning
  1028. of the program, but nevertheless is interpreted by the compiler as a direction 
  1029. to generate code which implements that meaning in a specific way (if possible).
  1030. The two characters following the $ must be an option selector character and 
  1031. the command character; for details, see the Implementation Specifics Chapter.
  1032.  
  1033. This comment appears to be an option selector, but has meaningless option
  1034. selector character.
  1035. \
  1036. 504 Too many levels of option restoration
  1037. One of the option commands, specified by '=', is to restore the option
  1038. setting to its value before the last change. If an '=' command has no
  1039. corresponding change to undo, this warning results. Note that changes nest
  1040. only to a depth of 8, so that the warning may be due to an attempt to
  1041. restore the earliest of more than 8 nested changes to the same option.
  1042. \
  1043. 505 Invalid option operator (+, -, = are valid)
  1044. The only option commands available are those specified by the three
  1045. operators:
  1046.     + set option on (saving previous setting, up to 8 levels)
  1047.     - set option off (saving previous setting, up to 8 levels)
  1048.     = restore option setting to value saved before last change
  1049. \
  1050. 506 Obsolete syntax, use SYSTEM.CAST for type transfers
  1051. The syntax of the unsafe, unchecked cast from one type to another is
  1052. CAST(NewType, value); however, the older form NewType(value) is accepted.
  1053. \
  1054. 507 Procedure is not called, assigned, or exported
  1055. Clearly, this procedure is of no use. This may be a valid state during
  1056. program development, or it may reflect a procedure no longer used. It may,
  1057. however, be a symptom of a mis-spelt reference to a procedure which
  1058. unfortunately happened to match another procedure name.
  1059. \
  1060. 508 No EXIT from this LOOP
  1061. This LOOP is 'infinite' since there is no EXIT or RETURN within it. This
  1062. may be deliberate, but may be an omission. Note that EXIT escapes from only 
  1063. the innermost enclosing LOOP, so that an outer LOOP will still need an EXIT. 
  1064. By contrast, the use of RETURN forcibly terminates all loops, and the 
  1065. procedure in which they are enclosed.
  1066. \
  1067. 509 Priority not implemented, ignored
  1068. \
  1069. 510 Non-standard conversion using VAL
  1070. GPM allows any scalar value to be transformed into any other scalar value 
  1071. using the pervasive function VAL.  This example is non-standard, and thus 
  1072. is not portable. The standard allows only (1) numeric -> numeric, 
  1073. (2) any -> whole number, (3) whole number -> any, (4) any -> same type.
  1074. In cases of subranges, these rules apply to the host types.
  1075. \
  1076. 511 REAL constant evaluates to INFINITY
  1077. Floating-point overflow and division by zero results in a signed infinity.
  1078. This value is distinct from MIN(REAL) and MAX(REAL) which define the range
  1079. of representable floating-point values.
  1080. \
  1081.