Skip to content

Handle invalid variables

Inform6 will happily compile a statement like @store $ffff $0000;. It is obviously illegal because you don't have more than 255 variables + the stack. Currently it compiles to:

43ba:  cd 1f ff ff             store           gffef #00

I suggest a message like 43ba: cd 1f ff ff store [invalid variable: ffff] #00 instead.

This can be done by changing the function print_variable in txd.c to:

#ifdef __STDC__
static void print_variable (int varnum)
#else
static void print_variable (varnum)
int varnum;
#endif
{
    if (varnum < 16) {
	if (option_symbols &&
	    print_local_name (start_of_routine, varnum - 1)) /* null */
	    ;
	else if (option_inform)
	    tx_printf ("local%d", varnum - 1);
	else
	    tx_printf ("L%02x", varnum - 1);
	}
	else if (varnum < 256) {
		if (option_symbols &&
			print_global_name(start_of_routine, varnum - 16)) /* null */
			;
		else
			tx_printf("%c%02x", (option_inform) ? 'g' : 'G', varnum - 16);
	}
	else
		tx_printf("[invalid variable: %lx]", varnum);
}