The Cool FAQ
A few questions seem to come up often in the implementation of Cool
compilers.
Q. Will someone please explain the semi-colon syntax to me?!
A. Semi-colons do not play the same role in Cool as in Pascal and
C. A semi-colon is used to terminate expressions that appear in
expression lists, such as in a begin-end block or in a case.
You cannot put a semi-colon any place you like; see Section 11 of the CoolAid.
Q. The following Cool program goes into an infinite loop. Is this
a bug in the compiler?
class Main is a : Main <- new Main; ... end;
A. No, this is not a bug. This program has an infinite loop
in the initialization of objects of class Main: to initialize
an object of class Main, another object of class Main must
be allocated and initialized, etc.
Q. Why doesn't the following assignment change the value of x?
x = 1
A. Because it isn't an assignment. "=" tests for equality in
Cool; "<-" is the assignment operator.