(* Refer to Alex Aiken, "The Cool Reference Manual": http://theory.stanford.edu/~aiken/software/cool/cool-manual.pdf for language specification. *) -- Exhibit various language constructs class Sample { testCondition(x: Int): Bool { if x = 0 then false else if x < (1 + 2) * 3 then true else false fi fi }; testLoop(y: Int): Bool { while y > 0 loop { if not condition(y) then y <- y / 2 else y <- y - 1; } pool }; testAssign(z: Int): Bool { i : Int; i <- ~z; }; testCase(var: Sample): SELF_TYPE { io : IO <- new IO; case var of a : A => io.out_string("Class type is A\n"); b : B => io.out_string("Class type is B\n"); s : Sample => io.out_string("Class type is Sample\n"); o : Object => io.out_string("Class type is object\n"); esac }; testLet(i: Int): Int { let (a: Int in let(b: Int <- 3, c: Int <- 4 in { a <- 2; a * b * 2 / c; } ) ) }; }; -- Used to test subclasses class A inherits Sample {}; class B inherits A {}; class C { main() : Int { (new Sample).testLet(1) }; }; -- "Hello, world" example class Main inherits IO { main(): SELF_TYPE { out_string("Hello, World.\n") }; };