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

Reply via email to