immutable class SFILE_ID < $STR, $HASH, $IS_LT{SFILE_ID}
****
A character position in a Sather source file. Used for generating error messages. Maintains a shared list of already processed files, and provides the routines for reading a file. Non-reentrant.


Ancestors
$IS_LT{_} $IS_EQ $HASH $STR



Public


Readonly Shareds
shared pos: INT;
**** the current position in source line
shared source: FSTR;
**** the current source file as a FSTR

Writable Shareds
shared files: FLIST{STR};
**** list of registered file names
shared pos: INT;
**** the current position in source line
shared source: FSTR;
**** the current source file as a FSTR

Constants
const eof_char: CHAR := '\0';
**** returned at end of file

Features
close_file
col_num_in: INT
**** Column position encoded in loc
create (loc: INT): SFILE_ID
file_in: STR
**** File name encoded in loc
hash:INT
index: INT
**** List index referred to encoded in loc
is_eq (y: SFILE_ID): BOOL
is_eq(arg: $OB): BOOL
is_lt(y: SFILE_ID): BOOL
**** Sorting won't be so arbitrary The character encoding should be in the lowest bits?
is_neq (y: SFILE_ID): BOOL
line_num_in: INT
**** Line number encoded in loc
next: CHAR
no_location: SFILE_ID
open_file (p: PROG, name: STR): BOOL
source_loc: SFILE_ID
str: STR
**** Name of the file into which loc is pointing


Private

const B: INT := 1024;
**** maximal line length
shared column: INT;
**** the current column
shared column: INT;
**** the current column
shared files: FLIST{STR};
**** list of registered file names
shared line: INT := 0;
**** current accumulated line number
shared line: INT := 0;
**** current accumulated line number
shared line_pos: INT;
**** the position of the first character in the line
shared line_pos: INT;
**** the position of the first character in the line
shared lines: FLIST{INT};
**** list of accumulated lines (0 for first file)
shared lines: FLIST{INT};
**** list of accumulated lines (0 for first file)
attr loc: INT;
****
attr loc: INT;
****
shared newline: BOOL;
**** next character starts a new line
shared newline: BOOL;
**** next character starts a new line
const sentinel: INT := 2147483647;
****