/* Loglan82 Compiler&Interpreter Copyright (C) 1981-1993 Institute of Informatics, University of Warsaw Copyright (C) 1993, 1994 LITA, Pau This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ======================================================================= */ #include #if WSIZE==4 typedef long word; #elif WSIZE==2 typedef short word; #else Define WSIZE to 2 or 4 ! #endif extern FILE *file_arr[]; #ifndef NO_PROTOTYPES static char *find_msg( int ); #else static char *find_msg(); #endif void listing_error_line__( lun, line, nr, errno, nameid ) word *lun,*line,*nr,*errno; char *nameid; { FILE *f=stdout; if( *lun != 0L ) f=file_arr[*lun]; fprintf(f,"*** %6d ERROR %6d %s %8.8s\n",(int)(*line),(int)(*nr),find_msg((int)(*errno)),nameid); } static char declaration_part_overloaded[]={"***DECLARATION PART OVERLOADED"}; static char class_identifier_expected[]={"CLASS IDENTIFIER EXPECTED"}; static char null_program[]={"NULL PROGRAM"}; static char too_many_prototypes[]={"***TOO MANY PROTOTYPES"}; static char undeclared_identifier[]={"UNDECLARED IDENTIFIER"}; static char diff_lengths[]={"DIFFERENT LENGTHS OF THE 2ND PARAMETERS LISTS"}; static char incompat_kinds[]={"INCOMPATIBLE KINDS OF THE 2ND LEVEL PARAMETERS"}; static struct { int errno; char *errmsg; } err_tab[]={ { 0,declaration_part_overloaded }, { 10,"***TOO MANY ERRORS" }, { 41,declaration_part_overloaded }, { 101,"\":=\" EXPECTED" }, { 102,"\";\" EXPECTED" }, { 103,"\"THEN\" EXPECTED" }, { 104,"\"FI\"/\"ELSE\" EXPECTED" }, { 105,"\"OD\" EXPECTED" }, { 106,"\"(\" EXPECTED" }, { 107,"\")\" EXPECTED" }, { 108,"\"DO\" EXPECTED" }, { 109,"IDENTIFIER EXPECTED" }, { 110,"TOO MANY EXITS" }, { 111,"ILLEGAL CHARACTER" }, { 112,"WRONG STRUCTURE OF \"IF\"-STATEMENT" }, { 113,"\"END\" MISSING" }, { 114,"\".\" EXPECTED" }, { 115,"ILLEGAL CONSTANT IN EXPRESSION" }, { 116,"\"=\" EXPECTED" }, { 117,"CONSTANT EXPEXCTED" }, { 118,"\":\" EXPECTED" }, { 119,"UNIT KIND SPECIFICATION EXPECTED" }, { 120,"\"HIDDEN\" OR \"CLOSE\" OCCURRED TWICE" }, { 121,"HIDDEN OR CLOSE OUT OF A CLASS" }, { 122,"\"BLOCK\" EXPECTED" }, { 123,"OBJECT EXPRESSION IS NOT A GENERATOR" }, { 124,"\"DIM\" EXPECTED" }, { 125,"\"TO\"/\"DOWNTO\" EXPECTED" }, { 126,"ILLEGAL ARITHMETIC OPERATOR" }, { 127,"DECLARATION PART EXPECTED" }, { 128,"INCORRECT IDENTIFIER AT \"END\"" }, { 129,"WRONG STRUCTURE OF \"CASE\"-STATEMENT" }, { 130,"WRONG STRUCTURE OF \"DO\"-STATEMENT" }, { 131,"ILLEGAL USE OF \"MAIN\"" }, { 132,"\"WHEN\" EXPECTED" }, { 133,"TOO MANY BRANCHES IN \"CASE\"-STATEMENT" }, { 134,"\"BEGIN\" MISSING" }, { 135,"BAD OPTION" }, { 136,"IS IT REALLY A LOGLAN PROGRAM ???" }, { 137,"\"BLOCK\" MISSING -PARSING BEGAN" }, { 138,"\"REPEAT\" OUT OF A LOOP" }, { 139,"THERE IS NO PATH TO THIS STATEMENT" }, { 140,"\"ANDIF\"/\"ORIF\" MIXED" }, { 141,"ARRAY OF \"SEMAPHORE\" IS ILLEGAL" }, { 142,"WRONG HANDLER END" }, { 143,"LASTWILL INSIDE A STRUCTURED STATEMENT" }, { 144,"REPEATED LASTWILL" }, { 145,"NO PARAMETER SPECIFICATION" }, { 146,"WRONG REGISTER SPECIFICATION" }, { 147,"\",\" EXPECTED" }, { 191,null_program }, { 196,"***TOO MANY IDENTIFIERS" }, { 197,"***TOO MANY FORMAL PARAMETERS" }, { 198,"***PARSER STACK OVERLOADED" }, { 199,too_many_prototypes }, { 201,"WRONG REAL CONSTANT" }, { 202,"WRONG COMMENT" }, { 203,"WRONG CHARACTER CONSTANT" }, { 204,"WRONG INTEGER CONSTANT" }, { 205,"INTEGER OVERFLOW" }, { 206,"REAL OVERFLOW" }, { 211,"IDENTIFIER TOO LONG" }, { 212,"STRING TOO LONG" }, { 301,"PREFIX IS NOT A CLASS" }, { 303,"COROUTINE/PROCESS ILLEGAL HERE AS PREFIX" }, { 304,"HIDDEN IDENTIFIER CANNOT BE TAKEN" }, { 305,undeclared_identifier }, { 306,"UNDECLARED TYPE IDENTIFIER" }, { 307,"TYPE IDENTIFIER EXPECTED" }, { 308,"UNDECLARED PREFIX IDENTIFIER" }, { 309,"DECLARED MORE THAN ONCE" }, { 310,"TAKEN LIST IN UNPREFIXED UNIT" }, { 316,"FORMAL TYPE SPECIFICATION AFTER USING" }, { 317,"HIDDEN TYPE IDENTIFIER" }, { 318,"TYPE IDENTIFIER NOT TAKEN" }, { 319,"HIDDEN IDENTIFIER IN THE LIST" }, { 320,"IDENTIFIER IN THE LIST NOT TAKEN" }, { 321,"IDENTIFIER CANNOT BE TAKEN" }, { 322,"HIDDEN PREFIX IDENTIFIER" }, { 323,"PREFIX IDENTIFIER NOT TAKEN" }, { 329,"ONLY PROCEDURE AND FUNCTION MAY BE VIRTUAL" }, { 330,"VIRTUAL IN UNPREFIXED BLOCK/PROCEDURE/FUNCTION" }, { 331,"INCOMPATIBLE KINDS OF VIRTULS" }, { 332,"INCOMPATIBLE TYPES OF VIRTUALS" }, { 333,"DIFFERENT LENGTH OF FORM. PARAM. LISTS IN VIRTUALS" }, { 334,"INCOMPATIBLE KINDS OF THE 1ST LEVEL PARAMETERS" }, { 335,"INCOMPATIBLE TYPES OF THE 1ST LEVEL PARAMETERS" }, { 336,diff_lengths }, { 337,incompat_kinds }, { 338,"INCOMPATIBLE TYPES OF THE 2ND LEVEL PARAMETERS" }, { 341,"***DECLARATION PART OVERLOADED" }, { 342,"***TOO MANY CLASSES DECLARED" }, { 343,too_many_prototypes }, { 350,"UNDECLARED SIGNAL IDENTIFIER" }, { 351,"HIDDEN SIGNAL IDENTIFIER" }, { 352,"SIGNAL IDENTIFIER NOT TAKEN" }, { 353,"SIGNAL IDENTIFIER EXPECTED" }, { 354,"DIFFERENT TYPES OF PARAMETERS" }, { 355,"INCOMPATIBLE KINDS OF THE PARAMETERS" }, { 356,"DIFFERENT IDENTIFIERS OF PARAMETERS" }, { 357,incompat_kinds }, { 358,"DIFFERENT TYPES OF THE 2ND LEVEL PARAMETERS" }, { 359,diff_lengths }, { 360,"DIFFERENT LENGTHS OF FORM. PARAM. LISTS IN SIGNALS" }, { 361,"NON-LOCAL FORMAL TYPE CANNOT BE USED" }, { 362,"REPEATED HANDLER FOR SIGNAL" }, { 370,"ONLY \"INPUT\" IS LEGAL HERE" }, { 398,"CLASS PREFIXED BY ITSELF" }, { 399,"CYCLE IN PREFIX SEQUENCE" }, { 401,"WRONG LABEL IN \"CASE\"" }, { 402,"\"CASE\"-STATEMENT NESTED TOO DEEPLY" }, { 403,"TOO LONG SPAN OF \"CASE\" LABELS" }, { 404,"REPEATED LABEL IN \"CASE\"-STATEMENT" }, { 405,"ILLEGAL TYPE OF \"CASE\" EXPRESSION" }, { 406,"DIFFERENT TYPES OF LABELS AND \"CASE\" EXPRESSION" }, { 407,"NON-LOGICAL EXPRESSION AFTER \"IF\"/\"WHILE\"" }, { 408,"REAL CONSTANT OUT OF INTEGER RANGE" }, { 410,"SIMPLE VARIABLE EXPECTED" }, { 411,"NON-INTEGER CONTROL VARIABLE" }, { 412,"NON-INTEGER EXPRESSION" }, { 413,"FILE EXPRESSION EXPECTED" }, { 414,"STRING EXPRESSION EXPECTED" }, { 415,"REFERENCE EXPRESSION EXPECTED" }, { 416,"ARRAY EXPRESSION EXPECTED" }, { 417,"BOOLEAN EXPRESSION EXPECTED" }, { 418,"SEMAPHORE VARIABLE EXPECTED" }, { 419,"ILLEGAL TYPE IN \"OPEN\"" }, { 420,"VARIABLE EXPECTED" }, { 421,"CLASS IDENTIFIER AFTER \"NEW\" EXPECTED" }, { 422,"PROCEDURE IDENTIFIER AFTER \"CALL\" EXPECTED" }, { 423,"\"NEW\" MISSING" }, { 424,"\"CALL\" MISSING" }, { 425,"\"INNER\" OUT OF A CLASS" }, { 426,"\"INNER\" OCCURRED MORE THAN ONCE" }, { 427,"\"WIND\"/\"TERMINATE\" OUT OF A HANDLER" }, { 428,"\"INNER\" INSIDE LASTWILL" }, { 429,"DEFINITION CANNOT BE REDUCED TO CONSTANT" }, { 430,"UNDEFINED CONSTANT IN THE DEFINITION" }, { 431,"WRONG NUMBER OF INDICES" }, { 432,"INDEX OUT OF RANGE" }, { 433,"UPPER BOUND LESS THAN LOWER BOUND" }, { 434,"TOO MANY SUBSCRIPTS" }, { 435,"VARIABLE IS NOT ARRAY" }, { 440,"TYPE IDENTIFIER EXPECTED AFTER \"ARRAYOF\"" }, { 441,"INCORRECT FORMAT IN \"WRITE\"" }, { 442,"ILLEGAL EXPRESSION IN \"WRITE\"" }, { 443,"ILLEGAL TYPE OF VARIABLE IN \"READ\"" }, { 444,"NO DATA FOR I/O TRANSFER" }, { 445,"ILLEGAL EXPRESSION IN \"PUT\"" }, { 446,"ILLEGAL TYPE OF VARIABLE IN \"GET\"" }, { 448,"\"RAISE\" MISSING" }, { 449,"SIGNAL IDENTIFIER AFTER \"RAISE\" EXPECTED" }, { 450,"ILLEGAL PROCEDURE OCCURRENCE" }, { 451,"ILLEGAL CLASS OCCURRENCE" }, { 452,"ILLEGAL TYPE OCCURRENCE" }, { 453,"ILLEGAL SIGNAL OCCURRENCE" }, { 454,"ILLEGAL OPERATOR OCCURRENCE" }, { 455,"WRONG NUMBER OF OPERANDS" }, { 460,"DIVIDED BY ZERO" }, { 469,"WRONG REGISTER NUMBER" }, { 470,"ILLEGAL INPUT PARAMETER" }, { 471,"ILLEGAL OUTPUT PARAMETER" }, { 472,"ILLEGAL TYPE PARAMETER" }, { 473,"ILLEGAL PROCEDURE PARAMETER" }, { 474,"ILLEGAL FUNCTION PARAMETER" }, { 475,"ILLEGAL LEFT SIDE OF \"IS\"/\"IN\"" }, { 476,"ILLEGAL RIGHT SIDE OF \"IS\"/\"IN\"" }, { 477,"ILLEGAL PARAMETER OF \"ATTACH\"" }, { 478,"ILLEGAL TYPE OF EXPRESSION" }, { 479,"NEGATIVE STEP VALUE" }, { 500,"***PROGRAM UNEXPECTEDLY HARD" }, { 550,"***STACK OVERLOADED" }, { 551,"***TOO MANY AUXILIARY VARIABLES NEEDED" }, { 552,"***TOO MANY AUXILIARY REFERENCE VARIABLES NEEDED" }, { 553,"***STATEMENT SEQUENCE TOO LONG OR TOO COMPLICATED" }, { 554,"***REAL CONSTANTS DICTIONARY OVERFOW" }, { 600,undeclared_identifier }, { 601,"ILLEGAL TYPE BEFORE \".\"" }, { 602,"CLOSE IDENTIFIER AFTER \".\"" }, { 603,"UNDECLARED IDENTIFIER AFTER \".\"" }, { 604,"ILLEGAL OPERAND TYPE" }, { 605,"ILLEGAL TYPE IN \"DIV\"/\"MOD\" TERM" }, { 606,"INCOMPATIBLE TYPES IN COMPARISON" }, { 607,"UNRELATED CLASS TYPES IN COMPARISON" }, { 608,"STRINGS CANNOT BE COMPARED" }, { 609,"INCOMPATIBLE TYPES IN ASSIGNMENT/TRANSMISSION" }, { 610,"UNRELATED CLASS TYPES IN ASSIGNMENT/TRANSMISSION" }, { 611,"CONSTANT AFTER \".\"" }, { 612,"THIS CLASS DOES NOT OCCUR IN SL-CHAIN" }, { 613,class_identifier_expected }, { 614,class_identifier_expected }, { 615,"ILLEGAL TYPE BEFORE \"QUA\"" }, { 616,"ILLEGAL TYPE AFTER \"QUA\"" }, { 617,"ILLEGAL TYPE AFTER \"QUA\"" }, { 618,"UNRELATED TYPES IN \"QUA\"-EXPRESSION" }, { 619,"HIDDEN IDENTIFIER" }, { 620,"NON-TAKEN IDENTIFIER" }, { 621,"INVISIBLE IDENTIFIER AFTER \".\"" }, { 622,"FORMAL PARAMETER LIST SHORTER" }, { 623,"FORMAL PARAMETER LIST LONGER" }, { 624,"ACTUAL PARAMETER IS NOT A REFERENCE TYPE" }, { 625,"ACTUAL PARAMETER IS NOT A TYPE" }, { 626,"PROCEDURE-FUNCTION CONFLICT BETWEEN PARAMETERS" }, { 627,"UNMATCHED HEADS - WRONG KINDS OF PARAMETERS" }, { 628,"UNMATCHED HEADS-INCOMPATIBLE TYPES IN LISTS" }, { 629,"UNMATCHED HEADS-UNRELATED CLASS TYPES IN LISTS" }, { 630,"UNMATCHED HEADS-DIFFERENT NUMBERS OF PARAMETERS" }, { 631,"INCOMPATIBLE TYPES OF FUNCTION PARAMETERS" }, { 632,"FUNCTION/PROCEDURE EXPECTED" }, { 633,null_program }, { 634,"UNMATCHED HEADS-TOO WEAK TYPE IN ACTUAL LIST" }, { 635,"STANDARD FUNCTION/PROCEDURE CANNOT BE ACTUAL PAR." }, { 636,"ILLEGAL USE OF SEMAPHORE" }, { 637,"\"SEMAPHORE\" TYPE CANNOT BE USED" } }; static char *find_msg( errno ) int errno;{ int l=0; int u=sizeof(err_tab)/sizeof(err_tab[0]); while( l!=u ){ int m= ( l+u )/2 ; if( errno > err_tab[m].errno ) l=m; else if( errno < err_tab[m].errno ) u=m; else l=u=m; } if( err_tab[l].errno != errno ) return "UNKNOWN ERROR MESSAGE NUBER - INTERNAL COMPILER ERROR"; return err_tab[l].errmsg; } .