- •Acknowledgements
- •Introduction
- •Information technology --- Programming languages --- Pascal
- •1 Scope
- •2 Normative reference
- •3 Definitions
- •3.1 Error
- •4 Definitional conventions
- •5 Compliance
- •5.1 Processors
- •5.2 Programs
- •6 Requirements
- •6.1 Lexical tokens
- •6.1.1 General
- •6.1.2 Special-symbols
- •6.1.3 Identifiers
- •6.1.4 Directives
- •6.1.5 Numbers
- •6.1.6 Labels
- •6.1.7 Character-strings
- •6.1.8 Token separators
- •6.1.9 Lexical alternatives
- •6.2 Blocks, scopes, and activations
- •6.2.1 Blocks
- •6.2.2 Scopes
- •6.2.3 Activations
- •6.3 Constant-definitions
- •6.4 Type-definitions
- •6.4.1 General
- •6.4.2 Simple-types
- •6.4.2.1 General
- •6.4.2.2 Required simple-types
- •6.4.2.3 Enumerated-types
- •6.4.2.4 Subrange-types
- •6.4.3 Structured-types
- •6.4.3.1 General
- •6.4.3.2 Array-types
- •6.4.3.3 Record-types
- •6.4.3.5 File-types
- •6.4.4 Pointer-types
- •6.4.5 Compatible types
- •6.4.7 Example of a type-definition-part
- •6.5 Declarations and denotations of variables
- •6.5.1 Variable-declarations
- •6.5.2 Entire-variables
- •6.5.3 Component-variables
- •6.5.3.1 General
- •6.5.3.2 Indexed-variables
- •6.5.3.3 Field-designators
- •6.5.4 Identified-variables
- •6.5.5 Buffer-variables
- •6.6 Procedure and function declarations
- •6.6.1 Procedure-declarations
- •6.6.2 Function-declarations
- •6.6.3 Parameters
- •6.6.3.1 General
- •6.6.3.2 Value parameters
- •6.6.3.3 Variable parameters
- •6.6.3.4 Procedural parameters
- •6.6.3.5 Functional parameters
- •6.6.3.6 Parameter list congruity
- •6.6.3.7 Conformant array parameters
- •6.6.3.8 Conformability
- •6.6.5.3 Dynamic allocation procedures
- •6.6.5.4 Transfer procedures
- •6.6.6 Required functions
- •6.6.6.1 General
- •6.6.6.2 Arithmetic functions
- •6.6.6.3 Transfer functions
- •6.6.6.4 Ordinal functions
- •6.6.6.5 Boolean functions
- •6.7 Expressions
- •6.7.1 General
- •6.7.2 Operators
- •6.7.2.1 General
- •6.7.2.2 Arithmetic operators
- •6.7.2.3 Boolean operators
- •6.7.2.4 Set operators
- •6.7.2.5 Relational operators
- •6.7.3 Function-designators
- •6.8 Statements
- •6.8.1 General
- •6.8.2 Simple-statements
- •6.8.2.1 General
- •6.8.2.2 Assignment-statements
- •6.8.2.3 Procedure-statements
- •6.8.2.4 Goto-statements
- •6.8.3.5 Case-statements
- •6.8.3.6 Repetitive-statements
- •6.8.3.7 Repeat-statements
- •6.8.3.8 While-statements
- •6.8.3.10 With-statements
- •6.9 Input and output
- •6.9.1 The procedure read
- •6.9.2 The procedure readln
- •6.9.3 The procedure write
- •6.9.3.1 Write-parameters
- •6.9.3.2 Char-type
- •6.9.3.3 Integer-type
- •6.9.3.4 Real-type
- •6.9.3.5 Boolean-type
- •6.9.3.6 String-types
- •6.9.4 The procedure writeln
- •6.9.5 The procedure page
- •6.10 Programs
- •Annex a
- •Collected syntax
- •Annex b
- •Cross-references
- •Annex c
- •Required identifiers
- •Identifier Reference(s)
- •Annex d
- •Annex e
- •Implementation-defined features
- •Annex f
- •Implementation-dependent features
6.6.3.3 Variable parameters
The actual-parameter shall be a variable-access. The type possessed by the actual-parameters shall be the same as that denoted by the type-identifier of the variable-parameter-specification, and the formal-parameters shall also possess that type. The actual-parameter shall be accessed before the activation of the block, and this access shall establish a reference to the variable thereby accessed during the entire activation of the block; the corresponding formal-parameter and its associated variable-identifier shall denote the referenced variable during the activation.
An actual variable parameter shall not denote a field that is the selector of a variant-part. An actual variable parameter shall not denote a component of a variable where that variable possesses a type that is designated packed.
6.6.3.4 Procedural parameters
The actual-parameter (see 6.7.3 and 6.8.2.3) shall be a procedure-identifier that has a defining-point contained by the program-block. The formal-parameter-list, if any, closest-contained by the formal-parameter-section and the formal-parameter-list, if any, that defines the formal-parameters of the procedure denoted by the actual-parameter shall be congruous, or neither formal-parameter-list shall occur. The formal-parameter and its associated procedure-identifier shall denote the actual-parameter during the entire activation of the block.
6.6.3.5 Functional parameters
The actual-parameter (see 6.7.3 and 6.8.2.3) shall be a function-identifier that has a defining-point contained by the program-block. The formal-parameter-list, if any, closest-contained by the formal-parameter-section and the formal-parameter-list, if any, that defines the formal-parameters of the function denoted by the actual-parameter shall be congruous, or neither formal-parameter-list shall occur. The result-type closest-contained by the formal-parameter-section shall denote the same type as the result type of the function. The formal-parameter and its associated function-identifier shall denote the actual-parameter during the entire activation of the block.
6.6.3.6 Parameter list congruity
Two formal-parameter-lists shall be congruous if they contain the same number of formal-parameter-sections and if the formal-parameter-sections in corresponding positions match. Two formal-parameter-sections shall match if any of the following statements is true.
a) They are both value-parameter-specifications containing the same number of parameters and the type-identifier in each value-parameter-specification denotes the same type.
b) They are both variable-parameter-specifications containing the same number of parameters and the type-identifier in each variable-parameter-specification denotes the same type.
c) They are both procedural-parameter-specifications and the formal-parameter-lists of the procedure-headings thereof are congruous.
d) They are both functional-parameter-specifications, the formal-parameter-lists of the function-headings thereof are congruous, and the type-identifiers of the result-types of the function-headings thereof denote the same type.
e) They are either both value-conformant-array-specifications or both variable-conformant-array-specifications; and in both cases the conformant-array-parameter-specifications contain the same number of parameters and equivalent conformant-array-schemas. Two conformant-array-schemas shall be equivalent if all of the following four statements are true.
1) There is a single index-type-specification in each conformant-array-schema.
2) The ordinal-type-identifier in each index-type-specification denotes the same type.
3) Either the (component) conformant-array-schemas of the conformant-array-schemas are equivalent or the type-identifiers of the conformant-array-schemas denote the same type.
4) Either both conformant-array-schemas are packed-conformant-array-schemas or both are unpacked-conformant-array-schemas.
NOTES
1 The abbreviated conformant-array-schema and its corresponding full form are equivalent (see 6.6.3.7).
2 For the status of item e) above see 5.1 a), 5.1 b), 5.1 c), 5.2 a), and 5.2 b).