#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %comment %begin
// 3 %recordformat rf ( %integer i, %real r, %integer i2)
struct RF {
union {
struct {
int I;
float R;
int I2;
};
};
};
// 4 %comment %recordformat rf ( %integer i, %real r, %integer i2)
// 5
// 6 %comment
// 7 %record (rf) rec1, rec2
struct RF REC1;
struct RF REC2;
// 8 %comment %record (rf) rec1, rec2
// 9 %record (rf) %name recn1, recn2
struct RF *RECN1;
struct RF *RECN2;
// 10 %comment %record (rf) %name recn1, recn2
// 11 %record (rf) %array reca1,reca2(2:3),reca3(4:5,1:2)
struct RF RECA1[2];
struct RF RECA2[2];
struct RF RECA3[2][2];
// 12 %comment %record (rf) %array reca1,reca2(2:3),reca3(4:5,1:2)
// 13 %record (rf) %array %name recan1,recan2
struct RF *RECAN1;
struct RF *RECAN2;
// 14 %comment %record (rf) %array %name recan1,recan2
// 15 %record (rf) %name %array recna1,recna2(2:3),recna3(1:2)
struct RF *RECNA1[2];
struct RF *RECNA2[2];
struct RF *RECNA3[2];
// 16 %comment %record (rf) %name %array recna1,recna2(2:3),recna3(1:2)
// 17 %record (rf) %name %array %name recnan1,recnan2
struct RF **RECNAN1;
struct RF **RECNAN2;
// 18 %comment %record (rf) %name %array %name recnan1,recnan2
// 19 %record(rf)%fn rfn1
struct RF RFN1(void) {
// 20 %comment %record(rf)%fn rfn1
// 21 %result = rec2
return REC2;
// 22 %comment %result = rec2
// 23 %end
} /* end of RFN1 */
// 24 %comment %end
// 25 %record(rf)%map rmap1
struct RF *
RMAP1(void)
{
// 26 %comment %record(rf)%map rmap1
// 27 %result == rec2
return /*?*/ &REC2;
// 28 %comment %result == rec2
// 29 %end
} /* end of RMAP1 */
// 30 %comment %end
// 31
// 32 %comment
// 33 rec1 = rec2
REC1 = REC2;
// 34 %comment rec1 = rec2
// 35 recn1 == rec2
RECN1 = (struct RF *)/*?*/ &REC2;
// 36 %comment recn1 == rec2
// 37 rec1 = recn1
REC1 = *RECN1;
// 38 %comment rec1 = recn1
// 39 reca1(2) = rec2
RECA1[0] = REC2;
// 40 %comment reca1(2) = rec2
// 41 rec1 = reca1(2)
REC1 = RECA1[0];
// 42 %comment rec1 = reca1(2)
// 43 reca3(4,2) = rec2
RECA3[0][1] = REC2;
// 44 %comment reca3(4,2) = rec2
// 45 rec1 = reca3(4,2)
REC1 = RECA3[0][1];
// 46 %comment rec1 = reca3(4,2)
// 47 recnan1 == recna1
RECNAN1 = (struct RF *)RECNA1;
// 48 %comment recnan1 == recna1
// 49 recnan1(2) == rec1
[/*BUG*/ 0] = (struct RF *)/*?*/ &REC1;
// 50 %comment recnan1(2) == rec1
// 51 rec1 = recnan1(2)
REC1 = *[/*BUG*/ 0];
// 52 %comment rec1 = recnan1(2)
// 53 rec1 = rfn1
REC1 = RFN1();
// 54 %comment rec1 = rfn1
// 55 rmap1 = rec1
*RMAP1() = REC1;
// 56 %comment rmap1 = rec1
// 57 rec1 = rmap1
REC1 = *RMAP1();
// 58 %comment rec1 = rmap1
// 59
// 60 %comment
// 61 %comment %endofprogram
// 62 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}