well, the
[pascal]if not (obj = nil)[/pascal]
needs the parenthesis and won't work any other way because the compiler needs the expression being reveresed by the not to be evaluated to a boolean value and the only way that happens is by putting it in parenthesis.

in the same way as
[pascal]if a>10 or a<5[/pascal]
doesn't work

but

[pascal]if (a>10) or (a<5)[/pascal]
does.

not very easy to read, but required.