#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %conststring(10) fred="abcdefghij"
const _imp_string10 FRED = _imp_str_init("abcdefghij");
// 3 %string(10) a,b
_imp_string10 A;
_imp_string10 B;
// 4
// 5 %if fred->a.("def").b %start
if (!(_imp_resolve(*({
_imp_string10 tmp = FRED;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &A, *({
_imp_string tmp = _imp_str_literal("def");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &B)))
goto L_0001;
// 6 printstring("OK a=".a);
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string255) tmp = *({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/_imp_str_literal_ptr("OK a="), (_imp_string *)/*?*/&A); (_imp_string255 *)&tmp;})/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
// 7 newline
_imp_NEWLINE();
// 8 %finish %else %start
goto L_0002;
L_0001:;
// 9 printstring("fail")
_imp_PRINTSTRING(_imp_str_literal("fail"));
// 10 newline;
_imp_NEWLINE();
// 11 printstring(a);
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string10) tmp = A/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
// 12 newline;
_imp_NEWLINE();
// 13 printstring(b)
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string10) tmp = B/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
// 14 newline
_imp_NEWLINE();
// 15 printstring(fred)
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string10) tmp = FRED/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
// 16 newline
_imp_NEWLINE();
// 17 %finish
L_0002:;
// 18 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}