,ll 6.6
,cs 10
,pl 66
,lm 0.2,0.5
,pn 1
,ju
,hd
,ce
OmegaSoft 6809 Cross Pascal Language Handbook (V1.0)
,,
,ft

,ce 1
9E-##
,,
,ce
OmegaSoft 6809 Cross Pascal Language Handbook (V1.0)
,CE
APPENDIX

APPENDIX E - ISO VALIDATION REPORT

Pascal Processor Identification

Host Computer : Data-Comp/GMX Mustang-020 system running under the OS-9/68000 operating system.

Host Computer Requirements : MC68000 series processor, minimum of 256k bytes of free memory, 2 or more disk drives.

Target Computers : Smoke Signal Chieftain running the OS-9 operating system. GESSBS-4 single board computer (for conformance checking of target debugger).

Processor : OmegaSoft 6809 Cross Pascal version 1.10

Test Conditions

Tester : R.D. Reimiller

Date : Partial tests - January 1987, Remainder of tests - April 1987

Validation Suite Version : 3.0

General Introduction to the OmegaSoft Implementation

The OmegaSoft Pascal compiler was developed to provide the users of the 6809 processor with a fast and efficient way to develop code capable of being installed into a 6809 target system. The compiler is aimed primarily at industrial applications such as process control and instrumentation. Due to the nature of these applications many extensions were added such as byte arithmetic, long integers, dynamic length strings, modular compilation, and versatile variable addressing. As a secondary requirement it was desired that the compiler be able to accept a Pascal program written in ISO standard Pascal wherever possible.

Conformance Tests

Number of tests passed = 145
Number of tests failed =  11 (8 reasons)

,in 0.4
Details of Failed Tests

Test 6.4.2.3-3 : If an enumerated type is defined in the index declaration part of an array its values cannot be referenced until the array declaration is complete.

Test 6.4.2.3-4 : If an enumerated type is defined in a record its values cannot be referenced until the record declaration is complete.

Tests 6.6.3.1-4, 6.6.3.4-1, 6.6.3.4-2, and 6.6.3.5-1 : Procedures and functions cannot be passed as parameters.

Test 6.6.5.4-1 : Pack and Unpack procedures are not supported.

Test 6.7.2.2-3 : Failed on MOD using a negative dividend. The Jenson/Wirth "remainder after division" method is used rather than the method specified in the ISO standard.
,CE
ISO VALIDATION REPORT

Test 6.8.2.4-1 : Non-local GOTO's are not allowed.

Test 6.8.3.9-1 : Assignment to the control variable of a FOR loop occurs after the evaluation of the first expression.

Test 6.9.3.5.1-1 : Real numbers written out in floating point format always have six digits to the right of the decimal point.
,in 0

Deviance Tests

Number of deviations correctly detected = 84
Number of tests showing true extensions = 45 (22 reasons)
Number of tests not detecting erroneous deviations = 9 (5 reasons)

,in 0.4
Details of Extensions

Test 6.1.5-4 : No digits are needed after the decimal point in a real number.

Tests 6.1.6-4 and 6.1.6-5 : Labels may be an positive integer constant.

Tests 6.1.7-5, 6.4.3.1-3, 6.4.3.1-4, 6.6.3.3-5, 6.9.3.2-2 : All variables are packed at the byte level, the reserved word "Packed" is ignored in any type declaration.

Tests 6.1.7-6, 6.1.7-7, 6.1.7-8, 6.4.3.2-5 : Strings, characters, and arrays of less than 127 elements are all compatible.

Tests 6.1.7-11 and 6.4.5-12 : Strings are dynamic length, allowable length is from 0 (null string) to 126.

Tests 6.2.1-8 and 6.2.1-10 : Label, const, type, and var declaration sections can be in any order and repeated multiple times until a procedure/function declaration or "begin" is encountered.

Test 6.3-9 : In any context where a constant is acceptable an expression with a constant value may be used.

Test 6.4.2.3-5 : All enumerated type values are compatible.

Test 6.4.3.3-8 : The values of the case constants in a record variant declaration are not used, access is provided to all variants at all times.

Test 6.4.5-7 : All subranges of the same type are compatible.

Test 6.4.5-8 and 6.4.5-13 : Arrays of the same size are compatible.

Test 6.4.5-9 and 6.4.6-7 : Records of the same size are compatible.

Test 6.4.5-10 : All pointers are compatible with other pointers or the type "hex".
,pg

,CE
ISO VALIDATION REPORT

Test 6.6.2-5 : Any type (except device) can be used as a function return type as long as it is less than 128 bytes long.

Test 6.6.6.3-2 : Trunc and round can have integer parameters.

Test 6.7.2.3-2 : Logical operators are valid for character and integer expressions.

Test 6.7.2.5-6 : Arrays of the same size can be compared. Records of the same size can be compared.

Test 6.8.2.4-2 : Goto between branches of an If statement are allowed.

Test 6.8.2.4-3 : Goto between branches of a Case statement are allowed.

Test 6.8.3.5-7 and 6.8.3.5-8 : Subrange Case statement constants are allowed.

Tests 6.8.3.9-5, 6.8.3.9-6, 6.8.3.9-7, 6.8.3.9-10, 6.8.3.9-12, 6.8.3.9-13, 6.8.3.9-14, 6.8.3.9-15, 6.8.3.9-16, 6.8.3.9-17 : No restrictions are placed on For statement control variable.

Test 6.8.3.9-8 and 6.8.3.9-9 : If a For statement is entered and exited normally the control variable will be valid and contain the final value. If a For statement is not entered then the control variable will be valid and contain the initial value.

Details of deviations

Test 6.1.8-5 : A number can be terminated by a letter.

Test 6.2.1-5 and 6.2.1-6 : Multiple siting for labels is not checked, nor are labels required to be sited at all.

Tests 6.2.2-8, 6.3-6, 6.4.1-3 : Error in scope rules.

Test 6.6.1-7 : Unresolved forward function or procedure declaration is not detected.

Test 6.6.3.3-4 : Use of a field selector as a parameter is not detected.

,in 0
Error-handling

Number of errors correctly detected = 19
Number of errors not detected = 31 (13 reasons)

,in 0.4
Details of errors not detected

Tests 6.2.1-11, 6.4.3.3-11, 6.4.3.3-12, 6.4.3.3-11, 6.5.4-2, 6.6.2-9 : No checking is made to verify whether or not a variable is accessed that has an undefined value, Instead the variables are guaranteed to contain garbage unless initialized.
,pg
,CE
ISO VALIDATION REPORT

Tests 6.4.3.3-1, 6.6.5.3-8, 6.6.5.3-9, 6.6.5.3-10 : Any tagfields or selector variables in a record variant are irrelevant to which variants can be accessed.

Test 6.4.6-10 : No subrange checking on parameter passing.

Tests 6.4.6-12, 6.4.6-13, 6.7.2.4-4 : Overflow checking is done on sets based on byte count - not per element.

Tests 6.5.4-1, 6.6.5.3-4, 6.6.5.3-5, 6.6.5.3-11 : Pointer value is not checked before use.

Tests 6.5.5-2, 6.5.5-3, 6.6.5.3-6, 6.6.5.3-7 : There are no restrictions on the use of pointers or file buffer variables which are currently parameters or elements of a with statement.

Test 6.6.5.2-5 : To support random files a "get" is not executed until called as a procedure or when accessing the file buffer without a valid element - not at the time of "reset".

Test 6.6.6.4-7 : Char and Hex variables "roll over" from maximum value to zero - it is not considered an error.

Test 6.6.6.5-7 : If eof is true - so is eoln - it is not considered an error to check eoln if eof is true.

Tests 6.8.3.5-10 and 6.8.3.5-11 : If no match in case statement, falls through with no error.

Test 6.8.3.9-18 : No restrictions on the control variable of a For loop.

Test 6.8.3.9-1 : At the completion of a For loop the control variable is valid and has the final value.

Tests 6.9.3.2-5 and 6.9.3.2-5 : Writing of real numbers with no digits past the decimal point is permissible.
,in 0

Quality Measurement

Number of tests run = 52
Number of tests incorrectly handled = 5
,in 0.4

Results of tests

"Synthetic Benchmark" - execution time 1 minute, 9 seconds.

"GAMM measure" - execution time 1 minute, 39 seconds for N = 1000

procedure calls - execution time 31 seconds

identifiers are significant up to 120 characters.

source lines may be up to 120 characters.

no reasonable limit on number of real literals allowed.
,pg
,ce
ISO VALIDATION REPORT

no reasonable limit on number of strings allowed.

if a line of code is incorrectly part of an unclosed comment the compiler will signal that no code was generated for the line.

no reasonable limit on the number of types or variables may be declared in a program, given enough memory space.

no reasonable limit on number of labels, but there can be a maximum of 20 forward referenced goto's in a block.

at least 128 constant definitions are allowed per constant declaration part.

at least 128 procedures are permitted in a program.

maximum size for an array or record or for any variable section is 32K bytes.

at least 8 index types can appear in an array type.

at least 128 case-constant values are permitted in a variant record.

at least 50 record-sections can appear in the fixed part of a record.

at least 30 distinct variants are permitted in a record.

"Warshall's algorithm" procedure size = 270 bytes, execution time = 9.7 seconds.

considerably less than 300 identifiers are allowed in a declaration list (actual number depends on length of identifier, 130 4-character long identifiers were allowed in the test).

at least an 10 dimensional array is allowed.

procedures may be nested to at least 15 levels.

at least 30 formal parameter sections can appear in one parameter list.

the dispose in the standard heap manager will only set the pointer to nil, it will not restore memory.

deeply nested function calls are allowed (at least 6).

deeply nested compound statements are allowed (at least 25).

a procedure may have at least 300 statements.

deeply nested if statements are allowed (at least 25).

at least 256 case constants are allowed.

at least 100 constants are allowed in a case-constant list.
,pg
,in 0
,ce
ISO VALIDATION REPORT

,in 0.4
case statements can be nested to at least 15 deep.

repeat loops can be nested to at least 15 deep.

while loops can be nested to at least 15 deep.

for loops can be nested to at least 15 deep.

with statements can be nested to at least 15 deep.

recursive I/O can be used with the same file for the second I/O action.

at least 30 variable-accesses can appear in a read or readln parameter list.

at least 30 write-parameters can appear in a write or writeln parameter list.

data written on the output file appears regardless of the omission of a line marker.

,in 0

Implementation-defined

Number of tests run = 12
Number of tests incorrectly handled = 1
,in 0.4

Details of implementation-defined features

Tests 6.1.9-5 and 6.1.9-6 : alternate symbols are available for comments, array indices, and pointers.

Test 6.4.2.2-10 : Maxint is 32767

Test 6.4.3.4-5 : maximum range of set elements is 0..1007

Test 6.6.6.2-11 : Base = 2, Bits of mantissa = 24, non-rounding, no guard bits, 7 bit exponent, minimum exponent = -65, maximum exponent = 63, minimum value = 2.710506e-20, maximum value = 9.223372e+18. Minimum increment is 1.192093e-7.

Tests 6.7.2.3-3 and 6.7.2.3-4 : Boolean expressions use short circuit evaluation.

Test 6.8.2.2-1 and 6.8.2.2-2 : In an assignment statement evaluation of the expression is done before the selection of the variable.

Test 6.8.2.3-2 : When a procedure is called the parameters are evaluated in forward order.


Test 6.9.3.2-6 : Default field widths are : Integers = 10, Boolean = 6, Real = 16.

Test 6.9.3.5.1-2 : Real values written in floating point format have 2 exponent digits.
,pg

,CE
ISO VALIDATION REPORT

Test 6.9.3.6-1 : Boolean values written in the default fieldwidth have the format as shown (between quotes) "  TRUE" and " FALSE".

Details of tests incorrectly handled

Test 6.6.6.1-1 : functions are not allowed to be passed as parameters to a procedure.
,in 0

Level 1 Tests - Not applicable

Extensions

Extensions present = 1

,in 0.4
Result of extension

Test 6.8.3.5-16 : An otherwise clause is allowed on a case statement.
