7. Embedded QUEL for Pascal : Preprocessor Error Messages
 
Share this page                  
Preprocessor Error Messages
The following is a list of error messages specific to the Pascal language.
E_E20001
"Pascal attribute conflict in declaration of size for '%0c'."
Reason:
The program has specified conflicting size attributes for this object. For example, the following declaration is erroneous because of the attempt to extend the attribute size of the type 'smaller':
type
           smaller = [byte] 1..100;
var
           bigger : [word] smaller;
Action:
Correct the attribute size.
E_E20002
"Pascal subrange conflict. Upper and lower bounds are not the same type or they are not an ordinal type."
Reason:
Both bounds of a subrange declaration must be of the same ordinal type (single character or integer). If the subrange bounds types are different or if they are not ordinal types, the preprocessor will use the type of the second bound and accept the usage of variables declared with this subrange type. This will cause an error in later Pascal compilation.
Action:
Ensure both bounds of the subrange declaration are of the same ordinal type.
E_E20003
"Mismatching statement at end of Pascal subprogram. Check balanced subprogram headers and END pairs."
Reason:
You may have an end statement that is not balanced by a subprogram header (for example, PROGRAM, PROCEDURE, FUNCTION, or MODULE). These subprogram delimiters provide scoping for Pascal variables and labels generated by the preprocessor. If you had any syntax errors on the subprogram header statement, then correct those errors and preprocess the file again.
Action:
Ensure that the subprogram headers and end pairs are balanced.
E_E20004
"No ## DECLARE before first EQUEL statement '%0c'."
Reason:
You must issue the ## declare statement before the first embedded statement. The preprocessor generates code that references procedures and functions declared in a file included by the
## declare statement. Without issuing the
## declare statement, the Pascal compiler will not accept those references.
Action:
Ensure that the ## declare statement is included and issued before the first embedded statement.
E_E20005
"Pascal character array '%0c' must be PACKED or VARYING."
Reason:
A string referenced in an embedded statement must be either a packed array of char, a varying of char, or a single char. You have used a non-packed array of char as an embedded string variable.
Action:
Convert the variable declaration to either packed or varying, or subscript the array to reference only one element.
E_E20006
"Extraneous semicolon in Pascal declaration ignored."
Reason:
Only one semicolon is allowed between components of a record declaration. The preprocessor ignores the extra semicolons.
Action:
Delete the extra semicolon in your source code.
E_E20007
"Pascal dimension of '%0c' is %1c, but subscripted %2c times."
Reason:
You have not referenced the specified variable with the same number of subscripts as the number of dimensions with which the variable was declared. This error indicates that you have failed to subscript an array, or you have subscripted a non-array. The preprocessor does not parse declaration dimensions or subscript expressions.
Action:
Correct the code.
E_E20008
"Incorrect indirection of Pascal variable '%0c'. Variable is declared with indirection of %1c, but dereferenced (^) %2c time(s)."
Reason:
This error occurs when the address or value of a variable is incorrectly expressed because of faulty indirection. For example, the name of an integer pointer has been given instead of the variable that the pointer was pointing at.
Action:
Either redeclare the variable with the intended indirection (and check any implicit indirection in the type), or change its use in the current statement.
E_E20009
"Pascal Pass 2 failure on INCLUDE file. The maximum INCLUDE nesting exceeded %0c."
Reason:
The Pascal preprocessor must take a second pass in order to declare implicitly generated labels. If the source file referenced embedded INCLUDE files, then the second pass needs to generate labels into those files. Consequently there is a maximum nesting limit of INCLUDE files.
Action:
Try reorganizing your files to create a flatter source file structure.
E_2000A
"No ## PROCEDURE for current scope but labels have been generated."
Reason:
The Pascal preprocessor must take a second pass in order to declare implicitly generated labels. If labels were implicitly generated then the preprocessor needs to know where to declare them on the second pass. That is why one must precede subprogram headers (PROGRAM, PROCEDURE, FUNCTION and MODULE) with ##, or use the LABEL statement. If you did not declare your subprogram header to the preprocessor, the generated labels will be marked as undeclared by the Pascal compiler.
Action:
Correct the code.
E_E2000B
"Pascal Pass 2 open file failure. Cannot pass information from file '%0c' to '%1c'."
Reason:
The Pascal preprocessor must take a second pass in order to declare implicitly generated labels. Because there is a temporary file involved, and this file has a fixed name, you should avoid running the preprocessor more than once in the same directory. This error may also occur if the intermediate file disappeared, the system protections of the current directory are too restrictive or have changed, or if the original input file was moved between the first and second pass of the preprocessor.
Action:
Correct the code.
E_E2000C
"Pascal Pass 2 file inconsistency. Mismatching number of label markers in '%0c'."
Reason:
The Pascal preprocessor must take a second pass in order to declare implicitly generated labels. There was a difference between the number of label declaration sections the preprocessor expected to generate and the number of markers found in the intermediate file. This may be caused by an embedded include statement that requires its own scope for label generation.
Action:
If there were nested include statements whose files required labels, try to flatten them out into larger source files.
E_E2000D
"Missing Pascal keyword '%0c' in declaration."
Reason:
You did not use the specified keyword, or you did not make the word known to the preprocessor. If there are no other errors the preprocessor will generate correct Pascal code.
Action:
Ensure the indicated keyword is specified and made known to the preprocessor.
E_E2000E
"Illegal nesting of Pascal compilation units."
Reason:
You cannot nest modules and programs in themselves or each other.
Action:
Ensure you have placed the ## mark before the end statement for programs and modules.
E_E2000F
"Can not use indirection (^) on an undeclared Pascal variable '%0c'."
Reason:
You have used pointer indirection on a name that was not declared as a Pascal variable to the preprocessor.
Action:
If this really is a variable you should make its declaration known to the preprocessor.
E_E20010
"Can not subscript ([]) an undeclared Pascal variable '%0c'."
Reason:
You have used array subscription on a name that was not declared as a Pascal variable to the preprocessor.
Action:
If this really is a variable you should make its declaration known to the preprocessor.
E_E20011
"Can not subscript VARYING Pascal variable '%0c'."
Reason:
Elements of a varying-length character string array cannot be passed to the runtime system.
Action:
If you need to pass a single element then declare the array as a plain array (not PACKED or VARYING).
E_E20012
"Scalar Pascal type required for conformant schema bounds type."
Reason:
Pascal requires that bounds expressions of conformant arrays be of a scalar type.
Action:
Choose a scalar type, such as a single character or an integer.
E_E20013
"Pascal object '%0c' is not a variable."
Reason:
You have used the specified name as an embedded variable, but you have not declared it to the preprocessor. This may also be a scope problem.
Action:
Make sure you have typed the name correctly, declared the variable to the preprocessor and have used it in its scope.
E_E20014
"Too many comma separated names in declaration. Maximum number of names is %0c."
Reason:
The declaration of a comma-separated list of names in a declaration is too long. For example:
var
    a, b, ..... N : Integer;
Action:
Try breaking up the declaration into groups.
E_E20015
"EQUEL/Pascal does not support PARAM target lists."
If you need to use PARAM target lists, then you should write this subprogram in another host language (such as C or Fortran) and link that module with your Pascal program.
E_E20016
"Reissue of ## DECLARE statement. Second time is ignored."
Reason:
The ## declare statement should occur only once per module. Placing the statement after an EQUEL statement will also cause this error.
Action:
Ensure that the ## declare statement is issued only once.
E_E20017
"Missing semicolon (;) at end of Pascal LABEL declaration list."
Reason:
Earlier versions of EQUEL/Pascal did not require the use of a semicolon after the label statement. The preprocessor now requires the terminating semicolon if you include a list of your own labels with the label statement. If you do not include the semicolon, the preprocessor will generate correct code, but you should still correct the error.
Action:
Ensure that a semicolon ends the label declaration list.
E_E20018
"Last Pascal record member referenced in '%0c' is unknown."
Reason:
The last record member referenced is not a member of the current record.
Action:
Make sure you have spelled the member name correctly, and that it is a member of the specified record.
E_E20019
"Unclosed Pascal block. There are %0c unbalanced subprogram headers."
Reason:
The end of the file was reached with some program blocks left open.
Action:
Make sure you have an end statement for each subprogram header or embedded LABEL statement.
E_E2001A
"Pascal %0c '%1c' is not yet defined. An INTEGER is assumed."
Reason:
The specified TYPE or CONST name has not yet been declared.
Action:
Make sure that all types and constants are defined before use. Forward type declarations (such as pointers to undefined types) are an exception.
E_E2001B
"Underflow of comma separated name list in declaration."
Reason:
The stack used to store comma-separated names in declarations has been corrupted.
Action:
Try rearranging the list of names in the declaration.
E_E2001C
"Pascal variable '%0c' is of unsupported type SET or QUADRUPLE."
Reason:
You may declare variables of type set and quadruple, but you may not use them in embedded statements. The declarations are only allowed so that you can declare records with components of those types.
Action:
If those variables need to interact with Ingres, then declare the set variable as an array of boolean, and the quadruple variable as a double.
E_E2001D
"Adding an unknown name '%0c' in Pascal WITH statement."
Reason:
The specified name is not known to the preprocessor when used with an embedded with statement.
Action:
Check the spelling of the with statement and make sure it was declared to the preprocessor in the correct scope.
E_E2001E
"Overflow of Pascal WITH stack on variable '%0c'. Maximum depth is %1c."
Reason:
You have nested embedded with blocks too deeply.
Action:
Flatten your record declarations, or use partially qualified names in place of the deepest with statement.
E_E2001F
"A Pascal WITH block is still open."
Reason:
Every with block must be closed by an end statement. This error indicates that the end of a routine has been encountered before a with block inside the routine has been ended.
Action:
Ensure that every with block is closed by an end statement.
E_E20020
"Pascal WITH variable '%0c' must be of type RECORD."
Reason:
A with statement specified a variable that was not a record.
Action:
Check the name and verify that the scoping rules ensure that this use of the specified name refers to a record variable.
E_E20021
"Underflow of Pascal WITH stack."
Reason:
The stack used to manage a with record has been corrupted.
Action:
Try rearranging the nesting of with statements, or partially qualify some of the more deeply nested record components.
E_E20022
"Pascal variable '%0c' is a record, not a scalar value."
Reason:
The named variable refers to a record. It was used where a variable must be used to retrieve data from Ingres. This error may also cause a syntax error on any subsequent record components that are referenced.
Action:
Correct the use of the variable.