ok. Point taken. I agree, I was wrong. In retrospect, it was probably begin-end’s that made me like Pascal in first place.
It was a fair question, and the discussion has highlighted the ways in which even apparently innocuous "features" of a language can get messy.
Chained assignments, automatic type conversion, confusion between logical and bitwise operations...
Considering this reading of your example
if x=1 then x:= (2 AND DoSomething(x));
the real question is whether DoSomething() returns an integer or a boolean. If it's an integer then that AND might work... but then the compiler could reasonably ask itself whether the sizes are compatible. If it's a Boolean it shouldn't work, but there's a chance of things going wrong if the compiler tries to promote DoSomething()'s result to an integer. So in either case that literal 2, which is clearly numeric but hasn't been explicitly given a type, /should/ at least result in a warning which the user /should/ take note of.
MarkMLl