This directory contains three example ISL sources: Foo.isl, Bar.isl, and Baz.isl.  Baz.O is a direct subtype of both Foo.O and Bar.P, which are themselves subtypes of nothing.

The test programs are {Foo,Bar,Baz}M3{Server,Client} (and, when the Imake rules for C++ get fixed, FooCppServer).  Each client can be run against the corresponding server, and each client can also be run against BazM3Server.  Each server takes no command line arguments, and prints out one or more SBH & most-specific-type-id pairs.  Each client's first two command line arguments are an SBH and most-specific-type-id; don't forget to quote them enough for the shell you're using.

FooM3Client takes two or more command line arguments.  When given only two, it prints
	Got <>
When given three, it prints
	Foo.E1(<`A3'>)
(where A3 is the third argument).  When given four, it prints
	Foo.E2(ID)
(where ID is an integer private to the discriminator).  When given five, it prints
	Got <`A3', `A4', `A5'>
When given six, it prints
	Got O A1 => O A1
When given seven or more, it prints
	Got OO X => OO Y
(where X and Y are two new SBHs).

BarM3Client takes three command line arguments.  It prints
	Got M
where M is the sum of A3 and ID.

BazM3Client takes three or more command line arguments.  When its third argument is "M1", it takes exactly four arguments, and prints
	Got <`from a TN', `A4', `M'>
where M is the product of A4 and ID.  When its third argument is "P1", it takes exactly four arguments, and prints
	Got M
where M is the sum of A4 and ID.  For all other values of the third argument, BazM3Client behaves like FooM3Client with that third argument deleted from the argument series.