home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1987-06-04 | 16.6 KB | 463 lines |
- IMPLEMENTATION MODULE GetError;
-
- (*
- This module provides a procedure that returns the
- string corresponding to a particular compiler error
- number.
-
- Works with V3.00 of TDI/Modula-2 compiler
-
- Created: 3/25/87 by Richie Bielak
-
- Modified:
-
- *)
- FROM Strings IMPORT Length;
-
-
- TYPE
- OneErrRec = RECORD
- numb : CARDINAL; (* Error code *)
- text : ARRAY [0..80] OF CHAR;
- END;
-
- CONST
- MaxErrIndex = 188;
-
- VAR
- err : ARRAY [0..MaxErrIndex] OF OneErrRec; (* Error table *)
-
- (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- PROCEDURE SearchTable (num : CARDINAL; low, high : INTEGER) : INTEGER;
- VAR
- middle : INTEGER;
- BEGIN
- WHILE low <= high DO
- (* Try the middle *)
- middle := (low + high) DIV 2;
- IF err[middle].numb = num THEN
- RETURN middle
- ELSIF err[middle].numb > num THEN
- high := middle - 1;
- ELSIF err[middle].numb < num THEN
- low := middle + 1
- END;
- END;
- RETURN -1
- END SearchTable;
-
-
- (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- (* Since the errors are stored in the table in numerical *)
- (* order, use binary search to find the string. *)
- PROCEDURE GetErrString (num : CARDINAL;
- VAR string : ARRAY OF CHAR);
-
-
- VAR i, indx : INTEGER;
- BEGIN
- indx := SearchTable (num, 0, MaxErrIndex);
- IF indx <> -1 THEN
- WITH err[indx] DO
- FOR i := 0 TO Length (text) DO
- string [i] := text[i];
- END;
- END;
- ELSE (* Not found *)
- string[0] := 0C;
- END
- END GetErrString;
-
- BEGIN
- err[0].numb := 0;
- err[0].text := "0: illegal character in source file";
- err[1].numb := 2;
- err[1].text := "2: constant out of range";
- err[2].numb := 3;
- err[2].text := "3: open comment at end of file";
- err[3].numb := 4;
- err[3].text := "4: string terminator not on this line";
- err[4].numb := 5;
- err[4].text := "5: too many errors";
- err[5].numb := 6;
- err[5].text := "6: string too long";
- err[6].numb := 7;
- err[6].text := "7: too many identifiers (identifier table full)";
- err[7].numb := 8;
- err[7].text := "8: too many identifiers (hash table full)";
- err[8].numb := 10;
- err[8].text := "10: illegal character in octal constant";
- err[9].numb := 11;
- err[9].text := "11: illegal character in decimal constant";
- err[10].numb := 12;
- err[10].text := "12: illegal character in hexadecimal constant";
- err[11].numb := 13;
- err[11].text := "13: illegal character in character constant";
- err[12].numb := 14;
- err[12].text := "14: number too large";
- err[13].numb := 15;
- err[13].text := "15: value out of CHAR range (must be <400C)";
- err[14].numb := 16;
- err[14].text := "16: real number too large or precision too great";
- err[15].numb := 20;
- err[15].text := "20: identifier expected";
- err[16].numb := 21;
- err[16].text := "21: integer constant expected";
- err[17].numb := 22;
- err[17].text := "22: ']' expected";
- err[18].numb := 23;
- err[18].text := "23: ';'expected";
- err[19].numb := 24;
- err[19].text := "24: block name at the END does not match";
- err[20].numb := 25;
- err[20].text := "25: error in block";
- err[21].numb := 26;
- err[21].text := "26: ':=' expected";
- err[22].numb := 27;
- err[22].text := "27: error in expression";
- err[23].numb := 28;
- err[23].text := "28: THEN expected";
- err[24].numb := 29;
- err[24].text := "29: error in LOOP statement";
- err[25].numb := 30;
- err[25].text := "30: constant must not be CARDINAL";
- err[26].numb := 31;
- err[26].text := "31: error in REPEAT statement";
- err[27].numb := 32;
- err[27].text := "32: UNTIL expected";
- err[28].numb := 33;
- err[28].text := "33: error in WHILE statement";
- err[29].numb := 34;
- err[29].text := "34: DO expected";
- err[30].numb := 35;
- err[30].text := "35: error in CASE statement";
- err[31].numb := 36;
- err[31].text := "36: OF expected";
- err[32].numb := 37;
- err[32].text := "37: ':' expected";
- err[33].numb := 38;
- err[33].text := "38: BEGIN expected";
- err[34].numb := 39;
- err[34].text := "39: error in WITH statement";
- err[35].numb := 40;
- err[35].text := "40: END expected";
- err[36].numb := 41;
- err[36].text := "41: ')'expected";
- err[37].numb := 42;
- err[37].text := "42: error in constant";
- err[38].numb := 43;
- err[38].text := "43: '=' expected";
- err[39].numb := 44;
- err[39].text := "44: error in TYPE declaration";
- err[40].numb := 45;
- err[40].text := "45: '(' expected";
- err[41].numb := 46;
- err[41].text := "46: MODULE expected";
- err[42].numb := 47;
- err[42].text := "47: QUALIFIED expected";
- err[43].numb := 48;
- err[43].text := "48: error in factor";
- err[44].numb := 49;
- err[44].text := "49: error in simple type";
- err[45].numb := 50;
- err[45].text := "50: ',' expected";
- err[46].numb := 51;
- err[46].text := "51: error in formal type";
- err[47].numb := 52;
- err[47].text := "52: error in statement sequence";
- err[48].numb := 53;
- err[48].text := "53: '.' expected";
- err[49].numb := 54;
- err[49].text := "54: export at global level not allowed";
- err[50].numb := 55;
- err[50].text := "55: body in definition module not allowed";
- err[51].numb := 56;
- err[51].text := "56: TO expected";
- err[52].numb := 57;
- err[52].text := "57: nested module in definition module not allowed";
- err[53].numb := 58;
- err[53].text := "58: '}' expected";
- err[54].numb := 59;
- err[54].text := "59: '..' expected";
- err[55].numb := 60;
- err[55].text := "60: error in FOR statement";
- err[56].numb := 61;
- err[56].text := "61: IMPORT expected";
- err[57].numb := 70;
- err[57].text := "70: identifier supplied twice in importlist";
- err[58].numb := 71;
- err[58].text := "71: identifier not exported from qualifying module";
- err[59].numb := 72;
- err[59].text := "72: identifier declared twice";
- err[60].numb := 73;
- err[60].text := "73: identifier not declared";
- err[61].numb := 74;
- err[61].text := "74: type not declared";
- err[62].numb := 75;
- err[62].text := "75: identifier already declared in module environment";
- err[63].numb := 76;
- err[63].text := "76: dynamic array must not be value parameter";
- err[64].numb := 77;
- err[64].text := "77: too many nesting levels";
- err[65].numb := 78;
- err[65].text := "78: value of absolute address must be of type CARDINAL";
- err[66].numb := 79;
- err[66].text := "79: scope table overflow in compiler";
- err[67].numb := 80;
- err[67].text := "80: illegal priority";
- err[68].numb := 81;
- err[68].text :=
- "81: definition module belonging to implementation not found";
- err[69].numb := 82;
- err[69].text :=
- "82: structure not allowed for implementation of hidden type";
- err[70].numb := 83;
- err[70].text := "83: procedure implementation different from definition";
- err[71].numb := 84;
- err[71].text :=
- "84: not all defined procedures or hidden types implemented";
- err[72].numb := 85;
- err[72].text :=
- "85: name conflict of exported object/enumeration constant in environment";
- err[73].numb := 86;
- err[73].text := "86: incompatible versions of symbolic modules";
- err[74].numb := 88;
- err[74].text := "88: function type is not scalar or basic type";
- err[75].numb := 90;
- err[75].text := "90: pointer-referenced type not declared";
- err[76].numb := 91;
- err[76].text := "91: tagfield type expected";
- err[77].numb := 92;
- err[77].text := "92: incompatible type of variant constant";
- err[78].numb := 93;
- err[78].text := "93: constant used twice";
- err[79].numb := 94;
- err[79].text :=
- "94: arithmetic error in evaluation of constant expression";
- err[80].numb := 95;
- err[80].text := "95: incorrect range";
- err[81].numb := 96;
- err[81].text := "96: range only with scalar types";
- err[82].numb := 97;
- err[82].text := "97: type-incompatible constructor element";
- err[83].numb := 98;
- err[83].text := "98: elemant value out of bounds";
- err[84].numb := 99;
- err[84].text := "99: set-type identifier expected";
- err[85].numb := 100;
- err[85].text := "100: declaration needs too much space";
- err[86].numb := 101;
- err[86].text := "101: undeclared identifier in export list of module";
- err[87].numb := 102;
- err[87].text := "102: range not belonging to basic type";
- err[88].numb := 103;
- err[88].text := "103: wrong class of identifier";
- err[89].numb := 104;
- err[89].text := "104: no such module name found";
- err[90].numb := 105;
- err[90].text := "105: module name expected";
- err[91].numb := 106;
- err[91].text := "106: scalar type expected";
- err[92].numb := 107;
- err[92].text := "107: set too large";
- err[93].numb := 108;
- err[93].text := "108: type must not be INTEGER or CARDINAL or ADDRESS";
- err[94].numb := 109;
- err[94].text := "109: scalar or subrange type expected";
- err[95].numb := 110;
- err[95].text := "110: variant value out of bounds";
- err[96].numb := 111;
- err[96].text := "111: illegal export from program module";
- err[97].numb := 112;
- err[97].text := "112: code block for modules not allowed";
- err[98].numb := 120;
- err[98].text := "120: incompatible types in conversion";
- err[99].numb := 121;
- err[99].text := "121: this type is not expected";
- err[100].numb := 122;
- err[100].text := "122: variable expected";
- err[101].numb := 123;
- err[101].text := "123: incorrect constant";
- err[102].numb := 124;
- err[102].text := "124: no procedure found for substitution";
- err[103].numb := 125;
- err[103].text := "125: unsatisfying parameters of substituted procedure";
- err[104].numb := 126;
- err[104].text := "126: set constant out of range";
- err[105].numb := 127;
- err[105].text := "127: error in standard procedure parameters";
- err[106].numb := 128;
- err[106].text := "128: type incompatibility";
- err[107].numb := 129;
- err[107].text := "129: type identifier expected";
- err[108].numb := 130;
- err[108].text := "130: type impossible to index";
- err[109].numb := 131;
- err[109].text := "131: field not belonging to a record variable";
- err[110].numb := 132;
- err[110].text := "132: too many parameters";
- err[111].numb := 134;
- err[111].text := "134: reference not to a variable";
- err[112].numb := 135;
- err[112].text := "135: illegal parameter substitution";
- err[113].numb := 136;
- err[113].text := "136: constant expected";
- err[114].numb := 137;
- err[114].text := "137: expected parameters";
- err[115].numb := 138;
- err[115].text := "138: BOOLEAN type expected";
- err[116].numb := 139;
- err[116].text := "139: scalar types expected";
- err[117].numb := 140;
- err[117].text := "140: operation with incompatible type";
- err[118].numb := 141;
- err[118].text :=
- "141: only global procedure or function allowed in expression";
- err[119].numb := 142;
- err[119].text := "142: incompatible element type";
- err[120].numb := 143;
- err[120].text := "143: type incompatible operands";
- err[121].numb := 144;
- err[121].text := "144: no selectors allowed for procedures";
- err[122].numb := 145;
- err[122].text := "145: only function call allowed in expression";
- err[123].numb := 146;
- err[123].text := "146: arrow not belonging to a pointer variable";
- err[124].numb := 147;
- err[124].text :=
- "147: standard function or procedure must not be assigned";
- err[125].numb := 148;
- err[125].text := "148: constant not allowed as a variant";
- err[126].numb := 149;
- err[126].text := "149: SET type expected";
- err[127].numb := 150;
- err[127].text := "150: illegal substitution to word parameter";
- err[128].numb := 151;
- err[128].text := "151: EXIT only in LOOP";
- err[129].numb := 152;
- err[129].text := "152: RETURN only in PROCEDURE";
- err[130].numb := 153;
- err[130].text := "153: expression expected";
- err[131].numb := 154;
- err[131].text := "154: expression not allowed";
- err[132].numb := 155;
- err[132].text := "155: type of function expected";
- err[133].numb := 156;
- err[133].text := "156: integer constant expected";
- err[134].numb := 157;
- err[134].text := "157: procedure call expected";
- err[135].numb := 158;
- err[135].text := "158: identifer not exported from qualifying module";
- err[136].numb := 159;
- err[136].text := "159: code buffer overflow";
- err[137].numb := 160;
- err[137].text := "160: illegal value for code";
- err[138].numb := 161;
- err[138].text := "161: call of procedure with lower priority not allowed";
- err[139].numb := 198;
- err[139].text := "198: CARDINAL constant expected";
- err[140].numb := 199;
- err[140].text := "199: BITSET type expected";
- err[141].numb := 200;
- err[141].text :=
- "200: size of structured type too large for this processor";
- err[142].numb := 201;
- err[142].text := "201: array index too large for this element type";
- err[143].numb := 202;
- err[143].text := "202: array element size too large for this processor";
- err[144].numb := 203;
- err[144].text := "203: array index type too large for this processor";
- err[145].numb := 204;
- err[145].text := "204: subrange too large for this processor";
- err[146].numb := 206;
- err[146].text := "206: illegal subrange type";
- err[147].numb := 207;
- err[147].text := "207: case label range too large";
- err[148].numb := 208;
- err[148].text := "208: global data too large for this processor";
- err[149].numb := 209;
- err[149].text := "209: local data too large for this processor";
- err[150].numb := 210;
- err[150].text := "210: parameter data too large for this processor";
- err[151].numb := 211;
- err[151].text :=
- "211: offset of record field too large for this processor";
- err[152].numb := 300;
- err[152].text := "300: index out of range";
- err[153].numb := 301;
- err[153].text := "301: division by zero";
- err[154].numb := 303;
- err[154].text := "303: CASE label defined twice";
- err[155].numb := 304;
- err[155].text := "304: this constant is not allowed as case label";
- err[156].numb := 400;
- err[156].text := "400: expression too complicated (register overflow)";
- err[157].numb := 401;
- err[157].text := "401: expression too complicated (codetable overflow)";
- err[158].numb := 402;
- err[158].text := "402: expression too complicated (branch too long)";
- err[159].numb := 403;
- err[159].text := "403: expression too complicated (jumptable overflow)";
- err[160].numb := 404;
- err[160].text := "404: too many globals, externals and calls";
- err[161].numb := 405;
- err[161].text := "405: procedure or module body too long (codetable)";
- err[162].numb := 406;
- err[162].text := "406: expression too complicated (level overflow)";
- err[163].numb := 923;
- err[163].text := "923: standard procedure or function not implemented ";
- err[164].numb := 924;
- err[164].text := "924: parameter must not be accessed by a WITH";
- err[165].numb := 941;
- err[165].text := "941: displacement overflow in index addressing mode";
- err[166].numb := 942;
- err[166].text :=
- "942: 32 bit by 32 bit multiply/divide not yet implemented";
- err[167].numb := 943;
- err[167].text := "943: index range must not exceed positive integer range";
- err[168].numb := 944;
- err[168].text := "944: jump too long (overflow in pc-relative offset)";
- err[169].numb := 945;
- err[169].text := "945: offset too long (overflow in pc-relative offset)";
- err[170].numb := 946;
- err[170].text := "946: FOR control variable is not of simple addressing mode";
- err[171].numb := 950;
- err[171].text := "950: can only pass variables and constants to large set value parameters";
- err[172].numb := 951;
- err[172].text := "951: implementation of INLINE procedure not allowed";
- err[173].numb := 952;
- err[173].text := "952: too many INLINE opcodes (max. 4)";
- err[174].numb := 953;
- err[174].text := "953: INLINE function or procedure must not be assigned";
- err[175].numb := 973;
- err[175].text := "973: DOWNTO only implemented for step -1";
- err[176].numb := 974;
- err[176].text := "974: step 0 in FOR statement";
- err[177].numb := 981;
- err[177].text := "981: constant out of legal range";
- err[178].numb := 982;
- err[178].text := "982: overflow/underflow in range/offset/address calculation";
- err[179].numb := 990;
- err[179].text := "990: too many WITH nested";
- err[180].numb := 991;
- err[180].text := "991: CARDINAL divisor too large (> 8000H)";
- err[181].numb := 992;
- err[181].text :=
- "992: FOR control variable must not have byte size (for step <> -1 or 1)";
- err[182].numb := 993;
- err[182].text :=
- "993: INC, DEC not implemented with 2 argument for byte variable";
- err[183].numb := 994;
- err[183].text := "994: too many nested procedures";
- err[184].numb := 995;
- err[184].text := "995: FOR step too large (> 7FFFH)";
- err[185].numb := 996;
- err[185].text := "996: CASE label too large (> 7FFFH)";
- err[186].numb := 997;
- err[186].text := "997: type transfer function not implemented";
- err[187].numb := 998;
- err[187].text := "998: FOR limit too large";
- err[188].numb := 999;
- err[188].text := "999: missing symbol file(s)";
- END GetError.
-