/*  runerr.h - runtime error messages
 *
 *  These are the messages for errors detected by the generated code, plus some
 *  others caught inside the RTS that make use of the same formatting routines.
 *  This is *not* a list of all the possible runtime errors.
 *
 *  This file is included by both compiler and RTS with various definitions
 *  of RUNERR in effect.  The generated code passes the error number and 
 *  variable arguments to the RTS, which looks up the error message in a table.
 *
 *  Messages can include these substitutions:
 *
 *	fmt  argtype	meaning
 *	---  --------	------------------------
 *	%d   int	decimal integer
 *	%B   Array *	array bounds
 *	%L   String *	current string length
 *	%M   String *	maximum string length
 *	%S   String *	string value (truncated to reasonable length)
 *
 *  Each definition below gives symbol, error number, and message.
 */

RUNERR(E_SEMV,11,"illegal semaphore initializer value: %d")

RUNERR(E_ABND,20,"illegal bounds [%d:%d] for array creation")
RUNERR(E_ASUB,21,"illegal subscript [%d] of array with bounds %B")
RUNERR(E_ASLC,22,"illegal slice [%d:%d] of array with bounds %B")
RUNERR(E_ASIZ,23,"size mismatch on array assignment:  %B := %B")
RUNERR(E_ACHG,25,"size mismatch on assignment to slice: [%d:%d] := %B")
RUNERR(E_AREP,26,"illegal repetition count %d in array constructor")

RUNERR(E_SSUB,31,"illegal subscript [%d] of string[%M] with current length %L")
RUNERR(E_SSLC,32,"illegal slice [%d:%d] of string[%M] with current length %L")
RUNERR(E_SSIZ,33,"string of length %L is too long to assign to string[%M]")
RUNERR(E_SELM,34,"element %d (length=%d) is too long to assign to string[%d]")
RUNERR(E_SCHG,35,"string of length %L is wrong length to assign to slice [%d:%d]")

RUNERR(E_CCNV,41,"illegal conversion: char(%d)")
RUNERR(E_BCNV,42,"illegal conversion: bool(\"%S\")")
RUNERR(E_ICNV,43,"illegal conversion: int(\"%S\")")
RUNERR(E_RCNV,44,"illegal conversion: real(\"%S\")")
RUNERR(E_PCNV,45,"illegal conversion: pointer(\"%S\")")
