
This fixes a bug that cgtest56 exposed, where an array of a user-defined type that was itself an array wound up being an array of arrays rather than a single array. As part of this, makeArrayType is now called addDimensions, and takes a list of dimensions to add rather than just one.
69 lines
1.3 KiB
Plaintext
69 lines
1.3 KiB
Plaintext
-- From cgtest56
|
|
|
|
PROC title (VAL []BYTE s)
|
|
SKIP
|
|
:
|
|
PROC check (VAL INT a, b, VAL []BYTE s)
|
|
ASSERT (a = b)
|
|
:
|
|
INT FUNCTION id (VAL INT x) IS x:
|
|
|
|
PROC arrays.of.arrays()
|
|
VAL n IS 5 :
|
|
DATA TYPE m0 IS INT :
|
|
DATA TYPE m1 IS [n]m0 :
|
|
DATA TYPE m2 IS [n]m1 :
|
|
DATA TYPE m3 IS [n]m2 :
|
|
INT i, j, k :
|
|
m0 m.0 :
|
|
m1 m.1 :
|
|
m2 m.2 :
|
|
m3 m.3 :
|
|
SEQ
|
|
title("arrays of arrays")
|
|
i := SIZE m.3
|
|
check(i, n, "ARR-01")
|
|
i := SIZE m.3[0]
|
|
check(i, n, "ARR-02")
|
|
i := SIZE m.3[0][0]
|
|
check(i, n, "ARR-03")
|
|
|
|
SEQ i = 0 FOR SIZE m.3
|
|
SEQ j = 0 FOR SIZE m.3[0]
|
|
SEQ k = 0 FOR SIZE m.3[0][0]
|
|
m.3[i][j][k] := m0 ((i + j) + k)
|
|
|
|
i := id(1)
|
|
m.2 := m.3[i]
|
|
SEQ j = 0 FOR SIZE m.2
|
|
SEQ k = 0 FOR SIZE m.2[0]
|
|
check(INT m.2[j][k], (j + k) + 1, "ARR-04")
|
|
|
|
j := id(2)
|
|
m.1 := m.2[j]
|
|
SEQ k = 0 FOR SIZE m.1
|
|
check(INT m.1[k], k + 3, "ARR-05")
|
|
|
|
i := id(2)
|
|
j := id(3)
|
|
m.1 := m.3[i][j]
|
|
SEQ k = 0 FOR SIZE m.1
|
|
check(INT m.1[k], k + 5, "ARR-06")
|
|
|
|
k := id(4)
|
|
m.0 := m.1[k] -- m1 already has m.3[2][3]
|
|
check(INT m.0, 9, "ARR-07")
|
|
|
|
j := id(3)
|
|
k := id(4)
|
|
m.0 := m.2[j][k] -- m2 already has m.3[1]
|
|
check(INT m.0, 8, "ARR-08")
|
|
|
|
i := id(2)
|
|
j := id(3)
|
|
k := id(4)
|
|
m.0 := m.3[i][j][k]
|
|
check(INT m.0, 9, "ARR-09")
|
|
:
|
|
|