#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %recordformat rf ( %integer i, %real r, %integer i2)
struct RF {
union {
struct {
int I;
float R;
int I2;
};
};
};
// 3 %record (rf) rec1, rec2
struct RF REC1;
struct RF REC2;
// 4 %own %record (rf) %name %array recna1(2:3) ;! cannot be initialised
static struct RF *RECNA1[2];
struct _imp_dv RECNA1_dv = {RECNA1, sizeof(struct RF *) /*, dims, <bounds> */};
// 5 %record (rf) %name %array %name recnan1
struct RF **RECNAN1;
struct _imp_dv RECNAN1_dv = {0}; // assignment of an array to an arrayname must copy bounds info too...
// 6
// 7 rec1 = rec2
REC1 = REC2;
// 8 recnan1 == recna1 ;! I think this should translate to RECNAN1 = RECNA1 not RECNAN1 = &RECNA1 as it currently does
RECNAN1 = (struct RF *)RECNA1;
// 9
// 10 %control 3
// _imp_control(0x0003); /* %control is a compiler directive and does not generate code. */
// 11 recnan1(2) == rec1
RECNAN1[/*BUG*/ 2] = (struct RF *)/*?*/ &REC1;
// 12 rec2 = recnan1(2)
REC2 = *RECNAN1[/*BUG*/ 2];
// 13 %control 0
// _imp_control(0x0000); /* %control is a compiler directive and does not generate code. */
// 14
// 15 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}