On 04/04/12 01:57, Jonas Maebe wrote:
On 03 Apr 2012, at 20:27, patspiper wrote:

The following is related to bug #0021641 (Array of const gives check range 
error).

Is it correct for the exception to manifest itself in the dword case and not 
the qword one?

  writeln(Format('%d', [qword(qword(High(Int64))+1)]));  //ok
  writeln(Format('%d', [dword(dword(High(integer))+1)]));  //exception
Yes, it's correct, because as mentioned in the bug report tvarrec can hold a 
qword, but not a dword (and dword must be passed as 32 bit = longint for Delphi 
compatibility).
Following the same logic, a qword must be passed as 64 bit = Int64 for Delphi compatibility, as Delphi's TVarRec can hold integer and Int64, but not qword nor dword.

In contrast, FPC's TVarRec can hold integer, Int64, and qword, meaning that a qword is passed as a qword and not Int64. So since FPC's TVarRec includes qword while Delphi's does not, why not add dword as well?

Stephano
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to