[fpc-devel] Variable can not be initialized by named constant

Alexander Klenin klenin at gmail.com
Sun Mar 1 15:29:01 CET 2009


Since issue http://bugs.freepascal.org/view.php?id=13256 was marked resolved,
I can not add comments, so I'd like to discuss it here.

Original report claimed that code

const c: SomeType = <value>;
var y: t = c;
begin
end.

Works for primitive types, but not the complex ones.
This was an error on my part, as pointed out on the issue tracker:

>It also does not work with other types for me, unlike what's stated in the "Additional Information" section

It also does not work in Delphi, so this is certainly a design decision.

However, I think this decision is suboptimal.

This is a typical use case:

const EMPTY_RECT: TRect = (Left: 0; Right: 0; Top: 0; Bottom: 0);
...
var
  myRect: TRect = EMPTY_RECT;

I think this is quite reasonable to expect this to work.
The writeability of constants is IMNSHO just an ugly leftover from
Delphi history,
and should be disabled in _both_ delphi and objfpc modes:

{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
const x: integer = 1;
begin
  x := 3;
end.

Is rejected by Delphi, but compiled by FPC, which is a compatibility
bug in itself.

So how about re-submitting the issue as a feature request?

-- 
Alexander S. Klenin



More information about the fpc-devel mailing list