MODULE errors;

TYPE string* = ARRAY 128 OF CHAR;

VAR errors- : ARRAY 350 OF string;


BEGIN
(* Incorrect use of the language Oberon *)
errors[0] := "undeclared identifier";
errors[1] := "multiply defined identifier";
errors[2] := "illegal character in number";
errors[3] := "illegal character in string";
errors[4] := "identifier does not match procedure name";
errors[5] := "comment not closed";
errors[6] := "";
errors[7] := "";
errors[8] := "";
errors[9] := "'=' expected";
errors[10] :="";
errors[11] :="";
errors[12] := "type definition starts with incorrect symbol";
errors[13] := "factor starts with incorrect symbol";
errors[14] := "statement starts with incorrect symbol";
errors[15] := "declaration followed by incorrect symbol";
errors[16] := "MODULE expected";
errors[17] := "";
errors[18] := "'.' missing";
errors[19] := "',' missing";
errors[20] := "':' missing";
errors[21] := "";
errors[22] := "')' missing";
errors[23] := "']' missing";
errors[24] := "'}' missing";
errors[25] := "OF missing";
errors[26] := "THEN missing";
errors[27] := "DO missing";
errors[28] := "TO missing";
errors[29] := "";
errors[30] := "'(' missing";
errors[31] := "";
errors[32] := "";
errors[33] := "";
errors[34] := "':=' missing";
errors[35] := "',' or OF expected";
errors[36] := "";
errors[37] := "";
errors[38] := "identifier expected";
errors[39] := "';' missing";
errors[40] := "";
errors[41] := "END missing";
errors[42] := "";
errors[43] := "";
errors[44] := "UNTIL missing";
errors[45] := "";
errors[46] := "EXIT not within loop statement";
errors[47] := "illegally marked identifier";
errors[48] := "";
errors[49] := "";
errors[50] := "expression should be constant";
errors[51] := "constant not an integer";
errors[52] := "identifier does not denote a type";
errors[53] := "identifier does not denote a record type";
errors[54] := "result type of procedure is not a basic type";
errors[55] := "procedure call of a function";
errors[56] := "assignment to non-variable";
errors[57] := "pointer not bound to record or array type";
errors[58] := "recursive type definition";
errors[59] := "illegal open array parameter";
errors[60] := "wrong type of case label";
errors[61] := "inadmissible type of case label";
errors[62] := "case label defined more than once";
errors[63] := "illegal value of constant";
errors[64] := "more actual than formal parameters";
errors[65] := "fewer actual than formal parameters";
errors[66] := "element types of actual array and formal open array differ";
errors[67] := "actual parameter corresponding to open array is not an array";
errors[68] := "control variable must be integer";
errors[69] := "parameter must be an integer constant";
errors[70] := "pointer or VAR record required as formal receiver";
errors[71] := "pointer expected as actual receiver";
errors[72] := "procedure must be bound to a record of the same scope";
errors[73] := "procedure must have level 0";
errors[74] := "procedure unknown in base type";
errors[75] := "invalid call of base procedure";
errors[76] := "this variable (field) is read only";
errors[77] := "object is not a record";
errors[78] := "dereferenced object is not a variable";
errors[79] := "indexed object is not a variable";
errors[80] := "index expression is not an integer";
errors[81] := "index out of specified bounds";
errors[82] := "indexed variable is not an array";
errors[83] := "undefined record field";
errors[84] := "dereferenced variable is not a pointer";
errors[85] := "guard or test type is not an extension of variable type";
errors[86] := "guard or testtype is not a pointer";
errors[87] := "guarded or tested variable is neither a pointer nor a VAR-parameter record";
errors[88] := "open array not allowed as variable, record field or array element";
errors[89] := "";
errors[90] := "";
errors[91] := "";
errors[92] := "operand of IN not an integer, or not a set";
errors[93] := "set element type is not an integer";
errors[94] := "operand of & is not of type BOOLEAN";
errors[95] := "operand of OR is not of type BOOLEAN";
errors[96] := "operand not applicable to (unary) +";
errors[97] := "operand not applicable to (unary) -";
errors[98] := "operand of ~ is not of type BOOLEAN";
errors[99] := "ASSERT fault";
errors[100] := "incompatible operands of dyadic operator";
errors[101] := "operand type inapplicable to *";
errors[102] := "operand type inapplicable to /";
errors[103] := "operand type inapplicable to DIV";
errors[104] := "operand type inapplicable to MOD";
errors[105] := "operand type inapplicable to +";
errors[106] := "operand type inapplicable to -";
errors[107] := "operand type inapplicable to = or #";
errors[108] := "operand type inapplicable to relation";
errors[109] := "overriding method must be exported";
errors[110] := "operand is not a type";
errors[111] := "operand inapplicable to (this) function";
errors[112] := "operand is not a variable";
errors[113] := "incompatible assignment";
errors[114] := "string too long to be assigned";
errors[115] := "parameter doesn't match";
errors[116] := "number of parameters doesn't match";
errors[117] := "result type doesn't match";
errors[118] := "export mark doesn't match with forward declaration";
errors[119] := "redefinition textually precedes procedure bound to base type";
errors[120] := "type of expression following IF, WHILE, UNTIL or ASSERT is not BOOLEAN";
errors[121] := "called object is not a procedure (or is an interrupt procedure)";
errors[122] := "actual VAR-parameter is not a variable";
errors[123] := "type of actual parameter is not identical with that of formal VAR-parameter";
errors[124] := "type of result expression differs from that of procedure";
errors[125] := "type of case expression is neither INTEGER nor CHAR";
errors[126] := "this expression cannot be a type or a procedure";
errors[127] := "illegal use of object";
errors[128] := "unsatisfied forward reference";
errors[129] := "unsatisfied forward procedure";
errors[130] := "WITH clause does not specify a variable";
errors[131] := "LEN not applied to array";
errors[132] := "dimension in LEN too large or negative";
errors[135] := "SYSTEM not imported";
errors[150] := "key inconsistency of imported module";
errors[151] := "incorrect symbol file";
errors[152] := "symbol file of imported module not found";
errors[153] := "object or symbol file not opened (disk full?)";
errors[154] := "recursive import not allowed";
errors[155] := "generation of new symbol file not allowed";
errors[156] := "parameter file not found";
errors[157] := "syntax error in parameter file";
(* Limitations of implementation*)
errors[200] := "not yet implemented";
errors[201] := "lower bound of set range greater than higher bound";
errors[202] := "set element greater than MAX(SET) or less than 0";
errors[203] := "number too large";
errors[204] := "product too large";
errors[205] := "division by zero";
errors[206] := "sum too large";
errors[207] := "difference too large";
errors[208] := "overflow in arithmetic shift";
errors[209] := "case range too large";
errors[213] := "too many cases in case statement";
errors[218] := "illegal value of parameter (0 <= p < 256)";
errors[219] := "machine registers cannot be accessed";
errors[220] := "illegal value of parameter";
errors[221] := "too many pointers in a record";
errors[222] := "too many global pointers";
errors[223] := "too many record types";
errors[224] := "too many pointer types";
errors[225] := "address of pointer variable too large (move forward in text)";
errors[226] := "too many exported procedures";
errors[227] := "too many imported modules";
errors[228] := "too many exported structures";
errors[229] := "too many nested records for import";
errors[230] := "too many constants (strings) in module";
errors[231] := "too many link table entries (external procedures)";
errors[232] := "too many commands in module";
errors[233] := "record extension hierarchy too high";
errors[234] := "export of recursive type not allowed";
errors[240] := "identifier too long";
errors[241] := "string too long";
errors[242] := "address overflow";
errors[244] := "cyclic type definition not allowed";
errors[245] := "guarded pointer variable may be manipulated by non-local operations; use auxiliary pointer variable";
(* Compiler Warnings *)

errors[301] := "implicit type cast";
errors[306] := "inappropriate symbol file ignored";
errors[307] := "no ELSE symbol after CASE statement sequence may lead to trap"; (* new warning,  -- noch *)

END errors.
(*
Run-time Error Messages
	SYSTEM_halt
	0 silent HALT(0)
	1..255  HALT(n), cf. SYSTEM_halt
	-1 assertion failed, cf. SYSTEM_assert
	-2 invalid array index  
	-3 function procedure without RETURN statement  
	-4 invalid case in CASE statement
	-5 type guard failed
	-6 implicit type guard in record assignment failed
	-7 invalid case in WITH statement
	-8 value out of range
	-9 (delayed) interrupt
	-10 NIL access
	-11 alignment error
	-12 zero divide
	-13 arithmetic overflow/underflow
	-14 invalid function argument
	-15 internal error
*)

