home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d0xx / d079 / m2error.lha / M2Error / geterror.mod < prev    next >
Encoding:
Modula Implementation  |  1987-06-04  |  16.6 KB  |  463 lines

  1. IMPLEMENTATION MODULE GetError;
  2.  
  3. (*
  4.         This module provides a procedure that returns the
  5.         string corresponding to a particular compiler error
  6.         number. 
  7.         
  8.         Works with V3.00 of TDI/Modula-2 compiler
  9.  
  10.         Created: 3/25/87 by Richie Bielak
  11.         
  12.         Modified:
  13.  
  14. *)
  15. FROM Strings  IMPORT Length;
  16.  
  17.  
  18. TYPE
  19.    OneErrRec   = RECORD
  20.                    numb : CARDINAL;     (* Error code *)
  21.                   text : ARRAY [0..80] OF CHAR;
  22.                  END;
  23.  
  24. CONST
  25.   MaxErrIndex = 188;
  26.  
  27. VAR
  28.   err : ARRAY [0..MaxErrIndex] OF OneErrRec; (* Error table *)
  29.  
  30. (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
  31. PROCEDURE SearchTable (num : CARDINAL; low, high : INTEGER) : INTEGER;
  32.   VAR
  33.     middle : INTEGER;
  34.   BEGIN
  35.     WHILE low <= high DO
  36.       (* Try the middle *)
  37.       middle := (low + high) DIV 2;
  38.       IF err[middle].numb = num THEN
  39.         RETURN middle
  40.       ELSIF err[middle].numb > num THEN
  41.         high := middle - 1;
  42.       ELSIF  err[middle].numb < num THEN
  43.         low := middle + 1
  44.       END;
  45.     END;
  46.     RETURN -1
  47.   END SearchTable;
  48.  
  49.  
  50. (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
  51. (* Since the errors are stored in the table in numerical *)
  52. (* order, use binary search to find the string.          *)
  53. PROCEDURE GetErrString (num : CARDINAL;
  54.                         VAR string : ARRAY OF CHAR);
  55.    
  56.  
  57.    VAR i, indx : INTEGER;
  58.    BEGIN
  59.      indx := SearchTable (num, 0, MaxErrIndex);
  60.      IF indx <> -1 THEN
  61.        WITH err[indx] DO
  62.          FOR i := 0 TO Length (text) DO
  63.            string [i] := text[i];
  64.         END;
  65.        END;
  66.      ELSE (* Not found *)
  67.        string[0] := 0C;
  68.      END
  69.    END GetErrString;
  70.  
  71. BEGIN
  72.   err[0].numb := 0;
  73.   err[0].text := "0: illegal character in source file";
  74.   err[1].numb := 2;
  75.   err[1].text := "2: constant out of range";
  76.   err[2].numb := 3;
  77.   err[2].text := "3: open comment at end of file";
  78.   err[3].numb := 4;
  79.   err[3].text := "4: string terminator not on this line";
  80.   err[4].numb := 5;
  81.   err[4].text := "5: too many errors";
  82.   err[5].numb := 6;
  83.   err[5].text := "6: string too long";
  84.   err[6].numb := 7;
  85.   err[6].text := "7: too many identifiers (identifier table full)";
  86.   err[7].numb := 8;
  87.   err[7].text := "8: too many identifiers (hash table full)";
  88.   err[8].numb := 10;
  89.   err[8].text := "10: illegal character in octal constant";
  90.   err[9].numb := 11;
  91.   err[9].text := "11: illegal character in decimal constant";
  92.   err[10].numb := 12;
  93.   err[10].text := "12: illegal character in hexadecimal constant";
  94.   err[11].numb := 13;
  95.   err[11].text := "13: illegal character in character constant";
  96.   err[12].numb := 14;
  97.   err[12].text := "14: number too large";
  98.   err[13].numb := 15;
  99.   err[13].text := "15: value out of CHAR range (must be <400C)";
  100.   err[14].numb := 16;
  101.   err[14].text := "16: real number too large or precision too great";
  102.   err[15].numb := 20;
  103.   err[15].text := "20: identifier expected";
  104.   err[16].numb := 21;
  105.   err[16].text := "21: integer constant expected";
  106.   err[17].numb := 22;
  107.   err[17].text := "22: ']' expected";
  108.   err[18].numb := 23;
  109.   err[18].text := "23: ';'expected";
  110.   err[19].numb := 24;
  111.   err[19].text := "24: block name at the END does not match";
  112.   err[20].numb := 25;
  113.   err[20].text := "25: error in block";
  114.   err[21].numb := 26;
  115.   err[21].text := "26: ':=' expected";
  116.   err[22].numb := 27;
  117.   err[22].text := "27: error in expression";
  118.   err[23].numb := 28;
  119.   err[23].text := "28: THEN expected";
  120.   err[24].numb := 29;
  121.   err[24].text := "29: error in LOOP statement";
  122.   err[25].numb := 30;
  123.   err[25].text := "30: constant must not be CARDINAL";
  124.   err[26].numb := 31;
  125.   err[26].text := "31: error in REPEAT statement";
  126.   err[27].numb := 32;
  127.   err[27].text := "32: UNTIL expected";
  128.   err[28].numb := 33;
  129.   err[28].text := "33: error in WHILE statement";
  130.   err[29].numb := 34;
  131.   err[29].text := "34: DO expected";
  132.   err[30].numb := 35;
  133.   err[30].text := "35: error in CASE statement";
  134.   err[31].numb := 36;
  135.   err[31].text := "36: OF expected";
  136.   err[32].numb := 37;
  137.   err[32].text := "37: ':' expected";
  138.   err[33].numb := 38;
  139.   err[33].text := "38: BEGIN expected";
  140.   err[34].numb := 39;
  141.   err[34].text := "39: error in WITH statement";
  142.   err[35].numb := 40;
  143.   err[35].text := "40: END expected";
  144.   err[36].numb := 41;
  145.   err[36].text := "41: ')'expected";
  146.   err[37].numb := 42;
  147.   err[37].text := "42: error in constant";
  148.   err[38].numb := 43;
  149.   err[38].text := "43: '=' expected";
  150.   err[39].numb := 44;
  151.   err[39].text := "44: error in TYPE declaration";
  152.   err[40].numb := 45;
  153.   err[40].text := "45: '(' expected";
  154.   err[41].numb := 46;
  155.   err[41].text := "46: MODULE expected";
  156.   err[42].numb := 47;
  157.   err[42].text := "47: QUALIFIED expected";
  158.   err[43].numb := 48;
  159.   err[43].text := "48: error in factor";
  160.   err[44].numb := 49;
  161.   err[44].text := "49: error in simple type";
  162.   err[45].numb := 50;
  163.   err[45].text := "50: ',' expected";
  164.   err[46].numb := 51;
  165.   err[46].text := "51: error in formal type";
  166.   err[47].numb := 52;
  167.   err[47].text := "52: error in statement sequence";
  168.   err[48].numb := 53;
  169.   err[48].text := "53: '.' expected";
  170.   err[49].numb := 54;
  171.   err[49].text := "54: export at global level not allowed";
  172.   err[50].numb := 55;
  173.   err[50].text := "55: body in definition module not allowed";
  174.   err[51].numb := 56;
  175.   err[51].text := "56: TO expected";
  176.   err[52].numb := 57;
  177.   err[52].text := "57: nested module in definition module not allowed";
  178.   err[53].numb := 58;
  179.   err[53].text := "58: '}' expected";
  180.   err[54].numb := 59;
  181.   err[54].text := "59: '..' expected";
  182.   err[55].numb := 60;
  183.   err[55].text := "60: error in FOR statement";
  184.   err[56].numb := 61;
  185.   err[56].text := "61: IMPORT expected";
  186.   err[57].numb := 70;
  187.   err[57].text := "70: identifier supplied twice in importlist";
  188.   err[58].numb := 71;
  189.   err[58].text := "71: identifier not exported from qualifying module";
  190.   err[59].numb := 72;
  191.   err[59].text := "72: identifier declared twice";
  192.   err[60].numb := 73;
  193.   err[60].text := "73: identifier not declared";
  194.   err[61].numb := 74;
  195.   err[61].text := "74: type not declared";
  196.   err[62].numb := 75;
  197.   err[62].text := "75: identifier already declared in module environment";
  198.   err[63].numb := 76;
  199.   err[63].text := "76: dynamic array must not be value parameter";
  200.   err[64].numb := 77;
  201.   err[64].text := "77: too many nesting levels";
  202.   err[65].numb := 78;
  203.   err[65].text := "78: value of absolute address must be of type CARDINAL";
  204.   err[66].numb := 79;
  205.   err[66].text := "79: scope table overflow in compiler";
  206.   err[67].numb := 80;
  207.   err[67].text := "80: illegal priority";
  208.   err[68].numb := 81;
  209.   err[68].text := 
  210.     "81: definition module belonging to implementation not found";
  211.   err[69].numb := 82;
  212.   err[69].text :=
  213.     "82: structure not allowed for implementation of hidden type";
  214.   err[70].numb := 83;
  215.   err[70].text := "83: procedure implementation different from definition";
  216.   err[71].numb := 84;
  217.   err[71].text :=
  218.     "84: not all defined procedures or hidden types implemented";
  219.   err[72].numb := 85;
  220.   err[72].text := 
  221.   "85: name conflict of exported object/enumeration constant in environment";
  222.   err[73].numb := 86;
  223.   err[73].text := "86: incompatible versions of symbolic modules";
  224.   err[74].numb := 88;
  225.   err[74].text := "88: function type is not scalar or basic type";
  226.   err[75].numb := 90;
  227.   err[75].text := "90: pointer-referenced type not declared";
  228.   err[76].numb := 91;
  229.   err[76].text := "91: tagfield type expected";
  230.   err[77].numb := 92;
  231.   err[77].text := "92: incompatible type of variant constant";
  232.   err[78].numb := 93;
  233.   err[78].text := "93: constant used twice";
  234.   err[79].numb := 94;
  235.   err[79].text := 
  236.     "94: arithmetic error in evaluation  of constant expression";
  237.   err[80].numb := 95;
  238.   err[80].text := "95: incorrect range";
  239.   err[81].numb := 96;
  240.   err[81].text := "96: range only with scalar types";
  241.   err[82].numb := 97;
  242.   err[82].text := "97: type-incompatible constructor element";
  243.   err[83].numb := 98;
  244.   err[83].text := "98: elemant value out of bounds";
  245.   err[84].numb := 99;
  246.   err[84].text := "99: set-type identifier expected";
  247.   err[85].numb := 100;
  248.   err[85].text := "100: declaration needs too much space";
  249.   err[86].numb := 101;
  250.   err[86].text := "101: undeclared identifier in export list of module";
  251.   err[87].numb := 102;
  252.   err[87].text := "102: range not belonging to basic type";
  253.   err[88].numb := 103;
  254.   err[88].text := "103: wrong class of identifier";
  255.   err[89].numb := 104;
  256.   err[89].text := "104: no such module name found";
  257.   err[90].numb := 105;
  258.   err[90].text := "105: module name expected";
  259.   err[91].numb := 106;
  260.   err[91].text := "106: scalar type expected";
  261.   err[92].numb := 107;
  262.   err[92].text := "107: set too large";
  263.   err[93].numb := 108;
  264.   err[93].text := "108: type must not be INTEGER or CARDINAL or ADDRESS";
  265.   err[94].numb := 109;
  266.   err[94].text := "109: scalar or subrange type expected";
  267.   err[95].numb := 110;
  268.   err[95].text := "110: variant value out of bounds";
  269.   err[96].numb := 111;
  270.   err[96].text := "111: illegal export from program module";
  271.   err[97].numb := 112;
  272.   err[97].text := "112: code block for modules not allowed";
  273.   err[98].numb := 120;
  274.   err[98].text := "120: incompatible types in conversion";
  275.   err[99].numb := 121;
  276.   err[99].text := "121: this type is not expected";
  277.   err[100].numb := 122;
  278.   err[100].text := "122: variable expected";
  279.   err[101].numb := 123;
  280.   err[101].text := "123: incorrect constant";
  281.   err[102].numb := 124;
  282.   err[102].text := "124: no procedure found for substitution";
  283.   err[103].numb := 125;
  284.   err[103].text := "125: unsatisfying parameters of substituted procedure";
  285.   err[104].numb := 126;
  286.   err[104].text := "126: set constant out of range";
  287.   err[105].numb := 127;
  288.   err[105].text := "127: error in standard procedure parameters";
  289.   err[106].numb := 128;
  290.   err[106].text := "128: type incompatibility";
  291.   err[107].numb := 129;
  292.   err[107].text := "129: type identifier expected";
  293.   err[108].numb := 130;
  294.   err[108].text := "130: type impossible to index";
  295.   err[109].numb := 131;
  296.   err[109].text := "131: field not belonging to a record variable";
  297.   err[110].numb := 132;
  298.   err[110].text := "132: too many parameters";
  299.   err[111].numb := 134;
  300.   err[111].text := "134: reference not to a variable";
  301.   err[112].numb := 135;
  302.   err[112].text := "135: illegal parameter substitution";
  303.   err[113].numb := 136;
  304.   err[113].text := "136: constant expected";
  305.   err[114].numb := 137;
  306.   err[114].text := "137: expected parameters";
  307.   err[115].numb := 138;
  308.   err[115].text := "138: BOOLEAN type expected";
  309.   err[116].numb := 139;
  310.   err[116].text := "139: scalar types expected";
  311.   err[117].numb := 140;
  312.   err[117].text := "140: operation with incompatible type";
  313.   err[118].numb := 141;
  314.   err[118].text := 
  315.     "141: only global procedure or function allowed in expression";
  316.   err[119].numb := 142;
  317.   err[119].text := "142: incompatible element type";
  318.   err[120].numb := 143;
  319.   err[120].text := "143: type incompatible operands";
  320.   err[121].numb := 144;
  321.   err[121].text := "144: no selectors allowed for procedures";
  322.   err[122].numb := 145;
  323.   err[122].text := "145: only function call allowed in expression";
  324.   err[123].numb := 146;
  325.   err[123].text := "146: arrow not belonging to a pointer variable";
  326.   err[124].numb := 147;
  327.   err[124].text := 
  328.     "147: standard function or procedure must not be assigned";
  329.   err[125].numb := 148;
  330.   err[125].text := "148: constant not allowed as a variant";
  331.   err[126].numb := 149;
  332.   err[126].text := "149: SET type expected";
  333.   err[127].numb := 150;
  334.   err[127].text := "150: illegal substitution to word parameter";
  335.   err[128].numb := 151;
  336.   err[128].text := "151: EXIT only in LOOP";
  337.   err[129].numb := 152;
  338.   err[129].text := "152: RETURN only in PROCEDURE";
  339.   err[130].numb := 153;
  340.   err[130].text := "153: expression expected";
  341.   err[131].numb := 154;
  342.   err[131].text := "154: expression not allowed";
  343.   err[132].numb := 155;
  344.   err[132].text := "155: type of function expected";
  345.   err[133].numb := 156;
  346.   err[133].text := "156: integer constant expected";
  347.   err[134].numb := 157;
  348.   err[134].text := "157: procedure call expected";
  349.   err[135].numb := 158;
  350.   err[135].text := "158: identifer not exported from qualifying module";
  351.   err[136].numb := 159;
  352.   err[136].text := "159: code buffer overflow";
  353.   err[137].numb := 160;
  354.   err[137].text := "160: illegal value for code";
  355.   err[138].numb := 161;
  356.   err[138].text := "161: call of procedure with lower priority not allowed";
  357.   err[139].numb := 198;
  358.   err[139].text := "198: CARDINAL constant expected";
  359.   err[140].numb := 199;
  360.   err[140].text := "199: BITSET type expected";
  361.   err[141].numb := 200;
  362.   err[141].text := 
  363.     "200: size of structured type too large for this processor";
  364.   err[142].numb := 201;
  365.   err[142].text := "201: array index too large for this element type";
  366.   err[143].numb := 202;
  367.   err[143].text := "202: array element size too large for this processor";
  368.   err[144].numb := 203;
  369.   err[144].text := "203: array index type too large for this processor";
  370.   err[145].numb := 204;
  371.   err[145].text := "204: subrange too large for this processor";
  372.   err[146].numb := 206;
  373.   err[146].text := "206: illegal subrange type";
  374.   err[147].numb := 207;
  375.   err[147].text := "207: case label range too large";
  376.   err[148].numb := 208;
  377.   err[148].text := "208: global data too large for this processor";
  378.   err[149].numb := 209;
  379.   err[149].text := "209: local data too large for this processor";
  380.   err[150].numb := 210;
  381.   err[150].text := "210: parameter data too large for this processor";
  382.   err[151].numb := 211;
  383.   err[151].text := 
  384.     "211: offset of record field too large for this processor";
  385.   err[152].numb := 300;
  386.   err[152].text := "300: index out of range";
  387.   err[153].numb := 301;
  388.   err[153].text := "301: division by zero";
  389.   err[154].numb := 303;
  390.   err[154].text := "303: CASE label defined twice";
  391.   err[155].numb := 304;
  392.   err[155].text := "304: this constant is not allowed as case label";
  393.   err[156].numb := 400;
  394.   err[156].text := "400: expression too complicated (register overflow)";
  395.   err[157].numb := 401;
  396.   err[157].text := "401: expression too complicated (codetable overflow)";
  397.   err[158].numb := 402;
  398.   err[158].text := "402: expression too complicated (branch too long)";
  399.   err[159].numb := 403;
  400.   err[159].text := "403: expression too complicated (jumptable overflow)";
  401.   err[160].numb := 404;
  402.   err[160].text := "404: too many globals, externals and calls";
  403.   err[161].numb := 405;
  404.   err[161].text := "405: procedure or module body too long (codetable)";
  405.   err[162].numb := 406;
  406.   err[162].text := "406: expression too complicated (level overflow)";
  407.   err[163].numb := 923;
  408.   err[163].text := "923: standard procedure or function not implemented ";
  409.   err[164].numb := 924;
  410.   err[164].text := "924: parameter must not be accessed by a WITH";
  411.   err[165].numb := 941;
  412.   err[165].text := "941: displacement overflow in index addressing mode";
  413.   err[166].numb := 942;
  414.   err[166].text :=
  415.     "942: 32 bit by 32 bit multiply/divide not yet implemented";
  416.   err[167].numb := 943;
  417.   err[167].text := "943: index range must not exceed positive integer range";
  418.   err[168].numb := 944;
  419.   err[168].text := "944: jump too long (overflow in pc-relative offset)";
  420.   err[169].numb := 945;
  421.   err[169].text := "945: offset too long (overflow in pc-relative offset)";
  422.   err[170].numb := 946;
  423.   err[170].text := "946: FOR control variable is not of simple addressing mode";
  424.   err[171].numb := 950;
  425.   err[171].text := "950: can only pass variables and constants to large set value parameters";
  426.   err[172].numb := 951;
  427.   err[172].text := "951: implementation of INLINE procedure not allowed";
  428.   err[173].numb := 952;
  429.   err[173].text := "952: too many INLINE opcodes (max. 4)";
  430.   err[174].numb := 953;
  431.   err[174].text := "953: INLINE function or procedure must not be assigned";
  432.   err[175].numb := 973;
  433.   err[175].text := "973: DOWNTO only implemented for step -1";
  434.   err[176].numb := 974;
  435.   err[176].text := "974: step 0 in FOR statement";
  436.   err[177].numb := 981;
  437.   err[177].text := "981: constant out of legal range";
  438.   err[178].numb := 982;
  439.   err[178].text := "982: overflow/underflow in range/offset/address calculation";
  440.   err[179].numb := 990;
  441.   err[179].text := "990: too many WITH nested";
  442.   err[180].numb := 991;
  443.   err[180].text := "991: CARDINAL divisor too large (> 8000H)";
  444.   err[181].numb := 992;
  445.   err[181].text := 
  446.   "992: FOR control variable must not have byte size (for step <> -1 or 1)";
  447.   err[182].numb := 993;
  448.   err[182].text := 
  449.   "993: INC, DEC not implemented with 2 argument for byte variable";
  450.   err[183].numb := 994;
  451.   err[183].text := "994: too many nested procedures";
  452.   err[184].numb := 995;
  453.   err[184].text := "995: FOR step too large (> 7FFFH)";
  454.   err[185].numb := 996;
  455.   err[185].text := "996: CASE label too large (> 7FFFH)";
  456.   err[186].numb := 997;
  457.   err[186].text := "997: type transfer function not implemented";
  458.   err[187].numb := 998;
  459.   err[187].text := "998: FOR limit too large";
  460.   err[188].numb := 999;
  461.   err[188].text := "999: missing symbol file(s)";
  462. END GetError.
  463.