Copyright (C) 1994, Digital Equipment Corp.
INTERFACE SynLocation;
IMPORT SynWr;
TYPE
T <: ROOT;
(* "Location.T" represents a location in a source file where an error
may occur. Line numbers and character numbers start at 1.
There are two styles of error reporting and two
corresponding styles of locations: (1) "line-style", which
reports the file name, the line position within the file, and
the character position within the line; (2) "selection-style",
which reports the file name and two character positions within
the file. The choice between these styles is made by using
either (1) the NewLineLocation or (2) the NewCharLocation
procedure below.
*)
Located =
BRANDED "Located" OBJECT
location: T := NIL;
END;
(* A located object, to be subtyped. *)
Info =
RECORD
fileName: TEXT;
char: INTEGER;
line, lineChar: INTEGER;
END;
Info represents a location in a file. char is the character
position within the file. line is the line position within the file,
and lineChar is the character position within that line.
PROCEDURE PackageSetup();
To be called at least once before any other use of the synloc package.
VAR (*READONLY*) noLocation: T;
No particular location.
PROCEDURE NewLocation(where: TEXT): T;
The location is described simply by the parameter where
PROCEDURE NewLineLocation(READONLY info: Info): T;
Creates a new line-style error location from a Info that
specifyies fileName, line, and lineChar; char is not used.
If fileName is empty, this indicates top-level interaction, and
the position information is relative to the beginning of the
interactive session.
PROCEDURE NewCharLocation(READONLY begInfo, endInfo: Info): T;
Creates a new selection-style error location from a pair of Info
each specifying fileName, and char; line, and lineChar are not used.
If fileName is empty, this indicates top-level interaction, and
the position information is relative to the beginning of the
interactive session.
PROCEDURE PrintLocation(swr: SynWr.T; location: T);
Prints the location of an error, in line-style or selection-style
as determined by location.
PROCEDURE PrintLineDifference(swr: SynWr.T; location: T; currentLine: INTEGER);
This is used only for line-style errors that occur during top-level
interaction; currentLine should provide the current line number from
the beginning of the interactive session. Then, PrintLineDifference
generates location messages such as last input line or input line -5.
END SynLocation.