-- LupinePrintTest.mesa.
-- Copyright (C) 1985 by Xerox Corporation. All rights reserved.
-- Last edited by BZM on 10-Mar-82 16:43:19.
-- Bob Hagmann February 8, 1985 5:09:56 pm PST
DIRECTORY
BasicTime USING [Unpacked];
LupinePrintTest: DEFINITIONS = BEGIN
-- Nonsense routines with complicated, explicit types to be printed.
-- Lupine is not supposed to translate them properly!
Basics: PROC [
u: UNSPECIFIED, lu: LONG UNSPECIFIED,
i: INTEGER, li: LONG INTEGER,
c: CARDINAL, lc: LONG CARDINAL,
w: WORD,
ch:CHARACTER,
b: BOOLEAN,
r: REAL ];
CedarBasics: PROC [
n: NAT,
li: INT,
ch: CHAR,
b: BOOL ];
Subranges: ERROR [
i: INTEGER[-100..-1],
c: CARDINAL[500..1000],
n: NAT[100..100],
ch:CHARACTER['a..'z],
b: BOOLEAN[TRUE..TRUE] ];
Enumerations: PROC [
none: {}, one: {a}, two: {a,b},
more: MACHINE DEPENDENT {a,b,c,d,e,f,g,h} ];
Simple: PROCEDURE [input: BOOLEAN] RETURNS [output: CHARACTER];
Transfers: SIGNAL [
proc: PROCEDURE, error: ERROR, signal: SIGNAL,
port: PORT, program: PROGRAM, process: PROCESS ];
HANDLE: TYPE = PRIVATE POINTER;
Arrays: SIGNAL [PACKED ARRAY BOOLEAN OF ARRAY [1..7] OF REF RECORD [
x: ARRAY [0..1) OF HANDLE,
y: ARRAY [2000..2001] OF PACKED ARRAY CHARACTER OF BOOLEAN,
z: SEQUENCE index: CHARACTER OF BOOLEAN] ];
Sequences: PROCEDURE [
compSeqOK: REF RECORD [PACKED SEQUENCE COMPUTED [-10..10] OF CHARACTER],
compSeqBad: REF RECORD [SEQUENCE COMPUTED CHARACTER OF POINTER] ]
RETURNS [
finiteSeq: REF RECORD [SEQUENCE bound: [-10..10] OF CHARACTER],
infiniteSeq: REF RECORD [SEQUENCE index: NAT OF BasicTime.Unpacked] ];
Records: ERROR [
type: {Mary, had, a, little, lamb},
record: MACHINE DEPENDENT RECORD [
one: STRING,
two: REF POINTER TO RECORD [block: ARRAY [0..4) OF STRING],
three: DESCRIPTOR FOR ARRAY OF RECORD [
s: LONG STRING,
h: HANDLE] ] ];
Zones: PROCEDURE [gc: ZONE, heap: UNCOUNTED ZONE] RETURNS [mds: MDSZone];
IllegalTypes: ERROR [
c: POINTER TO CONDITION,
m: POINTER TO MONITORLOCK,
mr: MONITORED RECORD [q: INTEGER] ];
CedarSignal: SIGNAL [
nat: NAT,
refTime: REF BasicTime.Unpacked,
compSeq: REF RECORD [PACKED SEQUENCE COMPUTED [-10..10] OF CHARACTER] ]
RETURNS [
atom: ATOM,
list: LIST OF RECORD[a,b: LIST OF ATOM] ];
CedarProc: PROC [
nat: NAT,
refInt: REF INTEGER,
ref: REF,
refAny: REF ANY,
compSeq: REF RECORD [PACKED SEQUENCE COMPUTED [-10..1] OF CHARACTER] ]
RETURNS [
body: REF READONLY StringBody,
zone: ZONE,
atom: ATOM,
list: LIST OF RECORD[a,b: LIST OF ATOM],
sequence: POINTER TO RECORD [SEQUENCE bogus: {bogus} OF REF TEXT],
signal: SIGNAL RETURNS [PROC [one: STRING, two: HANDLE, three: POINTER]
RETURNS [list: LIST OF READONLY HANDLE] ] ];
AnonParams: PROCEDURE [LONG INTEGER, HANDLE, LIST OF ZONE]
RETURNS [LONG DESCRIPTOR FOR ARRAY OF PROCEDURE [REAL] RETURNS [BOOLEAN]];
ProcParam: SIGNAL RETURNS [ PROC [one: STRING, two: HANDLE, three: POINTER]
RETURNS [list: LIST OF READONLY HANDLE] ];
ProcArray: PROCEDURE [input: WORD]
RETURNS [output: LONG DESCRIPTOR FOR READONLY ARRAY OF PROCEDURE [REAL] ];
ExportObject: TYPE[1];
OpaqueTest: PROCEDURE [object: ExportObject]
RETURNS [approved: POINTER TO ExportObject, dubious: HANDLE];
ComputedOverlaidRecords: PROCEDURE RETURNS [
bad: RECORD [SELECT OVERLAID * FROM
empty => [],
string => [s: STRING],
another => [SELECT COMPUTED {HaHa} FROM
HaHa => [test: INTEGER, p: POINTER],
ENDCASE ],
ENDCASE] ];
VariantRecords: SIGNAL [
small: DESCRIPTOR FOR READONLY ARRAY OF RECORD [
handle: HANDLE,
oddPart: SELECT varTag: * FROM
time => [t: BasicTime.Unpacked],
empty => [],
plain => [c: CARDINAL, r: REAL],
ENDCASE ] ]
RETURNS [
big: RECORD [
common: HANDLE,
plain: PACKED ARRAY [0..8000] OF CHARACTER,
variant: SELECT varTag: * FROM
time => [t: BasicTime.Unpacked],
list => [l: LIST OF REF RECORD [SEQUENCE num: [-10..10] OF REF TEXT]],
handle => [h, i, j: HANDLE],
empty => [],
plain => [c: CARDINAL, r: REAL],
small => [fill: BOOLEAN],
another => [SELECT tag: {ImBad, YoureBad} FROM
ImBad => [test: ExportObject, p: POINTER],
YoureBad => [desc: LONG DESCRIPTOR FOR ARRAY OF RECORD [
s: LONG STRING,
h: HANDLE,
time: BasicTime.Unpacked] ],
ENDCASE ],
ENDCASE ] ];
Spectrum: TYPE = RECORD [
primary: SELECT primaryTag: * FROM
red => [i: INTEGER],
yellow => [],
blue => [ SELECT secondaryTag: * FROM
light => [],
medium => [r: REAL],
dark => [c: CARDINAL],
ENDCASE ],
ENDCASE ];
BoundVariants: PROCEDURE [
spectrum: Spectrum,
red: red Spectrum,
lightBlue: light blue Spectrum,
yellow: yellow Spectrum,
darkBlue: dark blue Spectrum ];
END. -- LupinePrintTest.
Bob Hagmann February 8, 1985 5:09:57 pm PST
changes to: DIRECTORY