begin
! It would appear that Imp and C do not store their arrays in the same x-major order.
integerarray d2(0:1, 0:2)
ownintegerarray d1(0:5) = 0,1,2,3,4,5
integername d, e
integer i,j
d == d2(0,0); e == d1(0); d = e;
d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
for i = 0, 1, 1 cycle
for j = 0, 1, 2 cycle
printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(", ");
repeat
newline
repeat
newline
for i = 0, 1, 2 cycle
for j = 0, 1, 1 cycle
printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(", ");
repeat
newline
repeat
newline
endofprogram
!IMP77:
!gtoal@linux:~/src/compilers101/new-parser/imps$ /tmp/temptest
!d2(0, 0) = 0, d2(0, 1) = 1, d2(0, 2) = 2,
!d2(1, 0) = 3, d2(1, 1) = 4, d2(1, 2) = 5,
!
!d2(0, 0) = 0, d2(1, 0) = 3,
!d2(0, 1) = 1, d2(1, 1) = 4,
!d2(0, 2) = 2, d2(1, 2) = 5,
!
![Inferior 1 (process 26840) exited normally]
!No stack.
! IMPTOC:
!gtoal@linux:~/src/compilers101/new-parser/imps$ ./test119
!d2(0, 0) = 0, d2(0, 1) = 2, d2(0, 2) = 4,
!d2(1, 0) = 1, d2(1, 1) = 3, d2(1, 2) = 5,
!
!d2(0, 0) = 0, d2(1, 0) = 1,
!d2(0, 1) = 2, d2(1, 1) = 3,
!d2(0, 2) = 4, d2(1, 2) = 5,
!#include <perms.h>
!int _imp_mainep(int _imp_argc, char **_imp_argv)
!{
! _imp_enter();
! int D2[1 - 0 + 1][2 - 0 + 1];
! static int D1[5 - 0 + 1] = { 0, 1, 2, 3, 4, 5 };
! int *D;
! int *E;
! int I;
! int J;
! D = &D2[0][0];
! E = &D1[0];
! *D = *E;
! D = &INTEGER((char *)ADDR(*D) + 4);
! E = &INTEGER((char *)ADDR(*E) + 4);
! *D = *E;
! D = &INTEGER((char *)ADDR(*D) + 4);
! E = &INTEGER((char *)ADDR(*E) + 4);
! *D = *E;
! D = &INTEGER((char *)ADDR(*D) + 4);
! E = &INTEGER((char *)ADDR(*E) + 4);
! *D = *E;
! D = &INTEGER((char *)ADDR(*D) + 4);
! E = &INTEGER((char *)ADDR(*E) + 4);
! *D = *E;
! D = &INTEGER((char *)ADDR(*D) + 4);
! E = &INTEGER((char *)ADDR(*E) + 4);
! *D = *E;
! for (I = 0; I <= 1; I += 1) {
! for (J = 0; J <= 2; J += 1) {
! PRINTSTRING(_imp_str_literal("d2("));
! WRITE(I, 0);
! PRINTSTRING(_imp_str_literal(", "));
! WRITE(J, 0);
! PRINTSTRING(_imp_str_literal(") = "));
! WRITE(D2[I][J], 0);
! PRINTSTRING(_imp_str_literal(", "));
! }
! NEWLINE();
! }
! NEWLINE();
! for (I = 0; I <= 2; I += 1) {
! for (J = 0; J <= 1; J += 1) {
! PRINTSTRING(_imp_str_literal("d2("));
! WRITE(J, 0);
! PRINTSTRING(_imp_str_literal(", "));
! WRITE(I, 0);
! PRINTSTRING(_imp_str_literal(") = "));
! WRITE(D2[J][I], 0);
! PRINTSTRING(_imp_str_literal(", "));
! }
! NEWLINE();
! }
! NEWLINE();
! _imp_leave();
!}