First i will note that what i state is not an error or bug in free pascal, but it is somehow unclean implemented. The decision for modifiers like cvar or cdecl to be an <identifier> token or an <modifier> token relies on context information. But what is that context? An example:
type name=procedure; cdecl=integer; results in an error, but type cdecl=integer; name=procedure; is correct. The procedure type declaration consumes the <cdecl> token regardless of the following token. There is no need for this. The <=> token can be used as context switch, but you´ll need a look ahead of 2 tokens. And that conflicts with the LL1 base structure of pascal. What a pity. For some other modifiers you have the same situation var name:typ; cvar:integer; is an error, but var cvar:integer; name:typ; is correct. You may say in most circumstances the required <;> token right before the modifier token is the problem. For example for the <absolute> directive this kind of problem does not arise. The forward directive is another example, would´nt it be better to have forward be an keyword? I think if the compiler allows one construct he should not reject the other. But, i am not the first programmer who complains about that, so put it in the garbage. (Or start discussion) Sorry for my bad English, with best regards Jörg Schülke _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel