| (* M2Error.def error reporting interface. |
| |
| Copyright (C) 2001-2025 Free Software Foundation, Inc. |
| Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. |
| |
| This file is part of GNU Modula-2. |
| |
| GNU Modula-2 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 3, or (at your option) |
| any later version. |
| |
| GNU Modula-2 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. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Modula-2; see the file COPYING3. If not see |
| <http://www.gnu.org/licenses/>. *) |
| |
| DEFINITION MODULE M2Error ; |
| |
| (* |
| Title : M2Error |
| Author : Gaius Mulley |
| System : UNIX (gm2) |
| Description: provides an interface between the string handling modules |
| and the compiler. |
| *) |
| |
| FROM SYSTEM IMPORT BYTE ; |
| FROM DynamicStrings IMPORT String ; |
| FROM NameKey IMPORT Name ; |
| |
| |
| TYPE |
| Error ; |
| ErrorScope ; |
| |
| |
| (* |
| InternalError - displays an internal error message together with the compiler source |
| file and line number. |
| This function is not buffered and is used when the compiler is about |
| to give up. |
| *) |
| |
| PROCEDURE InternalError (message: ARRAY OF CHAR) <* noreturn *> ; |
| |
| |
| |
| (* *************************************************************************** |
| The following routines are used for normal syntax and semantic error reporting |
| *************************************************************************** *) |
| |
| |
| (* |
| WriteFormat0 - displays the source module and line together |
| with the encapsulated format string. |
| Used for simple error messages tied to the current token. |
| *) |
| |
| PROCEDURE WriteFormat0 (a: ARRAY OF CHAR) ; |
| |
| |
| (* |
| WriteFormat1 - displays the source module and line together |
| with the encapsulated format string. |
| Used for simple error messages tied to the current token. |
| *) |
| |
| PROCEDURE WriteFormat1 (a: ARRAY OF CHAR; w: ARRAY OF BYTE) ; |
| |
| |
| (* |
| WriteFormat2 - displays the module and line together with the encapsulated |
| format strings. |
| Used for simple error messages tied to the current token. |
| *) |
| |
| PROCEDURE WriteFormat2 (a: ARRAY OF CHAR; w1, w2: ARRAY OF BYTE) ; |
| |
| |
| (* |
| WriteFormat3 - displays the module and line together with the encapsulated |
| format strings. |
| Used for simple error messages tied to the current token. |
| *) |
| |
| PROCEDURE WriteFormat3 (a: ARRAY OF CHAR; w1, w2, w3: ARRAY OF BYTE) ; |
| |
| |
| (* |
| NewError - creates and returns a new error handle. |
| *) |
| |
| PROCEDURE NewError (AtTokenNo: CARDINAL) : Error ; |
| |
| |
| (* |
| NewWarning - creates and returns a new error handle suitable for a warning. |
| A warning will not stop compilation. |
| *) |
| |
| PROCEDURE NewWarning (AtTokenNo: CARDINAL) : Error ; |
| |
| |
| (* |
| NewNote - creates and returns a new error handle suitable for a note. |
| A note will not stop compilation. |
| *) |
| |
| PROCEDURE NewNote (AtTokenNo: CARDINAL) : Error ; |
| |
| |
| (* |
| ChainError - creates and returns a new error handle, this new error |
| is associated with, e, and is chained onto the end of, e. |
| *) |
| |
| PROCEDURE ChainError (AtTokenNo: CARDINAL; e: Error) : Error ; |
| |
| |
| (* |
| MoveError - repositions an error, e, to token, AtTokenNo, and returns, e. |
| *) |
| |
| PROCEDURE MoveError (e: Error; AtTokenNo: CARDINAL) : Error ; |
| |
| |
| (* |
| SetColor - informs the error module that this error will have had colors |
| assigned to it. If an error is issued without colors assigned |
| then the default colors will be assigned to the legacy error |
| messages. |
| *) |
| |
| PROCEDURE SetColor (e: Error) : Error ; |
| |
| |
| (* |
| ErrorFormat routines provide a printf capability for the error handle. |
| *) |
| |
| PROCEDURE ErrorFormat0 (e: Error; a: ARRAY OF CHAR) ; |
| PROCEDURE ErrorFormat1 (e: Error; a: ARRAY OF CHAR; w: ARRAY OF BYTE) ; |
| PROCEDURE ErrorFormat2 (e: Error; a: ARRAY OF CHAR; w1, w2: ARRAY OF BYTE) ; |
| PROCEDURE ErrorFormat3 (e: Error; a: ARRAY OF CHAR; w1, w2, w3: ARRAY OF BYTE) ; |
| PROCEDURE ErrorString (e: Error; str: String) ; |
| |
| |
| (* *************************************************************************** |
| The following routines are useful for positioning and warnings and errors |
| at tokens. The strings are emitted later, so the caller must not destroy |
| the strings. |
| *************************************************************************** *) |
| |
| PROCEDURE ErrorStringAt (s: String; tok: CARDINAL) ; |
| PROCEDURE ErrorStringAt2 (s: String; tok1, tok2: CARDINAL) ; |
| PROCEDURE ErrorStringsAt2 (s1, s2: String; tok1, tok2: CARDINAL) ; |
| PROCEDURE WarnStringAt (s: String; tok: CARDINAL) ; |
| PROCEDURE WarnStringAt2 (s: String; tok1, tok2: CARDINAL) ; |
| PROCEDURE WarnStringsAt2 (s1, s2: String; tok1, tok2: CARDINAL) ; |
| |
| |
| (* |
| WarnFormat0 - displays the source module and line together |
| with the encapsulated format string. |
| Used for simple warning messages tied to the current token. |
| *) |
| |
| PROCEDURE WarnFormat0 (a: ARRAY OF CHAR) ; |
| |
| |
| (* |
| WarnFormat1 - displays the source module and line together |
| with the encapsulated format string. |
| Used for simple warning messages tied to the current token. |
| *) |
| |
| PROCEDURE WarnFormat1 (a: ARRAY OF CHAR; w: ARRAY OF BYTE) ; |
| |
| |
| (* |
| FlushErrors - switches the output channel to the error channel |
| and then writes out all errors. |
| If an error is present the compilation is terminated. |
| All warnings are ignored. |
| *) |
| |
| PROCEDURE FlushErrors ; |
| |
| |
| (* |
| FlushWarnings - switches the output channel to the error channel |
| and then writes out all warnings. |
| If an error is present the compilation is terminated, |
| if warnings only were emitted then compilation will |
| continue. |
| *) |
| |
| PROCEDURE FlushWarnings ; |
| |
| |
| (* |
| ErrorAbort0 - aborts compiling, it flushes all warnings and errors before aborting. |
| *) |
| |
| PROCEDURE ErrorAbort0 (a: ARRAY OF CHAR) <* noreturn *> ; |
| |
| |
| (* |
| AnnounceScope - return the error string message with a scope description prepended |
| assuming that scope has changed. |
| *) |
| |
| PROCEDURE AnnounceScope (e: Error; message: String) : String ; |
| |
| |
| (* |
| EnterImplementationScope - signifies to the error routines that the front end |
| has started to compile implementation module scopeName. |
| *) |
| |
| PROCEDURE EnterImplementationScope (scopename: Name) ; |
| |
| |
| (* |
| EnterProgramScope - signifies to the error routines that the front end |
| has started to compile program module scopeName. |
| *) |
| |
| PROCEDURE EnterProgramScope (scopename: Name) ; |
| |
| |
| (* |
| EnterModuleScope - signifies to the error routines that the front end |
| has started to compile an inner module scopeName. |
| *) |
| |
| PROCEDURE EnterModuleScope (scopename: Name) ; |
| |
| |
| (* |
| EnterDefinitionScope - signifies to the error routines that the front end |
| has started to compile definition module scopeName. |
| *) |
| |
| PROCEDURE EnterDefinitionScope (scopename: Name) ; |
| |
| |
| (* |
| EnterProcedureScope - signifies to the error routines that the front end |
| has started to compile definition module scopeName. |
| *) |
| |
| PROCEDURE EnterProcedureScope (scopename: Name) ; |
| |
| |
| (* |
| DepthScope - returns the depth of the scope stack. |
| *) |
| |
| PROCEDURE DepthScope () : CARDINAL ; |
| |
| |
| (* |
| GetAnnounceScope - return message with the error scope attached to message. |
| filename and message are treated as read only by this |
| procedure function. |
| *) |
| |
| PROCEDURE GetAnnounceScope (filename, message: String) : String ; |
| |
| |
| (* |
| DefaultProgramModule - sets up an unnamed program scope before the Ident is seen. |
| *) |
| |
| PROCEDURE DefaultProgramModule ; |
| |
| |
| (* |
| DefaultImplementationModule - sets up an unnamed implementation |
| scope before the Ident is seen. |
| *) |
| |
| PROCEDURE DefaultImplementationModule ; |
| |
| |
| (* |
| DefaultDefinitionModule - sets up an unnamed definition |
| scope before the Ident is seen. |
| *) |
| |
| PROCEDURE DefaultDefinitionModule ; |
| |
| |
| (* |
| DefaultInnerModule - sets up an unnamed inner |
| scope before the Ident is seen. |
| *) |
| |
| PROCEDURE DefaultInnerModule ; |
| |
| |
| (* |
| DefaultProcedure - sets up an unnamed procedure |
| scope before the Ident is seen. |
| *) |
| |
| PROCEDURE DefaultProcedure ; |
| |
| |
| (* |
| EnterErrorScope - pushes the currentScope and sets currentScope to scope. |
| *) |
| |
| PROCEDURE EnterErrorScope (scope: ErrorScope) ; |
| |
| |
| (* |
| LeaveErrorScope - leave the current scope and pop into the previous one. |
| *) |
| |
| PROCEDURE LeaveErrorScope ; |
| |
| |
| (* |
| GetCurrentErrorScope - returns currentScope. |
| *) |
| |
| PROCEDURE GetCurrentErrorScope () : ErrorScope ; |
| |
| |
| (* |
| ResetErrorScope - should be called at the start of each pass to |
| reset the error scope index. |
| *) |
| |
| PROCEDURE ResetErrorScope ; |
| |
| |
| END M2Error. |