A TextLiteral.T
is a text generated by the compiler. They contain
either 8-bit CHAR
characters or 16-bit WIDECHAR
characters, but
not both. These values do not reside in the heap.
In spite of the declaration, the contents
array is only large enough
to hold the literal and its null termination.
UNSAFE INTERFACETextLiteral ; IMPORT RTHooks, TextClass; CONST (* DIV BITSIZE should not be here! *) (* MaxBytes = LAST (INTEGER) DIV BITSIZE (Byte) - 7 - 8 * ORD(BITSIZE(INTEGER) = 64); *) MaxBytes = 16_7FFFFFFF DIV BITSIZE (Byte) - 7 - 8 * ORD(BITSIZE(INTEGER) = 64); TYPE T = RTHooks.TextLiteral; REVEAL T = TEXT BRANDED "TextLiteral.T" OBJECT cnt : INTEGER; buf : ARRAY [0..MaxBytes - 1] OF Byte; OVERRIDES get_info := RTHooks.TextLitInfo; get_char := RTHooks.TextLitGetChar; get_wide_char := RTHooks.TextLitGetWideChar; get_chars := RTHooks.TextLitGetChars; get_wide_chars := RTHooks.TextLitGetWideChars; END; (* The array contains the characters of the text followed by a null character. If "cnt" is negative each pair of bytes in "buf" is a "WIDECHAR". Otherwise, each byte of "buf" is a "CHAR". *) TYPE Byte = [0..255]; END TextLiteral.